如何聚合另一个分区的 grub 条目?

如何聚合另一个分区的 grub 条目?

假设您在 /dev/sda 上有一个“主”GRUB,带有多个 Linux 内核,并且在 /dev/sdb2 上还有一个辅助 Linux 发行版。

计算机启动至 /dev/sda GRUB。从那里,如何启动 /dev/sdb2 中的内核?

当您在 /dev/sda 中的发行版中更新 grub 时,OS-prober 将检测 /dev/sdb2 中的内容并相应地填充 GRUB 菜单(/dev/sda)/boot/grub/grub.cfg

但这很不方便,因为当您安装新内核或更改 /dev/sdb2 发行版中的引导选项时,这会更新,(/dev/sdb2)/boot/grub/grub.cfg但不会更新主 grub.cfg。

如何让主 GRUB 读取并合并辅助 GRUB 中的条目?

答案1

有一个 GRUB 命令,未记录在手册,它精确地解析配置文件,提取条目并忽略配置的其余部分:extract_entries_source。这样,对辅助发行版 GRUB 菜单项的任何更改都将自动纳入主 GRUB 菜单中。

在主(“主机”)发行版中

添加自定义条目/etc/grub.d/40_custom

# A dummy entry to mark the separation
menuentry "Extracted from /dev/sdb2" {
        true
}

# the following if for MBR disk, change to part_gpt if necessary
insmod part_msdos
# adapt with appropriate file system module
insmod ext2
# replace aaaa-bbbb-cccc with actual partition UUID
search --fs-uuid aaaa-bbbb-cccc --set slavegrub --no-floppy
extract_entries_source ($slavegrub)/boot/grub/grub.cfg

分区(文件系统)的 UUID 可以通过 获得blkid

您还需要阻止 GRUB 自动使用 OS-prober 填充菜单。这是在全局中配置的/etc/default/grub,可以使用以下命令全局禁用,GRUB_DISABLE_OS_PROBER也可以使用以下命令选择性地对某些分区禁用此功能GRUB_OS_PROBER_SKIP_LIST(请参阅GRUB手册)。

然后你可以update-grub

在二次分布中

无需执行任何操作,因为该/boot/grub/grub.cfg文件只会读取其条目,而永远不会实际执行。您可能希望在那里完全禁用操作系统探测器,因为当集成到主 GRUB 菜单中时,这些条目将是多余的。

相关内容