这个骚操作主要用于平时常用一个系统(比如Ubuntu), 偶尔使用其他系统(Deepin,Kali,CentOS,WinPE…), 经常要安装各种系统懒得每次重新刻盘的人, 可以实现一个移动设备里面装全套Linux发行版(当然是Live系统), 同时引导多个iso文件, 更新方便(直接换新的iso文件), 即开即用随身携带.
首先怎么安装一个完整的系统到移动设备见这篇: https://xccbk.cn/111.html. 按照上文安装完之后移动设备里面才有一套完整的引导程序, 可以在任意设备上启动.
当然若果只是把移动设备当做多个系统的安装盘可以只装Grub而不是完整的系统. 这时只要分好区, sudo mount /dev/sdb# /mnt && \
挂载, 然后sudo grub-install --target x86_64-efi --efi-directory /mnt --boot-directory=/mnt/boot --removable
即可. 如果失败也可以用上文的boot-repair来搞.
主系统可以正常启动/Grub安装完之后, 把其他系统的iso文件都扔到移动设备里面任意位置. 注意不能放在exfat文件系统里面, Grub读不了.
然后修改Grub的配置文件, 添加引导项. 如果已经在移动设备里安装了完整系统, 就修改/etc/grub.d/40_custom
, 也可以直接修改/boot/grub/grub.cfg
(这两个文件会自动同步). 在文件中添加如下代码(这个代码示范的是引导Deepin和KaliLinux以及Ubuntu的iso文件, 其他系统可以类推) :
menuentry "Deepin15 iso" --class deepin { set isofile='/home/cgazn/deepin-15.11-amd64.iso' loopback loop (hd0,gpt2)$isofile echo '载入Deepin...' linux (loop)/live/vmlinuz.efi boot=live config findiso=$isofile noeject noprompt locales=zh_CN.UTF-8 -- echo '载入初始化内存盘...' initrd (loop)/live/initrd.lz } menuentry "Ubuntu16.04 iso" { set isofile='/home/cgazn/ubuntu-16.04.6-desktop-amd64.iso' loopback loop (hd0,gpt2)$isofile echo '载入Ubuntu...' linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash locales=zh_CN.UTF-8 -- echo '载入初始化内存盘...' initrd (loop)/casper/initrd } menuentry "KaliLinux iso" { set isofile="/home/cgazn/kali-linux-2019.2-amd64.iso" loopback loop (hd0,gpt2)$isofile echo '载入KaliLinux...' linux (loop)/live/vmlinuz boot=live config findiso=$isofile noeject noprompt locales=zh_CN.UTF-8 -- echo '载入初始化内存盘...' initrd (loop)/live/initrd.img }
然后运行sudo update-grub
, 重启就会发现引导菜单里面多了三项. 引导其他iso时要注意vmlinuz
和initrd
这两个文件在不同系统中可能后缀不同, 或者没有后缀, 或者路径不同, 需要自己用解压软件打开iso文件寻找这两个文件然后修改对应代码.
最新评论