使用 UEFI 安装多个 GRUB:它们如何找到它们的配置?

使用 UEFI 安装多个 GRUB:它们如何找到它们的配置?

根据 Rod Smith 的 UEFI 文档http://www.rodsbooks.com/efi-bootloaders/grub2.html,grub.cfg 可以与 grubx64.efi 一起安装在 EFI 分区上,也可以留在 linux 分区上的 /boot/ 中。显然,Ubuntu 使用后一种方法。

我的问题是:GRUB 如何找到如果有更多 Linux 分区,那么它们是什么? grubx64.efi 是否是每个安装的自定义版本,包含分区 UUID? Linux 分区是否有搜索顺序?

我具体在寻找什么:是否可以在 UEFI 级别设置多个 GRUB 安装,例如两个 grubx64.efi 文件,每个文件使用不同的 GRUB 配置文件?

(我的具体用例是安装 Ubuntu 以及已经安装了 GRUB 的 SteamOS,并尽可能减少更改。)

答案1

GRUB 配置文件的位置在grubx64.efi二进制文件中是硬编码的。据我上次检查,Ubuntu 以两种方式之一工作,具体取决于您安装的软件包:

  • 如果您安装了具有安全启动功能的 GRUB 版本,它会在EFI/ubuntu与 GRUB 二进制文件相同的卷中查找grub.cfg。然后,此文件被自定义为指向/boot/grub/grub.cfg,通过 UUID 编号引用分区。
  • 如果你安装-Secure-Boot 版本的 GRUB,该软件包grubx64.efi在安装时修改二进制文件,以便它直接引用/boot/grub/grub.cfg

请注意,我检查这些细节已经有一段时间了,而且我从未深入研究过它们,所以我可能对其中的一些内容有误解。

结果是,如果你想使用两个指向不同配置文件的 GRUB,你必须grubx64.efi自己修改二进制文件。旧 Ubuntu 维基页面描述了如何为 EFI 构建 GRUB。此页面大部分已过时,实际上指向另一个页面作为替代;但新页面并未描述构建 GRUB 二进制文件的“基本细节”。我已经有一段时间没有深入查看旧页面了,所以我不能保证它会告诉您需要知道的内容,但它可能会。

恕我直言,这太费劲了。ELILO、SYSLINUX 和 rEFInd 都在其主目录中使用配置文件,因此您可以安装十几个(在单独的目录中),每个程序都有自己的配置文件。这些程序的配置文件也比 GRUB 2 的配置文件更容易维护——尽管如果您手动进行维护,GRUB 2 并不一定比其他程序差太多。

对于您的具体情况,您可能会发现单个 rEFInd 安装是最佳选择。它会在每次启动时自动检测内核,因此一个 rEFInd 安装将处理您的两个发行版,而无需在您更新内核时进行额外配置。(/boot/refind_linux.conf不过,您可能需要在每个发行版中设置一个文件来处理特定于发行版的内核选项。)警告:我是 rEFInd 的维护者,所以我并不完全公正。

相关内容