我通过从 USB 启动、选择“尝试 Ubuntu 而不安装”来安装 Ubuntu 16.04,然后插入另一个 USB 并指示安装程序安装在那里。我告诉安装程序安装/dev/sdc2
ESP 所在的引导加载程序。我知道引导加载程序确实已安装,因为我现在可以在该分区上看到 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/sdb2
grub 重新安装到 /dev/sdb2 中,但大多数 grub 文件仍在 /dev/sdb3 中,因此 grub 无法访问它,因为它不知道如何加载 ext2.mod。部分输出是使用x86_64-efi
arch 的。
我把救援控制台弄乱了一点,慢慢好起来,但我可能已经找到了原因,为什么它无法访问它。 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/
然后关闭,删除实时系统并重新启动。
有关所使用路径的更多信息可以找到这里。