Windows 8.1和Ubuntu 13.10双系统启动时没有显示Grub菜单。

好的,我对Ubuntu还是个新手,上个月买了一台预装Windows 8的笔记本电脑。
我升级到了Windows 8.1,然后想着安装Ubuntu作为双系统,这样我就可以玩弄它并学到更多知识。
于是我按照一个Youtube教程(链接:http://www.youtube.com/watch?v=dJfTvkgLqfQ)操作,一切都正常运行。
最开始几次启动时,我看到的是GRUB菜单,而不是默认的HP引导操作系统管理器,我可以选择我的操作系统。
然后我去睡觉了,第二天打开电脑,GRUB菜单没有显示出来。我试了几次,它没有自动显示出来。
为了能够看到GRUB菜单,我必须打开电脑,在启动时按下ESC键暂停启动,然后按下F9键获取启动选项。然后从那里选择操作系统引导、Ubuntu、Ubuntu(是的,有两个Ubuntu可供选择)和一个默认的EFI文件。
当我点击第一个Ubuntu时,我会进入GRUB菜单(我太害怕尝试第二个,以免损坏我的笔记本电脑),然后我可以安全地从那里加载Ubuntu并使用它(尽管每次加载Ubuntu时我都必须增加亮度,因为它在启动时会将亮度降低到完全黑暗)。
所以我的问题是,为什么我的GRUB在启动时没有显示出来,尽管它在第一天工作正常?
我的笔记本电脑是HP TouchSmart j-078CA。
编辑1:FYI,我刚切换到Ubuntu LiveCD来检查我的安装情况,并发现我的一个分区被标记为“msftres”。这是我在LiveCD上的GParted的屏幕截图:https://istack.dev59.com/SSFNK.webp
4个回答

首先,关闭Windows 8的快速启动功能,如此处所述。该功能会导致文件系统损坏,进而引起奇怪的启动问题。很有可能这个问题最初导致了您的问题。禁用快速启动可能会或可能不会导致GRUB在下次重新启动时重新出现。
如果这不能解决问题,您应该尝试使用固件的NVRAM重新注册GRUB。最可靠的方法是在Windows中使用bcdedit。打开一个管理员命令提示窗口,然后输入:
bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

如果您在启用安全启动的情况下引导,将grubx64.efi更改为shim.efi(或者可能是shimx64.efi;在Linux中,请检查/boot/efi/EFI/ubuntu的内容以查看其中的内容)。在Windows中进行此操作比其他方法更可靠,因为一些用户报告称,如果将默认设置为Windows之外的其他位置,则某些Windows版本会反复重新注册自己作为默认的引导加载程序。尽管这种情况很少见,但与您所看到的情况一致,因此在此任务中使用Windows可能是必要的。
更简单的方法是使用Boot Repair,但在您的情况下可能不太可靠。该工具可以自动修复某些类型的引导问题,并且很可能适用于您的情况。最大的风险是,如果过于热衷的Windows导致GRUB变得无法访问,那么Boot Repair的更改将无效。
如果您继续遇到问题,请提供详细信息。(如果需要,编辑您的原始帖子并在此评论中提醒我更改。)

嗨Rod,在我继续你的解决方案之前,你认为标记为msftres的分区是否与GRUB无法加载有关,因为我按照我上面发布的YouTube教程中的说明进行操作。如果您想要视频中的确切位置,请访问:http://goo.gl/qnkxMZ。当我在预装的Windows 8.1上安装Ubuntu 13.10时,它没有检测到预装的Windows。所以我不得不按照那个人的指示去操作,第一次就成功了。感谢您的帮助。 - driftking96
不,"msftres flag"只是用来标识使用Microsoft Basic Data类型代码的分区。有关详细信息,请参阅我对此问题的回答。 - Rod Smith
好的,谢谢你提供的信息。我在命令提示符中执行了bcdedit命令,并得到了“操作成功完成”的提示,但是我不明白如何“检查/boot/efi/EFI/ubuntu目录下的内容以查看其中有什么”。你能否进一步解释一下? - driftking96
其实很酷,我已经弄清楚了。我碰巧有MiniTool分区编辑器,所以用它来探索我的EFI分区,这就是我得到的...http://imgur.com/GMYpfAW 不确定这意味着什么,所以我希望你们能告诉我发生了什么。谢谢! - driftking96
1嘿,老兄!只是想告诉你,你的解决方案奏效了,似乎正在起作用。我执行了命令提示符引导管理器路径更改操作,然后看到了一个HP BIOS更新,所以我进行了更新,但仍然没有看到GRUB屏幕,于是我认为我可能搞砸了,于是重新尝试了你的解决方案并重新启动,哇!它起作用了,所以我进入了Ubuntu,重新启动,它再次起作用,然后我进入Windows 8,重新启动,它又一次起作用。因此,希望我能毫不含糊地说你的解决方案修复了我的问题,现在我的问题已经不再是个问题,因为它有一个解决方案。非常感谢你,兄弟! - driftking96
@RodSmith,我似乎无法在我的HP电脑上使这个工作起来。这是我的实际问题:http://askubuntu.com/questions/451710/dual-boot-ubuntu-14-04-and-windows-8-not-working 它被标记为重复的问题。我已经禁用了快速启动和安全启动,并运行了bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi,但仍然没有出现grub :( - psychok7

如果您正在使用 Windows PowerShell,则必须使用引号。
bcdedit /set "{bootmgr}" path \EFI\ubuntu\grubx64.efi

我有一个建议。我按照第一个答案的步骤操作,但GRUB仍然没有显示出来。
我按照关闭快速启动和bcedit命令的方法,但它不起作用。 我准备使用Linux Live USB中的Boot-Repair,从BIOS引导,我注意到“引导管理器”选项中仍然显示着“快速启动”已启用,即使Windows说它没有启用。
我关闭了它,重新启动,GRUB界面就像以前一样快速出现了!
希望在有人尝试重新安装Ubuntu或使用Boot-Repair之前,这个建议能有所帮助。 编辑1:“引导管理器”选项卡是我的BIOS中的第一个选项卡,那里有一个设备列表,我可以选择从哪个设备引导(硬盘、光盘、USB...)。在此之上有两个选项,“快速启动”和另一个我记不清楚的选项。希望这样能澄清我回答中模棱两可的上下文。

你在说什么“引导管理器选项”?没有这些信息,你的回答就相当模糊不清。 - David Foerster

大多数主板供应商应该允许您使用efibootmgr重置引导顺序(当grub以UEFI模式安装时会使用它)。禁用Windows Boot Manager。从原始安装或使用live Ubuntu USB/DVD启动Ubuntu,并运行efibootmgr。如果以UEFI模式安装了它,您将获得一些信息和引导顺序列表。您会注意到Windows bootloader/Windows Boot Manager和Ubuntu在列表中的某个位置。很可能Windows的启动优先级更高(Windows引导项在引导顺序中位于Ubuntu之上)。
某些(如果不是全部)条目旁边还有星号*,表示它们为活动状态。
查看Windows条目旁边的4位数字引导编号,并运行:
sudo efibootmgr --bootnum #### --inactive

这将禁用Windows条目。还要确保现在禁用的Windows具有更高的优先级,如果尚未设置的话。
sudo efibootmgr --bootorder ####,$$$$,&&&&,%%%%

其中####是Windows的启动编号。

如果您现在重新启动,如果Ubuntu选项已启用且具有最高优先级,则将引导到grub。

请注意,Windows似乎没有意识到它已被停用,因此通过启动到Windows或更新Windows无法恢复此操作。

来源:改编自this answer


如果这样不起作用,尝试在BIOS/UEFI设置中更改引导管理器。进入BIOS设置实用程序 -> 选择“系统配置”选项卡 -> “操作系统引导管理器” -> “Ubuntu” -> 按下适当的键(例如F10保存并退出)以保存更改的设置并退出。

OS Boot Manager