Windows 8将Grub从默认的启动管理器中移除。

我有一台预装了Windows 8的索尼VAIO S系列笔记本电脑,并在新分区上安装了Ubuntu 12.10。当计算机启动时,显示Grub菜单,我可以选择Windows 8(一开始不起作用,必须更改Grub设置)和Ubuntu 12.10。当我选择Ubuntu 12.10时一切正常,但当我使用Windows 8并重新启动时,Grub不再显示(Windows 8立即启动)。
我启动了一个Ubuntu 12.10的LiveUSB,使用efibootmgr命令,发现Windows 8每次启动时都会将EFI默认引导程序从Grub更改为Windows Boot Manager。
我应该如何在Windows 8中修改这个设置?我读到了关于bcdedit命令的一些内容,但它不起作用或者我不知道如何使用它...

我觉得你在解决这个问题上走在了正确的道路上。继续努力下去吧! - Melon
3是的,我只需要一件小事,然后我会写一个教程来解决它。微软真糟糕,为什么他们要改变默认的启动管理器呢?在我看来,这是为了阻止人们使用除微软产品以外的任何东西。 - Kouros
嗯,我觉得他们就是不在乎而已。不管怎样,希望能尽快看到你的教程。 - Melon
我刚刚问了Microsoft的客户服务,他们告诉我去他们的论坛寻求帮助。在论坛上有个人告诉我,Windows将自己放在第一位。如果我不喜欢这样,只需在Windows中创建一个批处理文件,在每次启动时运行bcdedit-s命令来修改Windows UEFI配置,让Grub下次先启动。不错的建议。 - netom
GPT文件系统包含引导扇区的副本。似乎Windows只是检查MBR校验和并通过用原始保护性MBR数据覆盖它来"修复"它。这是一种安全最佳实践。http://en.wikipedia.org/wiki/GUID_Partition_Table - user273073
7个回答

我不能保证,但你可以尝试以下方法:从以管理员权限启动的Windows命令提示符窗口中执行此操作。
bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

请注意,{bootmgr}应该准确地输入;这不是一个变量。如果这样做不起作用,你可以在Linux中尝试以下操作:
  1. 备份整个/boot/efi目录(即EFI系统分区或ESP)。
  2. 输入sudo mv /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi /boot/efi/EFI/Microsoft
  3. 输入cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
  4. 创建一个新的/etc/grub.d/40_custom文件条目,引用EFI/Microsoft/bootmgfw.efi。模仿/boot/grub/grub.cfg中现有的引用EFI/Microsoft/Boot/bootmgfw.efi的条目,只需从启动路径中删除Boot并给条目命名。
  5. 输入sudo update-grub以安装新的GRUB条目。
当您重新启动时,GRUB应该会出现。问题是,如果/当Windows决定重新安装其引导加载程序时,系统将直接启动到Windows。
对于第4步,您可以:
1. 复制以“menuentry 'Windows ...'”开头的40_custom条目,位于一组### BEGIN <path> ###### END <path> ###标签/注释之间。这个条目包含了包含Boot的路径。 2. 通过添加复制的menuentry在文件/etc/grub.d/40_custom中创建一个新条目。 3. 更改新条目的名称(原始名称应为Windows Boot Manager或类似的名称)。 4. 将路径从EFI/Microsoft/Boot/bootmgfw.efi更改为EFI/Microsoft/bootmgfw.efi

编辑:

在撰写这个答案之后,我了解到有一个第三方的Windows工具叫做EasyUEFI,它是一个比bcdedit更容易使用的图形界面工具,用于调整从Windows启动的EFI引导顺序。不过,我不知道如果Windows习惯上在每次启动时将自己设置为默认值,EasyUEFI是否会阻止Windows进行更改。因此,可能仍然需要使用bcdedit,但是也绝对值得尝试EasyUEFI。


5请问你能不能帮个忙,告诉我/我们第四步的具体终端提示信息?我已经完成了其他所有步骤,只是因为不确定要输入哪些命令,所以没有做那一步。现在 Grub 工作正常了,但是它不让我启动 Windows。哎呀! - user280151
请详细说明第四步骤。 - ji-ruh
在Ubuntu 18.04 LTS上找到了\EFI\ubuntu\shimx64.efi - exploitr

