如何在 UEFI 系统上通过 grub2rescue promt 启动?

如何在 UEFI 系统上通过 grub2rescue promt 启动?

我通过从 USB 启动、选择“尝试 Ubuntu 而不安装”来安装 Ubuntu 16.04,然后插入另一个 USB 并指示安装程序安装在那里。我告诉安装程序安装/dev/sdc2ESP 所在的引导加载程序。我知道引导加载程序确实已安装,因为我现在可以在该分区上看到 shim 和 GRUB EFI 文件。

然而,当我在安装后尝试启动时,它没有给我启动菜单,而是只启动到救援提示符:

grub rescue>

然后我发现我的 ESP 分区符合hd0,gpt2我的预期hd1,gpt2(此处使用 grub 的命名方案)。

我浏览了类似的问题,但不幸的是我只找到了有关 BIOS 系统的信息,而不是 EFI,其中/还包含/boot(/efi).我正在寻找一种方法来继续处理/其他hd0,gtp3磁盘上的 grub efi 文件。内核和 initrd 都位于 ESP 内部,问题肯定出在另一点。

我怎样才能解决这个问题?

输出ls

(hd0) (hd0,gpt5) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1) (hd1) (hd1,gpt8) (hd1,gpt7) (hd1,gpt6) (hd1,gpt5) (hd1,gpt4) (hd1,gpt3) (hd1,gpt2) (hd1,gpt1)

输出ls (hd0,gpt2)/

syslininux/ vmlinuz.efi inird.lz efi/

内容/media/ubuntu/ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a/boot/grub/grub.cfg

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
set root='hd2,gpt3'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd2,gpt3 --hint-efi=hd2,gpt3 --hint-baremetal=ahci2,gpt3  ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a
else
  search --no-floppy --fs-uuid --set=root ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a
fi
linux   /boot/vmlinuz-4.4.0-28-generic.efi.signed root=UUID=ba6e9aff-b9b7-4c4f-8441-98db8ec7a08a ro  quiet splash $vt_handoff
initrd  /boot/initrd.img-4.4.0-28-generic  }  

更新:我将grub-install /dev/sdb2grub 重新安装到 /dev/sdb2 中,但大多数 grub 文件仍在 /dev/sdb3 中,因此 grub 无法访问它,因为它不知道如何加载 ext2.mod。部分输出是使用x86_64-efiarch 的。

我把救援控制台弄乱了一点,慢慢好起来,但我可能已经找到了原因,为什么它无法访问它。 grub救援模式仅接受i386-pc modfiles,但所有安装的modfiles都是x86_64-efi modfiles。

答案1

这一切都只是因为有人没有完全实现 UEFI 规范。

您所要做的就是启动一个实时系统并且:

sudo mount -U <UUID of your ESP> /mnt
sudo mkdir /mnt/EFI/BOOT
sudo cp -v /mnt/boot/<your-vendor>/grubx64.efi /mnt/EFI/BOOT/

然后关闭,删除实时系统并重新启动。

有关所使用路径的更多信息可以找到这里

相关内容