用Grub引导iso文件实现一个移动硬盘1个主系统n个live系统/一个U盘当做n个启动盘随身携带(UEFI环境)

这个骚操作主要用于平时常用一个系统(比如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时要注意vmlinuzinitrd这两个文件在不同系统中可能后缀不同, 或者没有后缀, 或者路径不同, 需要自己用解压软件打开iso文件寻找这两个文件然后修改对应代码.

赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址