如何让 UEFI bios 启动 GRUB,而不是 Windows?

如何让 UEFI bios 启动 GRUB,而不是 Windows?

TL;DR,在编辑中添加:

问题是:

如何让 BIOS 在同一个 UEFI 启动分区上优先选择 GRUB 而不是 Windows 启动管理器?

问题不在于 Grub;当 BIOS 启动它时,Grub 会做正确的事情。问题不在于“磁盘不可启动”,因为 Windows UEFI 引导程序和 Grub UEFI 引导程序都是可启动的。问题在于 BIOS 选择从哪个 UEFI 引导程序启动。

我正在设置一台新电脑,希望它默认启动到 Ubuntu,但可以选择在启动时选择 Windows。如果断电后又恢复供电,这一点尤其重要;我甚至不在家。

我首先在内部 NVMe 磁盘上安装 Ubuntu 17.04,使用 GPT 分区以使用一半磁盘,并有一个单独的 UEFI 启动分区。GRUB 可以正常启动,启动时我可以看到 GRUB 启动菜单,我可以在菜单中选择 GRUB 知道的任何项目。

然后我从最近下载的 ISO 安装了 Windows 10 Pro。它将 Windows 启动管理器安装到同一个 UEFI 分区上,并保持 Ubuntu 完好无损(太棒了!)并且可以正常启动到 Windows 10。

但是,它确实做了一些事情,使得 UEFI 固件在启动时立即选择 Windows 启动管理器而不是 GRUB。现在启动 Linux 的唯一方法是使用 BIOS 启动管理器(在我的 BIOS 上是 F11)并手动选择 GRUB 启动加载程序。UEFI BIOS 知道 UEFI 分区上有多个可启动安装,因为我可以在启动管理器中选择它们。但是,当我在 UEFI BIOS 中的设置菜单中时,它只让我在启动优先级选择中选择“UEFI 启动我的内部驱动器”——它不让我选择要使用该分区上的哪个特定启动加载程序。而且,默认情况下,它选择 Windows,而不是 GRUB。

互联网(和这个网站)建议解决这个问题的老方法是运行update-grub(这样 GRUB 就可以识别 Windows),然后grub-install(将 GRUB 放回设备上)。我已经这样做了,但不幸的是,它仍然具有如上所述的行为,即 BIOS 默认选择 Windows 启动管理器。(update-grub确实找到了 Windows 启动管理器安装,并将其添加到菜单中,当我在 UEFI 启动管理器中手动选择 GRUB 分区时,该菜单项有效。)

我该怎么做才能使 GRUB 成为我的 UEFI 启动分区上的“默认”启动?

使用 MSI X399 Carbon 主板。

第二次编辑:因为正确答案最终在对回复的评论中被提及,所以我将在这里重复一遍:

"BCDEDIT" in an admin shell on Windows is the working solution. The others don't work.

答案1

有很多不同的方法可以做到这一点,包括:

  • EFI 设置实用程序-- 大多数 EFI 都提供了设置实用程序,您可以通过在启动时按下特殊键(通常是 Esc、Del 或功能键;但具体是什么键因系统而异)来访问这些实用程序。这些实用程序通常(但并非总是)提供调整启动顺序的方法。如果您的固件提供了这样的选项,您应该能够使用它来将 GRUB 移到顶部位置。(GRUB 很可能被称为ubuntu,因为您是从该发行版安装的。)
  • EFI 外壳bcfg-- 您可以在 EFI 版本 2 shell 中使用该命令,如下所述在 Arch Linux wiki 上。如果您的系统尚未设置易于访问的 shell,则这种方法可能比其他方法更难使用,但它与操作系统无关。
  • 简易UEFI-- 第三方 Windows简易UEFI程序可能是实现您想要的最简单的方法。您可以单击ubuntuEasyUEFI 列表中的条目并将其移至顶部。
  • bcdedit-- Windowsbcdedit命令可以更改基于 NVRAM 的启动顺序。具体来说,打开行政人员命令提示符窗口和输入bcdedit /set "{bootmgr}" path \EFI\ubuntu\shimx64.efi(可选择跟进以bcdedit /set "{bootmgr}" description "ubuntu"保持描述合理)应该可以解决问题。
  • efibootmgr-- 此 Linux 工具可以调整启动顺序。首先单独输入sudo efibootmgr以查看选项。记下Boot####与条目关联的数字 ( )ubuntu和当前启动顺序(在行上BootOrder)。然后,您可以使用该选项输入新的启动顺序,并将ubuntu条目放在顶部-o。例如,如果当前启动顺序为 0000、0003、0007、0004 且ubuntu为 0007,则您可以输入sudo efibootmgr -o 0007,0000,0003,0004以调整启动顺序。
  • refind-mkdefault-- 此脚本随 rEFInd 提供,是一种自动执行上述过程的方法。如果您不使用 rEFInd,则需要下载此脚本这里并使其可执行(chmod a+x refind-mkdefault)。然后将其作为sudo ./refind-mkdefault -L ubuntu或运行sudo ./refind-mkdefault -L shimx64,以使 GRUB 成为默认启动项。

任何这些选项都存在潜在的问题和复杂性。最有可能的复杂因素是是否存在旧的或替代的ubuntu启动项。将正确的启动项移到启动顺序的顶部位置很重要;如果移动错误的启动项,最终要么行为没有变化,要么启动不起作用,这会使启动变得更加困难。如果您使用efibootmgr,该BootCurrent行可能会帮助您判断应该将哪个选项设置为默认值。

还有其他方法可以做到这一点,但有些过度了。重新安装 GRUB(通过引导修复例如,或者grub-install)应该可以解决问题。但是,这些方法可能会损坏已知正常工作的 GRUB 配置。

还要注意的是,一些 EFI 存在错误,还有其他问题可能导致 GRUB 难以可靠地启动。如果你遇到这样的问题,你可能想看看 AskUbuntu 上的这些问题和答案:

答案2

过去几周我一直遇到同样的问题。我使用这些选项解决了这个问题。在执行任何这些操作之前,我建议您进入 BIOS/UEFI 并检查启动顺序,并确保 grub 的安装位置是第一个。

因此我认为你有两个选择。

选项1

我建议你安装 Windows 10第一的。然后安装 ubuntu。但我知道只说“重新安装软件”有点忌讳,所以我也提供了一个替代方案。

选项 2

对于您当前的设置,我建议您启动 Live Ubuntu CD/闪存驱动器并安装和运行boot-repair。单击“推荐修复”选项并按照给出的说明进行操作。仔细阅读并在执行前阅读所有命令。这将用新的 grub 安装覆盖当前的 grub 安装,希望可以修复它。

答案3

我看到了几种解决方案:

  1. 编辑您的 UEFI 以调整默认值。在 Linux 上,您可以使用efibootmgr。在 Windows 上,我不确定,但我认为您可以启动恢复选项,以便配置 UEFI。或者您可能更喜欢安装类似 rEFInd 的东西。
  2. 更改 EFI 分区上的文件夹名称。我认为它更喜欢或退回到名为 的文件夹boot
  3. 只需使用 Windows 引导加载程序,我认为它可以配置为启动其他操作系统。

答案4

对于旧的 HP 655 笔记本电脑,上述选项都不适用。我发现解决方案是将 Windows 启动管理器设置为非活动状态:

sudo -s
efibootmgr
efibootmgr -b 4 --inactive

将 4 替换为您的 Windows 启动管理器编号。再次运行 efibootmgr,您应该会看到星号消失以标记不活动。

我的计算机启动后进入组启动菜单,仍然可以从中选择窗口。

相关内容