Windows无法从grub引导菜单启动了

我有一個帶有2個分區的SSD。第一個分區屬於Windows 10並且運作正常。我在第二個分區上安裝了Ubuntu 15.10,它也可以正常運行。
當我開機時,grub正確顯示並顯示Windows和Ubuntu。如果我選擇Ubuntu,它可以正常啟動,我甚至可以從Ubuntu訪問Windows分區,但是如果我嘗試啟動Windows 10,它會顯示黑屏(就像它通常會啟動)幾秒鐘(可能2或3秒),然後回到grub而不顯示任何消息。

如果您在没有Grub的情况下启动Windows引导加载程序,Windows会启动吗?(在计算机启动时按F12、F9、F10等键;选择启动设备顺序并选择Windows引导加载程序) - Info-Screen
我尝试了,但只有两个选择:SSD和普通硬盘。没有起作用。 - Jovana
4个回答

编辑 /boot/grub/grub.cfg 找到 Windows 菜单项(看起来像)
### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows 10 (loader) (on /dev/sdXX)'

完成之后

chainloader +1

Write

ntldr /bootmgr 

成功了。

我使用了这种方法,但是我必须通过Grub Customizer来完成。 - Alexiy
3我的天啊!这个居然管用,哈哈。三个小时后,只修了一行代码就解决了我的问题。 - Jamie Hutber
对不起,我设置了几次 'ntldr /bootmgr',我应该怎么做才能永久地离开它?(我用 'sudo' 做的,但有时会重置!) - M. Mariscal
7稍微晚了一点,但为了完全保留这些更改,你不能像最初建议的那样编辑grub.cfg。你需要编辑/etc/grub.d/40_custom,并在那里添加整个Windows条目,创建一个新的(如此处所建议:https://ubuntuforums.org/showthread.php?t=2305787&p=13404285#post13404285)。即使你升级Linux或运行'upgrade-grub',这个条目也会保留下来。 - ravemir
这个答案对我有帮助。这个页面被标记为重复,但它指向的页面上并没有任何关于ntldr的内容。 - clusterdude
@ravemir 晚来了一点儿;-) 我按照你的建议做了,现在它可以正常工作了。但是我现在有两个Windows条目:一个是自动检测到的,不能工作;另一个是我用40_custom文件添加的,可以正常工作。我该如何让自动检测到的那个从我的启动菜单中消失? - Andyc
根据以下帖子,你可以禁用操作系统探测器:https://askubuntu.com/questions/874186/remove-windows-entry-in-grub-menu;这样做将阻止下次 update-grub 出现时(可能是在内核更新后)弹出该条目。 - ravemir
@ravemir 我考虑过这样做,但我最好的猜测是,那样就不会检查其他(可能在将来)安装的操作系统了,我将不得不手动添加它们。我错了吗?或者也许有一种方法可以黑掉30_os_prober文件以自动添加ntldr /bootmgr行(并且摆脱40_custom)?它似乎都是shell脚本,而我对此并不擅长。因此超出了我的能力范围。 - Andyc
目前还不太确定。答案给人的感觉是,OS prober 只是为了驱动器上的其他操作系统而存在,这意味着它只适用于其他 Windows 安装或另一个并行的 Linux 安装(我觉得这种情况不太可能)。如果你使用的是 Mac,我不确定它是否也会识别 macOS 的条目,因为我对引导管理在那里不熟悉。 - ravemir
谢谢,这个方法很有效,但正如@Alexiy所说,我必须使用grub自定义工具。 - Ahmed U3
2在Ubuntu 19.04上对我没有起作用。我必须使用我的EFI加载器菜单(类似于"BIOS"的东西)来加载Windows :) - kolypto
这一切都是关于Grub BIOS,而不是GRUB UEFI,对吗?(试金石测试 [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS - Frank N
这个解决了。应该是被接受的答案。 - Abhi
我有一个双系统的Windows 7和Ubuntu,其中Windows是在第一个分区中先安装的,Ubuntu是第二个。最近我重新安装了Ubuntu,进行了全新的安装以替换旧版本。然而,在成功重新安装后,我无法启动Windows - Grub菜单显示了包含Ubuntu和Windows选项的菜单,并且对于Ubuntu来说工作正常,但如果我选择Windows选项,它会重新启动而不是启动Windows。经过多次搜索和尝试boot-repair,最终我找到了这个解决方案,对我有效,谢谢! - Ingch
然而,请记住其他用户(ravemir)在上面提到的,修改/boot/grub/grub.cfg并不是一个永久的好主意,因为当运行update-grub时,它会覆盖这个文件。所以最终的解决方案应该是修改/etc/default/grub文件。 - Ingch

首先,您需要升级您的GRUB。
    sudo update-grub2

如果上述命令不起作用, 那么您需要下载一个Windows ISO文件并安装“winusb”应用程序,该应用程序用于制作可启动的Windows镜像,如果您有光盘也可以。
记住您的Ubuntu分区名称。 现在从Windows USB或CD启动。然后点击修复此计算机和故障排除启动选项。
它将自动替换您的GRUB引导程序,然后您就能够启动到Windows,但无法启动到Ubuntu。
现在,您可以安装全新的Ubuntu,也可以尝试修复它。
如果您要安装全新的Ubuntu,则建议您将引导加载程序(Grub2)安装在根文件系统本身上。
然后,您可以为Windows安装EasyBcd应用程序,然后将引导加载程序链接到Ubuntu分区,这是最安全的方法,这样如果您有任何GRUB或Windows引导加载程序的更新,将来就不会有任何麻烦。
点击此处观看有关以最安全的方式安装的视频。
我使用以上提到的方法安装了5个Linux系统和1个Windows操作系统,到目前为止没有出现任何问题。

哦,谢谢。 如果可能的话,我会尽量避免重新安装Ubuntu,因为我已经有很多文件和配置在上面了,但我一定会尝试按照你的建议去做。 再次感谢。 - Jovana

这个问题是关于Windows而不是Ubuntu的。
我通过以下步骤解决了这个问题:
1.First selected windows at grub boot menu.
2.Sometimes it go to automatic repair and from that select Troubleshoot -> Advanced options.
3.Select startup repair and it will repair windows.
4.Now simply open windows from boot and it will boot windows normally.

这对我有用:
1. 安装Windows 8/10。 2. 使用Live Linux CD(我使用的是boot-repair-disk-64bit.iso),从中运行gparted进行引导。 3. 缩小Windows分区,为Linux腾出空间。 4. 现在非常重要的一步:重新启动Windows,然后打开文件资源管理器(黄色的那个),查看C盘是否仍然认为自己拥有整个磁盘。 5. 右键单击C盘,选择属性/工具,然后点击检查。 6. 现在Windows将检查和验证新的Windows分区大小。 7. 你可能需要重新启动Windows几次,但最终Windows会知道其分区的大小和位置。 8. 现在你可以安装Ubuntu或其他操作系统了,如果遇到问题,boot-repair-disk-64bit.iso可以快速解决。

1最好从Windows中调整窗口分区大小。 - ravery