如何使UEFI BIOS开始GRUB,而不是Windows?


22

TL; DR,添加在编辑中:

问题是:

与同一个UEFI引导分区上的Windows引导管理器相比,我如何使BIOS更喜欢GRUB?

问题出在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 Boot Manager,而不是GRUB。现在引导Linux的唯一方法是使用BIOS引导管理器(我的BIOS中为F11)并手动选择GRUB引导加载程序。UEFI BIOS知道UEFI分区上有多个可引导安装,因为我可以在引导管理器中进行选择。但是,当我进入UEFI BIOS的设置菜单时,它只是让我在启动优先级选择中选择“ UEFI启动我的内部驱动器”-它不允许我选择要使用该分区上的哪个特定启动加载程序。并且,默认情况下,它选择Windows,而不是GRUB。

互联网(和此站点)建议解决此问题的旧方法是先运行update-grub(以便GRUB识别Windows),然后再运行(grub-install将GRUB重新安装到设备上。)我已经做到了,但是不幸的是,它仍然具有如下行为:如上所述,BIOS默认情况下选择Windows Boot Manager。(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.

您只需要安装Windows,然后再安装Linux。并非相反。我有完全相反的问题。当电源关闭然后恢复时,我的计算机进入grub并启动进入Linux,shm。一件事是,我将每个系统都放在自己的驱动器上。在启动顺序上,我选择其中装有Linux和Grub的驱动器。
dmb

1
令人惊讶的是,无论是在我的原始帖子还是在下面的评论中,有多少人建议别人已经建议过的事情,而我已经说过行不通。正确的解决方案是Windows管理外壳程序中的“ BCDEDIT”。没有其他建议可以解决此问题(根据我的问题,大多数建议都已经尝试过了。)
乔恩·瓦特

Answers:


21

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

  • EFI设置实用程序 -大多数EFI都提供了设置实用程序,您可以通过在启动时按特殊键(通常是Esc,Del或功能键;但是在一个系统与另一个系统上的键不同)来访问它们。这些通常(但并非总是)提供了一种调整引导顺序的方法。如果您的固件提供了这样的选项,则应该可以使用它将GRUB移到顶部。(GRUB可能被称为ubuntu,因为您是从该发行版安装的。)
  • EFI Shell-您可以在Arch Linux Wiki上bcfg描述的EFI版本2 Shell中使用该命令如果您的系统尚未设置易于访问的外壳,则此方法可能比其他方法更难使用,但与操作系统无关。
  • EasyUEFI-第三方Windows EasyUEFI程序可能是您想要做的最简单的方法。您可以单击ubuntuEasyUEFI列表中的条目并将其移到顶部。
  • bcdedit-Windows bcdedit命令可以更改基于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 ubuntusudo ./refind-mkdefault -L shimx64将GRUB设置为默认启动项。

这些选项中的任何一个都有潜在的问题和复杂性。最可能的复杂因素是是否存在旧的或替代的ubuntu引导条目。将正确的一个移动到引导顺序的最高位置很重要;如果您移动了错误的设备,则最终将不会改变行为或进行一些无法正常运行的引导,这将使引导更加困难。如果使用efibootmgr,则该BootCurrent行可以帮助您确定应将哪个选项设置为默认选项。

还有其他方法可能会导致过大杀伤力。例如,重新安装GRUB(通过Boot Repairgrub-install)应该可以解决问题。但是,这些方法冒着损坏已知工作的GRUB配置的风险。

还要注意,某些EFI出现故障,还有其他一些问题可能会使GRUB难以可靠地启动。如果遇到此类问题,您可能需要在AskUbuntu上查看以下问题和解答:


正如我在问题中所述,EFI设置实用程序不会让我选择ubuntu作为默认设置,尽管它使我可以在手动启动菜单中进行设置。它只是让我选择驱动器,然后从中启动Windows。efibootmgr尝试更改引导顺序,但是BIOS在重新引导时没有注意。EasyBCD无法正常工作-它没有让我添加更多菜单项。但是,管理外壳程序中的“ BCDEDIT”实际上可以正常工作,因此感谢您的选择!
乔恩·瓦特

请注意,EasyBCD和EasyUEFI是来自同一供应商的两个不同程序。可悲的是,EasyUEFI的免费版本似乎不再可用-仅提供试用版。但是,BOOTICE是另一个可以编辑UEFI引导设置的免费程序:原始中文站点带有描述和屏幕截图的英语站点
telcoM '18 -10-14

使用sudo efibootmgr -n 0002比修改当前SO顺序好得多。它会更改BootNext: 0001并留待BootCurrent: 0002下一次使用,而您当前的GRUB条目将保持不变。只需添加一个bash chmod +x并将该命令与重新启动一起包装即可。
m3nda

2

过去几周我一直遇到这个确切的问题。我用这些选项弄清楚了。在执行任何这些操作之前,我建议您进入BIOS / UEFI并检查引导顺序,并确保首先安装了grub。

所以我看到的是您有两个选择。

选项1

我建议您安装Windows 10 然后安装ubuntu。但我知道只说“重新安装软件”是一种忌讳,所以我也将提供替代方法。

选项2

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


Thansk提出了建议,但我已经尝试过了。第一次安装东西时,我首先使用Windows 10,然后是Ubuntu 17.04,然后是Boot Repair。它仍然默认为Windows,然后我先擦除并重新安装了Ubuntu,这使我回到了现在。
乔恩·瓦特

我认为您已尝试在UEFI中调整启动顺序,对吗?
taterbotz

是的,就像我说的那样:“当我进入UEFI BIOS的设置菜单时,它只是让我在启动优先级选择中选择“ UEFI引导我的内部驱动器”,但它不允许我选择哪个特定的引导程序在该分区上使用”
Jon Watte

2

我看到几种解决方案:

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

我可以使用efibootmgr编辑启动顺序,但BIOS会忽略它,并始终启动Windows。除非我删除了Microsoft文件夹,否则更改引导文件夹名称(甚至将grub复制到“ boot”文件夹中)均无效。Windows启动加载器不启动非Windows OS-ES(至少不是无符号的。)
乔恩Watte

@JonWatte也许uefi引导程序有所不同,我记得在32位BIOS机器上从Windows 7引导程序引导ubuntu。也许它仍然可以加载grub2?由于efibootmgr不起作用,我知道我不会购买MSI。
jiggunjer

是的,这款MSI主板也存在其他一些问题,现在又要回到亚马逊以换取技嘉。
乔恩·瓦特

1

我只是将主板更换为笔记本电脑,而grub完全消失了。

我知道这被标记为固定,但是我认为这可能对您有用。

使grub出现为引导选项。我需要为BIOS添加EFI。

我去了BIOS中的“启动列表选项”。单击“添加启动选项”(我知道这是BIOS特定的)。这给了我一个文件名选项,在我的情况下是这样, \EFI\ubuntu\grubx64.efi并给它起了一个名字。grub

然后,我将该grub条目移至启动顺序的顶部,现在它显示为默认条目。

也就是说,我的意思是您可能只需要找到正确的EFI文件并将其移至启动顺序/顺序的顶部。


1

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

sudo -s
efibootmgr
efibootmgr -b 4 --inactive

用您的Windows启动管理器数替换4。再次运行efibootmgr,您应该看到星号消失以表示不活动。

在我的计算机引导至启动组之后,仍然可以从中选择窗口。


-2

一个可能的解决方案是手动编辑/ etc / default / grub文件。

sudo vim /etc/default/grub

缺省条目由GRUB_DEFAULT=/ etc / default / grub中的设置确定。第一个“菜单项”的值为“ 0”。如果Ubuntu是引导屏幕中的第二个条目,则设置GRUB_DEFAULT = 1。

之后,您将需要运行以下命令来更新grub的配置: update-grub

另一个选择是安装grub-customizer,并使用其GUI配置启动优先级。


问题不在于Grub。就像我在帖子中所说的,如果我可以让BIOS选择Grub UEFI引导选项,那么我将获得Grub引导菜单,该菜单使我可以选择Windows或Ubuntu。默认情况下,这是我想要的菜单。不幸的是,BIOS默认选择Windows Boot Manager。
乔恩·瓦特

如我所说,您可以通过将Ubuntu配置为第一个启动的系统,按grub引导顺序对其进行修复。使用grub-customizer通过GUI进行此操作。linuxandubuntu.com/home/...
树莓先生

同样,Grub甚至没有被BIOS启动。Grub启动顺序无关紧要。GRUB_DEFAULT无关紧要。这不是这里的问题。
乔恩·瓦特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.