这个命令工作完美,但我不习惯使用 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
。