更改 Windows 启动管理器描述后 GRUB 消失

更改 Windows 启动管理器描述后 GRUB 消失

我安装了 Elementary OS,一切运行良好。启动计算机时我得到了 GRUB,我可以启动 Windows 和 Elementary OS。唯一的问题是 Windows 启动管理器在 EFI 启动菜单中出现了两次。其中一个是 GRUB,另一个只是 Windows。我可能应该不管它,但我进入 Windows 并输入bcdedit /set {bootmgr} description GRUB 这毁了一切。这实际上删除了 EFI 中的 Windows 启动管理器条目(秘密是 GRUB 的条目)并留下只有 Windows 的条目。现在我无法再进入 Linux。网上的大多数教程都是关于在安装 Windows 后恢复 GRUB,或者不适用于 EFI。出于这个原因,我不愿意遵循那些教程。他们说要将 grub 重新安装到 MBR,即使我最初将它安装在 EFI 分区。这对我来说似乎不对。

编辑:我得到了有关该问题的更多信息。我使用在线找到的常用方法重新安装了 GRUB。然后我使用了 efibootmgr,当我将 Windows Boot Manager 重命名为 GRUB 时,新条目似乎曾是实际上已创建。还有一个名为 ubuntu 的条目。但是,这两个条目都不在启动顺序中。我无法更改启动顺序来添加它们。该命令有效,但更改未保存。

答案1

我看到你找到了解决方案;然而,我想指出问题的至少部分原因,因为这可能帮助你(或其他人)避免将来出现类似的问题......

在您描述的初始双启动配置(Windows / ElementaryOS)中,您有启动管理器:

  • 主板(EFI)内置的启动管理器efibootmgr-- 此启动管理器依赖于存储在 NVRAM 中的条目,这些条目指向 EFI 启动程序。可以通过Linux、bcdeditWindows等程序添加、删除和修改 NVRAM 条目,简易UEFI在 Windows 中。通常,计算机会自动启动到其默认的 EFI 启动程序,而不会在启动时暂停以显示菜单;要获取菜单,您必须在打开计算机或重新启动后立即按下系统特定键。此键的常见选项包括 Esc、Enter 和功能键(通常为 F8 或更高)。
  • GRUB-- 安装 ElementaryOS 后,GRUB 应成为 EFI 内置启动管理器指定的默认启动程序。不过,GRUB 本身是一个启动管理器,在双启动配置中,它在运行时应显示启动菜单。此启动菜单是通过磁盘配置文件构建的,该文件存储在/boot/grub/grub.cfgElementaryOS 中。(/boot/efi/EFI/ubuntu/grub.cfg可能还涉及另一个文件。)

(注:靴子经理提供菜单或其他方式供用户选择要启动的操作系统。启动管理器通常会将启动装载机,它将操作系统内核加载到内存中并将控制权移交给内核。包括 GRUB 在内的一些程序两个都引导管理器和引导加载程序;但其他程序,如 EFI 引导管理器或 Linux EFI 存根加载程序,则只能是其中之一,不能同时是两者。Linux 用户通常无法区分这两种类型的程序,因为 GRUB 可以同时完成这两项工作。)

无论如何,当您bcdedit在 Windows 中运行时,您调整了EFI 的启动管理器,但是这个没有效果在 GRUB 配置上。因此,您最终绕过了 GRUB,这当然不是您想要的。要修改 GRUB 的菜单,您需要编辑其配置文件,但这是一个比您想象的更麻烦的过程,因为它grub.cfg实际上是由脚本构建的,因此可以针对您的特定系统进行自定义。GRUB 定制器该工具为 GRUB 自定义提供了一个相对友好的 GUI 前端,但我并不是它的使用专家。也可以使用 Linux 中的其他启动管理器和启动加载程序,完全绕过 GRUB。

另一个可能相关的问题是安全启动。ElementaryOS 基于 Ubuntu,它使用一个名为 Shim 的程序来支持安全启动。Shim 二进制文件 ( shimx64.efi) 由 Microsoft 签名,因此受到大多数 EFI 的信任。Shim 的主要目的是扩展固件将接受的安全启动密钥的数量并启动 GRUB ( grubx64.efi),而后者又使用另一个密钥签名(对于 Ubuntu 来说,是 Canonical 的密钥,因此 ElementaryOS 可能也是如此,尽管我没有检查过这一点)。

考虑到您的解决方案的性质,我怀疑您的 EFI 的 NVRAM 启动列表中至少有两个 ElementaryOS 条目,其中一个指向 Shim,另一个指向 GRUB。我猜直接指向 GRUB 的条目在您的启动顺序中排在前面,但被固件忽略,因为它未通过固件的未修改安全启动测试。但是,当您告诉固件信任 GRUB 时,它开始通过测试,因此 GRUB 将启动。它可能最初是以其他方式设置的,但您在bcdeditWindows 中的错误消除或更改了通过 Shim 启动的条目的顺序。您重新安装 GRUB 也可能对事情造成了一些影响。

如果您想更好地理解这一点,我建议您阅读以下一篇或多篇文章:

即使这些页面的总和也无法准确地告诉您系统上发生了什么,但您可以通过检查sudo efibootmgr -v输出来更好地诊断问题,并在将来出现类似问题时进行修复。

答案2

我自己找到了解决方案。显然,我必须在 UEFI 设置中将 grubx64.efi 标记为受信任。但这确实很奇怪,因为我一直关闭安全启动。无论如何,这为 EFI 引导加载程序添加了一个新条目,并且该条目确实加载了 GRUB,这是应该的。

相关内容