grub-mkimage 带有 --prefix=(a UUID) 而不是 (hdx,gptx)?

grub-mkimage 带有 --prefix=(a UUID) 而不是 (hdx,gptx)?

这个命令工作完美,但我不习惯使用 hd#,gpt#,因为这些可以在我插入另一个驱动器时随时更改。所以我需要这个确切的命令,除了前缀必须由 UUID 设置,而不是 (hd#,gpt #)。

grub-mkimage -o /path/to/mounted/esp/partition/EFI/prime_boot/bootx64.efi --format=x86_64-efi '--prefix=(hd0,gpt1)/EFI/prime_boot' ext2 part_gpt

我尝试过各种 UUID=9045-CF30,只是 9045-CF30 等等。有谁知道正确的方法吗?

答案1

最简单的方法是将grub.cfg文件包含在您的bootx64.efi,并让 grub 找出正确的前缀。你的早期配置文件将仅包含:

search.fs_uuid 12345678-9abc-def0-1234-56789abcdef0 root
set prefix=($root)'/grub'
configfile $prefix/grub.cfg

然后你的grub-mkimage命令应该是:

grub-mkimage -o /path/to/mounted/esp/partition/EFI/prime_boot/bootx64.efi -c early-config-file --format=x86_64-efi '--prefix=Dont-Care'  MODULES...(read below)....

请注意,这个“早期配置”是包括inside grubx64.efi,因此不需要调用它,grub.cfg"也不需要将其包含在/boot/efi/EFI/wherever/目录中。这与 Ubuntu 等不同,后者/boot/efi/EFI/ubuntu/grub.cfg实际上是- 即如果您重命名它,您的系统将无法启动。

然后:模块。为了能够使用“搜索”,您必须包含的内容不仅仅是ext2 part_gpt您所做的。普通 ext4 格式的根文件系统的最低限度似乎是ext2 part_gpt search configfile test linux loadenv.至少这对我的设置有效 - 尽管有错误,抱怨无法加载字体。

事实上,Ubuntu 本身包含了 100 多个 GRUB 模块和一个带有字体的 memdisk。是的,那些是里面文件/boot/efi/EFI/ubuntu/grubx64.efi

相关内容