![Grub 上次更新(17/11)问题](https://linux22.com/image/1131047/Grub%20%E4%B8%8A%E6%AC%A1%E6%9B%B4%E6%96%B0%EF%BC%8817%2F11%EF%BC%89%E9%97%AE%E9%A2%98.png)
在最新的 Ubuntu 和 Grub 更新之后,我的计算机无法立即打开 Grub 来选择操作系统。
出现错误信息说:
Failed to open \EFI\Microsoft\Boot\grubx64.efi - Not Found
Failed to load image \EFI\Microsoft\Boot\grubx64.efi Not Found
Failed to open \EFI\Microsoft/Boot\MokManager.efi - Not Found
Failed to load image \EFI\Microsoft\Boot\MokManager.efi Not Found
Failed to open \EFI\BOOT\grubx64.efi - Not Found
Failed to load image \EFI\BOOT\grubx64.efi Not Found
Failed to open \EFI\BOOT\MokManager.efi - Not Found
Failed to load image \EFI\BOOT\MokManager.efi Not Found
Checking media [Fail]
再次检查媒体几次后,它会打开 Grub。
我尝试了 BootRepair 并重新安装,但什么都没改变。更新过程中出现了一个菜单,提示应该将 Grub 安装到哪里,或者一些我不记得的类似设置,我只是选择了推荐的选项。
有关我的所有启动设置的信息在这里: http://paste.ubuntu.com/13326048/
答案1
我认为正在发生的事情是这样的:
- 计算机正在尝试从
EFI/Microsoft/Boot/bootmgfw.efi
ESP 启动。它不是 Windows(该文件应该是 Windows),而是 Shim 的副本,然后依次尝试从同一目录启动。这两个文件都丢失了,因此此步骤显示错误消息、失败并导致grubx64.efi
……MokManager.efi
- 计算机尝试从 启动
EFI/BOOT/bootx64.efi
,这也是 Shim,它会尝试从该目录启动相同的后续程序。这些文件不存在,因此…… - 计算机启动
EFI/ubuntu/shimx64.efi
。此 Shim 副本成功启动grubx64.efi
,并且启动过程正常成功。
追溯过去,Boot Repair 有时会在EFI/Microsoft/Boot
和中设置 GRUB(以及 Shim 和相关工具)的副本EFI/BOOT
,以此来解决一些难看的 EFI 错误,这些错误会阻止某些计算机记住其启动顺序。这种 Boot Repair 做法是一种难看的黑客行为,是解决同样难看的错误的一种变通方法。有时它是必要的,但也有不必要应用的情况。几年前,过度应用这种复制黑客行为尤为常见,但 Boot Repair 开发人员最终退后一步,将这种复制作为选项而不是默认设置。
无论如何,看起来这个 Boot Repair 黑客攻击被应用到您的系统,然后某些东西(可能是 GRUB 更新)进入并grubx64.efi
从MokManager.efi
您的 ESP 上的EFI/Microsoft/Boot
和EFI/BOOT
目录中删除。这将导致您看到的行为。Boot efibootmgr
Repair 输出(第 1002-1010 行)中的输出在一定程度上支持了这一假设,它显示了 Microsoft 启动管理器和 Ubuntu 的启动顺序。(没有证据表明EFI/BOOT/bootx64.efi
那里有启动,但这可能是 Boot Repair 的黑客攻击旨在克服的 EFI 错误的行为。)
谨防:您正处于危险境地,因为您的系统处于非标准状态,并且如果需要 Boot Repair 的破解,则您的固件存在缺陷。如果不成功,修复此问题的尝试可能会造成更严重的问题。在做任何其他事情之前,我强烈建议您备份您的 ESP(/boot/efi
在 Ubuntu 中)。如果情况变得更糟,这将提供一些恢复选项。
以下命令可能会修复该问题:
sudo efibootmgr -o 0001,0002,0003,2001
理论上,这至少不会让情况变得更糟;但如果您的计算机确实需要 Boot Repair 所采用的丑陋变通方法,那么一切都将不复存在。如果您的固件有缺陷,此命令可能最终完全不起作用,在这种情况下可能需要另一种解决方案:将grubx64.efi
、grub.cfg
和MokManager.efi
从EFI/ubuntu
ESP(/boot/efi/EFI/ubuntu
在 Linux 中)复制EFI/Microsoft/Boot
到EFI/BOOT
ESP 上。
如果必须复制文件,则说明您的固件存在缺陷,更好的解决方案是将存在缺陷的计算机更换为可以正常工作的计算机。这听起来可能有点反应过度,但某些制造商(首先想到的是 HP 和 Sony)多年来一直在提供存在缺陷的 EFI。我感到很沮丧。