怎么在Windows 8中修改这个?我看到有关bcdedit的一些东西,但它不起作用,或者我不知道如何使用它...
我也遇到了同样的问题,最后我发现是最新的W8.1更新导致的,我知道是因为我刚刚更新了今天,而且已经有33天左右没有更新了,我的HP Pavilion告诉我的。
无论如何,以下是有效的方法:
我按照这个Utube视频停止了“自动[引导]修复”:http://www.youtube.com/watch?v=VRQYmtysFkg 然后使用Rod提供的解决方案更改了bootmgr: bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
成功!
顺便说一下:我从我的LiveUsb中使用Boot Repair什么都没做,只是在W8修复其引导项时闪了一下。

1很棒你决定提供帮助!但是你的回答没有为你发布的(视频)链接提供任何上下文,而我们在Ask Ubuntu这里希望有。我们希望这里的回答能够提供上下文,因为(视频)链接可能会在不久之后失效。 - Venkatesh

我只有一部分答案:一个基本可行的解决方案,直到我找到如何永久修复它为止。
我遇到了同样的问题:ThinkPad Edge 预装了 Windows 8;安装了 Ubuntu 双启动后,基本上忘记了 Windows,直到 8.1 发布,我想在彻底删除 Windows 之前试试它。所以在安装了 8.1 后,启动时 Grub 不再出现,但是当我按下 F12 时,会出现一个不同的菜单,允许我启动 Ubuntu。这就是我现在启动电脑的方式:但是每隔一次我都会忘记按下 F12,然后它仍然启动 Windows(我几乎从不需要)。
所以按下 F12 会有一段时间的帮助(不确定在你的情况下是否有效,但值得一试)。我知道有关如何恢复 Grub 的说明,但在完全确定之前,我不会做任何操作。

不知何故,Windows 8.1完全阻止Ubuntu是该问题的重复。我不认为是这样的,但我只能在这里评论。我遇到了与Windows 8.1完全阻止Ubuntu相同的症状。

在我的情况下,解决办法是在启动过程中按F2,并更改引导顺序,使Ubuntu位于列表顶部。由于某种原因,在我将双系统(Win/ubuntu)笔记本从Win 8升级到Win 8.1后,“Windows”出现在引导列表的顶部,超过了ubuntu、DVD、USB等选项,我的笔记本直接启动到Windows 8.1,没有给我任何选择。

在启动过程中按F2并将ubuntu置于列表顶部解决了我的问题,并使我能够再次访问Ubuntu(以及Windows 8.1),在我从Microsoft商店升级到Windows 8.1后。


在某些机器上,BIOS设置控制UEFI分区中*.efi文件的启动优先级。我发现我的HP Pavilion 15-f039wm笔记本电脑有这个功能,尽管一开始并不明显。在BIOS中进行设置比直接操作.efi文件和使用bcdedit要方便。
对于这台机器,我按F10键进入BIOS设置,然后光标移动到并选择“引导选项”。有可以重新排列的UEFI引导优先级选项,其中之一是“操作系统引导管理器”。然而,该选项还有一个额外的功能,如果我将其突出显示并按Enter键,会弹出一个窗口,用于重新排列“ubuntu”和“Windows引导管理器”在“操作系统引导管理器”中的优先级。我使用F5/F6将“ubuntu”置于顶部,使用F10保存弹出窗口的内容,然后再次按F10保存并退出BIOS设置。
现在,在没有每次启动时的干预下,我会得到Grub菜单,默认情况下启动Ubuntu。我仍然可以通过Grub菜单启动Windows,或者通过按F9键干预来获取UEFI引导管理器菜单以进行安全引导。
这个BIOS功能有助于解释为什么似乎UEFI代码覆盖了我在Ubuntu中使用efibootmgr所做的BootOrder更改。

运行Boot-Repair推荐修复选项,从liveCD启动,然后重新启动计算机。
如果仍然不好用,请运行Boot-Repair --> 高级选项 --> 取消勾选"备份并重命名EFI文件" --> 勾选"恢复EFI备份" --> 应用。

2没有问题来自Windows 8 - Kouros

在Acer E17上使用Windows 10和Ubuntu 14.04时,我遇到了类似的问题(Windows引导管理器接管了启动,无法访问Grub)。我按照Rod Smith上面提供的指示进行操作,但没有成功(顺便说一句,他的指示非常好)。
我在BIOS设置中找到了一个启动顺序选项,其中将Windows引导管理器排在第一位,硬盘排在第二位。我交换了它们的位置,保存并退出/重新启动,然后Grub立即出现了。
我在其他地方读到,有些BIOS还有一个快速启动选项,可能也需要禁用,但我的BIOS没有这个选项。