我安装了 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、bcdedit
Windows等程序添加、删除和修改 NVRAM 条目,简易UEFI在 Windows 中。通常,计算机会自动启动到其默认的 EFI 启动程序,而不会在启动时暂停以显示菜单;要获取菜单,您必须在打开计算机或重新启动后立即按下系统特定键。此键的常见选项包括 Esc、Enter 和功能键(通常为 F8 或更高)。 - GRUB-- 安装 ElementaryOS 后,GRUB 应成为 EFI 内置启动管理器指定的默认启动程序。不过,GRUB 本身是一个启动管理器,在双启动配置中,它在运行时应显示启动菜单。此启动菜单是通过磁盘配置文件构建的,该文件存储在
/boot/grub/grub.cfg
ElementaryOS 中。(/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 将启动。它可能最初是以其他方式设置的,但您在bcdedit
Windows 中的错误消除或更改了通过 Shim 启动的条目的顺序。您重新安装 GRUB 也可能对事情造成了一些影响。
如果您想更好地理解这一点,我建议您阅读以下一篇或多篇文章:
- Adam Williamson 的博客文章介绍了 EFI 的工作原理—— 本页描述了 EFI 模式启动背后的理论。
- Superuser.com 上关于 BIOS 和 EFI 启动之间的区别的问答—— 这提供了前面内容的基础,但更加简洁。
- 我的 Linux EFI 引导加载程序页面-- 本页介绍了 Linux 系统的 EFI 引导加载程序选择。安全引导有两个子页面。
即使这些页面的总和也无法准确地告诉您系统上发生了什么,但您可以通过检查sudo efibootmgr -v
输出来更好地诊断问题,并在将来出现类似问题时进行修复。
答案2
我自己找到了解决方案。显然,我必须在 UEFI 设置中将 grubx64.efi 标记为受信任。但这确实很奇怪,因为我一直关闭安全启动。无论如何,这为 EFI 引导加载程序添加了一个新条目,并且该条目确实加载了 GRUB,这是应该的。