我一直在阅读其他一些帖子,尤其是关于在运行 Windows 8.1 的联想 Yoga 2 Pro 上进行双启动安装的帖子,但我似乎没有发现完全相同的问题。我承认我是这方面的新手(我第一次尝试安装 Ubuntu),所以我很感激有机会了解更多这方面的内容!
我为分区预留了大约 60GB,为交换预留了另外 8GB。我还在分区上安装了 grub /dev/sda2
,这是 Windows 启动管理器所在的 ESP。
我已在 BIOS 启动菜单中指定 ubuntu/grub 应首先启动。安全启动和联想快速启动均已禁用。
到目前为止一切都很顺利。我可以启动,并且 grub 出现,让我在 Ubuntu 和 Windows 启动管理器之间进行选择。如果我选择 Ubuntu,我就可以进入 Ubuntu、登录等,一切都很顺利。当我选择启动 Windows 时,麻烦就开始了。一旦我这样做,并尝试关闭/重新启动并启动 Ubuntu,就会出现以下消息:
Failed to open /EFI/ubuntu/grubx64.efi - Not Found
Failed to load image /EFI/ubuntu/grubx64.efi: Not Found
start_image() returned Not Found
我在 Windows 端验证了声称不存在的文件确实位于指定文件夹中。它们是使用 bcdedit /enum 固件检测到的。
我也尝试过使用命令
bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi
在管理员命令提示符下没有运气。
在此之后,我从 USB 实时启动并进行了启动修复,修复了 GRUB...直到我再次启动到 Windows 端,此时又出现了同样的问题。
任何帮助都将不胜感激,我会尽力提供任何可能有用的信息。谢谢!
答案1
efi 期望默认引导加载程序为 /efi/boot/bootx64.efi。windows 特别注重确保它能够启动。
首先,从 Windows 8.1 开始并没有真正关闭,而是挂起到磁盘(像休眠一样),以便启动速度更快。其次,它改变 EFI,使条目 0000(Windows)在启动顺序中排在第一位。
解决方法:将 grubx64.efi 重命名为 bootx64.efi,然后替换文件 efi/boot/bootx64.efi。这会使 grub 成为默认引导加载程序。
第二:在 ubuntu 中,使用 efibootmgr 删除所有 efi 条目。然后重新启动计算机。确保您启动的第一个系统是 ubuntu,以便它位于条目 0000 中。然后启动 Windows。
答案2
Failed to open
、Failed to load image
和消息start_image() returned Not Found
来自 Shim。(您可以查看源代码;它们在shim.c
文件中。)通常,在基于 EFI 的计算机上启动 Ubuntu 时,系统会启动 Shim(shimx64.efi
),这是 Ubuntu 处理安全启动的方式。然后 Shim 程序启动 GRUB(grubx64.efi
)。这些错误消息表明 Shim 已启动,但 GRUB 不存在 - 或者无法读取。您写道:
我已经在 Windows 端验证了声称不存在的文件实际上位于指定的文件夹中。
这表明grubx64.efi
存在,但 Shim 无法读取。Windows 看到的和 EFI 看到的不一致的最可能解释是您启用了 Windows 快速启动和/或休眠功能。这些功能将 Windows 关机操作转变为挂起到磁盘的操作,以加快下一次启动速度。问题是此功能可能会使文件系统(包括 ESP 上的文件系统)处于不一致的状态。这反过来会严重影响 EFI 从 ESP 读取文件的能力——某些文件可能会随机消失。一般来说,EFI FAT 文件系统驱动程序似乎不如 Windows 或 Linux 中的 FAT 驱动程序那么强大,因此文件在 Windows 中可能看起来没问题,但 EFI 却无法读取。
解决方案是禁用 Windows 快速启动和休眠功能,如下所述这里和这里,分别。
文件系统损坏也可能是由于其他原因造成的,但 Windows 驱动程序恰好能够解决这个问题,而 EFI 驱动程序却不能。在 ESP 上运行磁盘检查工具(例如dosfsck
在 Ubuntu 或CHKDSK
Windows 中)可能会解决问题。在极端情况下,可能需要备份、创建新的文件系统并恢复它。
请注意,ravery 的解决方案只是权宜之计——而且是有风险的。(我至少见过一台计算机在我删除所有固件的启动条目后开始严重失灵。)在EFI/BOOT/bootx64.efi
某些情况下,将 GRUB 复制到后备文件名可能会起作用(就像在您的计算机上显然已经起作用一样),但如果没有适当的 EFI 启动变量,某些 EFI 会倾向于使用 Windows 启动加载程序而不是后备启动加载程序。更糟糕的是,由于 ravery 的解决方案没有解决问题的根本原因,它可能会再次发生,或者可能会发生其他文件系统损坏,从而导致其他问题。(幸运的是,ESP 上的文件数量相对较少,因此您的系统可能不会完全损坏;Windows 和 Ubuntu 恢复工具可以恢复损坏的 ESP 文件。)
有关 EFI 系统如何启动的更多信息(除了使用后备文件名之外),请参阅:
- Adam Williamson 的博客文章介绍了 EFI 的工作原理—— 本页描述了 EFI 模式启动背后的理论。
- Superuser.com 上关于 BIOS 和 EFI 启动之间的区别的问答—— 这提供了前面内容的基础,但更加简洁。
- 我的关于在 EFI 系统上安装 Linux 的页面—— 与 Adam Williamson 的博客相比,此页面对 EFI 模式启动进行了更实用的介绍。
- Ubuntu 社区 wiki 中有关 UEFI 的条目-- 这个页面有点脱节,但却是针对 Ubuntu 的 EFI 及其问题最具体的介绍。