![引导加载程序未显示在 UEFI 中](https://linux22.com/image/1533712/%E5%BC%95%E5%AF%BC%E5%8A%A0%E8%BD%BD%E7%A8%8B%E5%BA%8F%E6%9C%AA%E6%98%BE%E7%A4%BA%E5%9C%A8%20UEFI%20%E4%B8%AD.png)
我使用的是单硬盘的 Thinkpad T440p,它设置为仅 UEFI 模式(安全启动已禁用)。每当我安装操作系统时,UEFI 中都会显示相应的条目来启动这些操作系统。
这次当我安装 Debian 9 和 Windows 10 时,没有出现任何条目。我仍然可以通过将 grub 复制到 EFI 分区上的 /EFI/Boot/bootx64.efi 然后告诉 UEFI 启动硬盘来启动两个系统。
我如何让 UEFI 再次显示 /EFI/debian/grubx64.efi 和 /EFI/Microsoft/Boot/bootmgfw.efi 的条目?
重置 UEFI 不会改变任何内容。在 Linux 上使用 efibootmgr 手动添加条目会创建在重新启动后显示在 efibootmgr 中的条目(标记为活动),但它们不会显示在实际的 UEFI 中,因此无法使用。
这背后的机制是什么?操作系统安装程序是否应该向 UEFI 添加条目,或者 UEFI 是否应该自动在 EFI 分区中找到新的 .efi 文件?
答案1
首先回答您的最后一个问题:当操作系统安装在基于 EFI 的计算机上时,它应该向 EFI 注册其引导加载程序,EFI 会将该引导加载程序的指针存储在 NVRAM 中。Linux 发行版使用该efibootmgr
工具来实现此目的,但其他操作系统也有其他具有类似功能的工具。(bcdedit
例如,Microsoft 扩展了该工具以向 EFI 注册其引导加载程序。)不过,至少有一个操作系统(FreeBSD)不这样做;它使用后备文件名(EFI/BOOT/bootx64.efi
)存储其引导加载程序,在我看来这是一个糟糕的选择——但如果他们没有等效的efibootmgr
,这可能是他们唯一的选择。我不知道有任何 EFI 会主动扫描具有任意名称的引导加载程序,尽管如果没有其他文件,它们会引导到后备文件名。有些还将 Microsoft 启动管理器(EFI/Microsoft/Boot/bootmgfw.efi
)视为后备文件名。
听起来好像您的 EFI 及其 NVRAM 条目已经混乱。通常,我建议将固件重置为默认值,希望此操作可以解决问题,但您已经这样做了。也许您应该使用efibootmgr
或类似的东西删除多余的条目,然后尝试重置 NVRAM。(不要删除所有内容;我见过 EFI 在删除所有启动项后表现非常奇怪。操作系统条目(如 Debian 和 Windows 的条目)应该可以安全删除,但要保留明显特定于硬件的条目,如引用硬盘型号或 PXE 启动选项的条目。)删除这些条目可能会导致计算机无法启动,因此rEFInd 启动管理器在 USB 闪存驱动器或 CD-R 上可能会有所帮助;您应该能够从它启动,然后 rEFInd 应该使您能够启动它检测到的任何操作系统,然后您可以使用它来重新创建有效的启动项。
另外还有一些方法,包括:
- 移除所有硬盘并启动计算机。这可能会“起到作用”并修复其启动项问题。
- 更新固件。即使“更新”到完全相同的版本也可能有帮助(尽管更新实用程序可能会拒绝不升级的更新)。更新可能会修复导致问题的错误,但同样重要的是,它可能会重置一些变量或存储空间,即使重置为默认值的操作也不会触及这些变量或存储空间。
这些都是绝望的措施,成功的可能性很小,所以不要抱太大希望。尽管如此,在我看来,它们都值得一试。准备好 rEFInd 应急磁盘,因为这两种方法都可能抹去您已有的任何有效启动项。
如果您的系统完全崩溃并且无法修复,那么您可以尝试将您首选的启动管理器放在磁盘上,EFI/BOOT/bootx64.efi
并将其配置为为您的其他操作系统提供启动选项。有些计算机的 EFI 严重损坏,即使是全新的,也需要这种方法,而且我并不惊讶于 EFI 可能会损坏并需要这种解决方法,尽管过去运行正常。