如何手动为Grub2添加菜单条目以从ISO文件启动,同时保留现有操作系统并安装新系统
如何手动为Grub2添加菜单条目以从ISO文件启动,同时保留现有操作系统并安装新系统
别担心,我一步步带你搞定这个事儿,毕竟刚接触Grub的时候确实容易懵😉 你想要保留现有系统,同时通过Grub菜单从ISO启动安装新系统,这个思路完全可行,下面是具体操作步骤:
一、前期准备
- 把你要安装的系统ISO文件放到一个Grub能识别的分区里(推荐放到
/boot目录,或者某个ext4格式的分区根目录,尽量别用NTFS分区,Grub对它的支持偶尔会出问题) - 打开终端,输入
blkid命令,找到存放ISO的分区信息,比如设备名(/dev/sda2)或者UUID,记下来后面会用到 - 重要提醒:先备份Grub的配置文件,防止操作失误搞坏现有启动项:
sudo cp /etc/default/grub /etc/default/grub.bak sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak
二、添加自定义Grub菜单条目
我们不会直接修改自动生成的grub.cfg(因为每次更新Grub都会覆盖它),而是修改专门的自定义条目文件:
- 打开自定义条目编辑文件:
sudo nano /etc/grub.d/40_custom - 在文件末尾添加以下菜单条目(根据你的实际情况修改内容):
👉 小说明:menuentry "安装新系统(从ISO启动)" { # 替换成你的ISO文件路径,比如放到/dev/sda2根目录就是"/ubuntu-22.04.iso",放到/iso文件夹就是"/iso/ubuntu-22.04.iso" set isofile="/ubuntu-22.04.iso" # 替换成你的分区设备名,hd0是第一块硬盘,2是第三分区(Grub从0开始计数) loopback loop (hd0,2)$isofile # 下面的路径根据发行版调整,Ubuntu/CentOS等发行版的内核路径可能不同 linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash initrd (loop)/casper/initrd }loopback loop是让Grub把ISO文件当成一个虚拟磁盘挂载linux和initrd行要对应ISO里的内核和初始化镜像路径,比如CentOS的话可能是(loop)/isolinux/vmlinuz和(loop)/isolinux/initrd.img,你可以先挂载ISO看看里面的结构再调整
- 保存并退出nano:按
Ctrl+O,回车确认保存,再按Ctrl+X退出
三、更新Grub配置
执行下面的命令让Grub识别新添加的菜单条目:
sudo update-grub
执行完后会看到输出里提到“Found ...”,说明新条目已经被成功添加进去了
四、启动安装
重启你的电脑,在Grub启动菜单里就能看到你刚才添加的“安装新系统(从ISO启动)”条目,选择它就能进入ISO的安装界面了。安装的时候记得选择“与现有操作系统共存”的选项,这样就能保留原来的系统,把新系统装到空闲空间里。
注意事项
- 如果你的机器是UEFI模式,确保当前系统也是UEFI启动的,并且EFI分区已经正确挂载(一般挂载在
/boot/efi) - 一定要确认ISO文件的路径和分区编号正确,不然会启动失败
- 如果启动失败,可以重启回到原来的系统,检查配置文件哪里写错了,或者恢复之前备份的配置文件
备注:内容来源于stack exchange,提问作者DaBoot




