推荐使用哪种方式来链式加载单独的 Ubuntu /boot 分区

推荐使用哪种方式来链式加载单独的 Ubuntu /boot 分区

我想在同一硬盘上双启动两个不同的 Ubuntu 发行版。我已经安装了第一个,带有外部 /boot 分区(例如/dev/sda2)。

然后我安装了第二个发行版,带有单独的 /boot 分区(例如/dev/sda5)。

我以为,安装第二个 Ubuntu 后,update-grub会通过从 /dev/sda5 链式加载 /dev/sda2 自动添加第一个 Ubuntu 的条目。但这并没有发生。

现在,我想知道,从 /dev/sda5 链式加载 /dev/sda2 的推荐方法是什么。我相信推荐的方法将涉及使用 /etc/grub.d 上的现有脚本,因为如果我手动更改它,/boot/grub/grub.cfg 将被替换。

答案1

首先,我需要的效果(将一个发行版的 grub 菜单与其他发行版合并)不需要链式加载configfile;只需使用文件中的 Grub 2 命令重新加载 grub 配置就足够了/etc/grub.d/40_custom,如下所示:

menuentry "Ubuntu Precise 64 bit" {
   configfile (hd0,gpt2)/grub/grub.cfg   
}

其中(hd0,gpt2)是另一个 Linux 的 /boot 分区的地址(在此示例中,它是 GPT sda 磁盘上的第 2 个分区)。

编辑后,运行很重要sudo update-grub,这样更改才会传播到/boot/grub/grub.cfg

这样,就可以以优雅且无错误的方式维护两个独立的 Linux 安装(例如,它们可能共享相同的 btrfs 根分区,但在不同的子卷上)

答案2

在 bios 系统上,我更喜欢使用多重引导选项进行链式加载:

menuentry "Ubuntu, Trusty (on lvm/nantes-trusty)" --class gnu-linux --class gnu --class os {
insmod part_gpt
insmod lvm
insmod ext2
set root='lvm/nantes-trusty'
multiboot /boot/grub/i386-pc/core.img
}

这样做的好处是您可以重新创建一个专用于 grub 的分区,除非您想要删除或添加另一个操作系统,否则该分区永远不会改变,并且您不会让操作系统依赖于自身,这在 grub 版本发生变化时非常有用。

因为我碰巧有一个 grub 版本会加载旧的 grub.cfg 文件。但这里没有发生这种情况,因为当您加载 core.img 时,您会加载与其自己的 grub.cfg 文件一起的 grub。

事实上它与 uefi 加载 grub 时所做的类似,因为你给他的是 core.efi 而不是 core.img

相关内容