我正在创建一个带有 grub 引导加载程序的可启动 USB。目标是实现对 BIOS 和 UEFI 都具有最高兼容性的东西。因此,第一步,我通常为 BIOS 安装 grub 引导加载程序,并复制一个与 32 位和 64 位 EFI 系统兼容的 EFI 引导加载程序(复制 clonezilla 引导加载程序!)。所有与引导相关的文件都在 ext4 分区中。
第二步:最重要的是我想要grub.cfg
编辑一个唯一的文件,而不是两个(一个用于 BIOS,另一个用于 EFI)。我的想法是创建两个具有相同目标grub.cfg
文件的符号链接。这个想法很有效,但 EFI Windows 系统除外。那是因为它们仅支持 FAT32 分区中的 EFI 可启动文件,而我使用的是 ext4 分区!
现在的问题是:如何在不支持符号链接的 FAT32 分区中创建类似且同样有用的东西?
答案1
我不明白您实际上做了什么不同以及您的问题出在哪里,但也许我们可以弄清楚。
您是否知道您不仅可以链式加载其他引导加载程序(如 Windowx 或 OS X),还可以链式加载其他 grub.cfg 文件?
search.fs_uuid 7bd6ae5a-b02b-4acf-b5f5-0d7c6b435d5b root hd0,gpt2
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
此代码在第二个分区的第一个硬盘上查找具有指定 UUID 的根文件系统。它设置一个名为 prefix 的变量,并最终从根文件系统的 /boot/grub 启动 grub.cfg。您可以在 Ubuntu 上的每个 FAT32 EFI 系统分区中找到此代码。(Fedora 设置略有不同,它将内核存储在 ESP 上,并在 /etc 中有一个链接到 ESP 的 grub.cfg 符号链接,如果我没记错的话,Ubuntu 配置在我看来尽可能接近符号链接。)默认情况下,当二进制文件本身不包含任何配置时,每个 grub EFI 加载程序都会运行这样的 grub.cfg。(是的,如果您在十六进制编辑器中查看文件时二进制文件已烧录,您可能会发现一个配置文件附加在二进制文件的末尾,并且如果二进制文件已烧录,则可能会发现一些证书。)因此,只需根据需要修改此代码,使其加载您想要的 grub.cfg,并将其放在 ESP 上 bootx64.efi 和 bootia32.efi 文件旁边。 Ubuntu 16.04 中提供了 grub-efi-ia32-bin 软件包,因此您也可以安装 32 位 EFI 加载程序。剩下要做的就是配置 MBR 加载程序。
- 是否仍然可以使用 UEFI 将 Ubuntu 安装到外部硬盘?— 在这里我解释了如何配置带有 Ubuntu 的外部驱动器以便在最常见的平台上启动,它主要处理命令
grub-install
。 - 如何创建仅 UEFI 可启动的 USB 实时媒体?— 这有点高级,并解释了如何使用自定义模块列表(如环回和基本 grub.cfg 菜单项)为不同的架构生成自己的 grub 映像来启动 ISO。
您需要做什么才能按照您想要的方式将拼图碎片拼凑在一起?