将Windows 10添加到GRUB操作系统列表中。

我最近从学校得到了一台电脑,它预装了Windows 8.1。然后我安装了另一个副本的Windows 8.1(这样它就可以使用内置的Windows Pro许可证),并升级到了Windows 10。接着,我在Windows 8和10旁边安装了Ubuntu。
请注意,我为/boot创建了一个独立的255MB ext2分区。
现在,当我启动电脑时,首先会看到一个GRUB提示符(我已经取消隐藏GRUB提示符,因为我喜欢这样),其中包含Windows 8和Ubuntu选项。然而,没有Windows 10选项。如果我选择Ubuntu,电脑就会启动进入Ubuntu。但是,如果我选择Windows 8选项,我会被发送到Windows引导加载程序,然后给我选择启动Windows 8或Windows 10的选项。(然而,到这个时候,电脑已经加载了内核和所有内容。显然微软误解了“引导”加载程序的概念,并决定在实际显示引导加载程序之前“引导几乎整个系统”。典型的微软。)
我该如何禁用Windows引导加载程序并在GRUB中添加Windows 10选项? 编辑:有人回答告诉我要禁用Windows引导程序。然而,我仍然不知道如何将Windows添加到GRUB操作系统列表中。有人可以帮忙吗? 编辑2:使用EasyBCD从Windows引导程序中删除Windows 10后,似乎经过几次重启后,它会不断重新显示出来。然而,后来我在msconfig的OS列表中将Windows 10删除了,看起来已经删除成功。
然而,我仍然没有成功让Windows 10出现在GRUB中。就好像GRUB根本没有检测到它一样。
另外,我将这个问题放在问题中,以便人们看到 - 我尝试使用boot-repair,但并没有帮助。

1@daltonfury42 如果你不听或者不理解原帖的要求,就别再相信了!推荐一个主要解决传统遗留引导设置中常见问题的工具,对于具有特殊要求的非典型 UEFI 安装来说是误导和适得其反的。 - LiveWireBT
3@LiveWireBT 很抱歉。我看到了您的回答。我已经删除了我的评论(并停止相信:P)。谢谢! - daltonfury42
1我想我要直接删除整个Windows 10分区并将其转移到虚拟机上。 - Hitechcomputergeek
老实说,我真不确定为什么人们还在给这个问题点赞,因为在我看来,这并不是一个很好的问题。然而,今年我用另一种方式解决了这个问题——通过从MBR转换为GPT和UEFI引导。基本上,我将分区方案转换为GPT,调整了Windows分区的大小,添加了一个EFI系统分区,并在其中安装了rEFInd,并使用Windows安装盘创建了一个Windows BCD。现在系统使用UEFI引导启动,更容易进行操作系统的尝试。与互联网上所说的相反,将Windows安装从BIOS转换为UEFI并不太困难,但也不容易。 - Hitechcomputergeek
1对于将来想要做类似事情并且想要坚持使用BIOS的任何人,我相信答案在于Windows BCD。我认为Windows 10安装没有适当的引导加载程序或BCD之类的东西,实际上无法独立启动。如果正确操作,我有预感GRUB应该会自动找到Windows 10分区。 - Hitechcomputergeek
请注意,我为/boot创建了一个单独的255MB的ext2分区。-- 在UEFI安装中,请使用ESP作为/boot。这将使您的生活更加轻松。 - Erkin Alp Güney
@ErkinAlpGüney 在我写这个问题的时候,系统是使用MBR进行分区的。 - Hitechcomputergeek
9个回答

有时候os-prober的判断是错误的。
比如,查看一下你的Windows 10分区的UUID:
sudo blkid /dev/sda2

然后编辑/etc/grub.d/40_custom,在文件末尾添加以下内容:
menuentry "Windows 10" --class windows --class os {
   insmod ntfs
   search --no-floppy --set=root --fs-uuid $your_uuid_here$
   ntldr /bootmgr
}

不要忘记更改UUID。
最后更新您的grub配置文件:
sudo update-grub

来源


4值得注意的是,对于Windows 10来说,通常第一个分区不是Windows系统分区(即sdb2是正确的,而sdb1不是)。这是因为在安装过程中,Windows 10是如何存储在磁盘上的,系统保留分区或系统修复分区总是排在第一位。如果磁盘上的第一个分区已经提供了可引导的内容,Grub经常无法找到第二个分区。找到正确的UUID最简单的方法是通过sudo fdisk -l找到最大的分区,并将其与blkid的结果进行匹配。 - Jan Myszkier
您是否在UUID周围保留$符号? - Klesun
1不,"$"只是一个占位符。 - noraj
6无法工作。显示错误信息:“找不到命令 'ntldr'”。 - Artem P
和@hlcs这里一样的错误 - Soutzikevich
2@hlcs 使用'chainloader /EFI/Microsoft/Boot/bootmgfw.efi'代替'ntldr /bootmgr'。这对我来说效果很好。 - LeWimbes
os-prober非常准确(还可以检测完全独立驱动器上的Windows 10安装)。您只需要正确读取它。一旦获取了Wind10目标(例如/dev/nvme1n1p3@/EFI/Microsoft/Boot/bootmgfw.efi),使用blkid命令获取设备的UUID(例如/dev/nvme1n1p3)。之后,按照@LeWimbes建议稍作修改,使用chainloader参数,即chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi - rbaleksandar

这个解决方案在grub2菜单中提供了一个适当的入口,并直接引导进入Windows 10,而不涉及BIOS。它来自于this webpage,所以我并不拥有任何功劳。找到一个可行的解决方案真是如释重负。
简要地说,编辑/etc/grub.d/40_custom并添加:
menuentry 'Windows 10' {
    search --fs-uuid --no-floppy --set=root CC66-4B02
    chainloader (${root})/EFI/Microsoft/Boot/bootmgfw.efi
}

要找到--set=root行(示例中的CC66-4B02)的UUID,您可以使用sudo fdisk -l来识别EFI分区,然后使用sudo blkid /dev/sda1(或其他命令)来查找EFI分区的UUID。请注意,您需要的是EFI分区的UUID,而不是Windows分区的UUID。保存编辑后,运行sudo update-grub生成/boot/grub/menu.cfg文件,然后重新启动进行测试。

我猜你的意思应该是sudo blkid /dev/sda1命令,而不是sudo /dev/sda1。 - makapuf
@makapuf - 你说得完全正确,谢谢。已经更正了。 - peterthevicar
我按照那个准确的教程操作了一遍,但是当我尝试启动时,出现了“错误:找不到分区”的提示。在挂载分区后,发现该分区上并不存在“EFI/Microsoft/Boot/bootmgfw.efi”文件。 - xeruf
1你需要在Windows上运行bcdboot C:\Windows /s C: /f uefi来创建EFI。更多信息请参考:https://askubuntu.com/a/447687/160368。 - Artem P
当boot-repair无法解决问题时,这个方法对我起了作用(双系统Ubuntu 20.04和Windows 10在RAID 0上)。 - Fanta
对我来说它是有效的,但我遇到了ntfscomp模块无法加载的问题 :( - Loc_rabbirt
1终于为我工作,我对EFI分区的UUID有点困惑,而不是Windows分区。非常感谢您的帮助:) - Loc_rabbirt
没有这样的设备。我在想,既然grub是从Linux分区引导的,它就看不到UEFI分区。 - Marcelo Lacerda
bootmgfw.efi不存在 - Adarsh Raj

使用:

sudo update-grub
sudo grub-install /dev/[BOOT PARTITION eg. Sda6]

在Ubuntu终端中输入以下命令,可能会解决您的问题。
通过这个命令,系统将自动检测到您的Windows安装并将其添加到GRUB列表中。

8很遗憾,这个方法没有成功。它似乎无法检测到Windows 10的分区。 - Hitechcomputergeek
1实际上,我在我的系统上也遇到了同样的问题(使用Windows 10和Ubuntu 14.04),并且通过以下命令解决了该问题。 - Neel Shah
哪个命令解决了问题,是 update-grub 还是 grub-install?你有一个单独的 /boot 分区吗?问题是,我有一个单独的引导分区,我想它实际上是 sda6。 - Hitechcomputergeek
2做那两个命令(显然)并没有解决它。 - Hitechcomputergeek
是的,上面的命令只能添加Windows引导分区,而不能为W10和W8添加单独的加载器。参考此链接:点击这里 - Neel Shah
菜单项的顺序与此无关。我已经能够(而且已经)做到这一点。问题在于让Windows 10实际上出现在菜单中。 - Hitechcomputergeek
我在一个SSD上安装了Ubuntu(带有Grub),并在另一个SSD上安装了Windows 10。运行sudo update-grub解决了我的问题。谢谢! - WiredIn
8sudo update-grub 完成了。 - thameera
sudo update-grub 也为我的 Windows 7 分区完成了这个操作。 - Anse

使用这个应用程序EasyBCD来为Windows系统进行操作。你可以在http://neosmart.net/EasyBCD/下载免费版本并安装它。
打开应用程序后,你会看到一个Windows 8的选项和一个Windows 10的选项。
删除Windows 8的选项,然后你就可以继续使用了。
更新:完成上述步骤后返回Ubuntu系统,
按下ctrl+alt+T组合键打开终端。
然后依次将以下命令复制粘贴到终端中。
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install -y boot-repair

通过这个方法,您将安装一个名为boot-repair的工具。
从Dash打开boot repair,您将看到以下窗口。

enter image description here

选择推荐的修复选项并按照步骤进行操作。
请注意,在使用引导修复工具时需要保持网络连接。

1@Hitechcomputergeek 如果你需要更多帮助,告诉我一声,我会切换到Windows并为你截取一些屏幕截图。 - user433732
这会将Windows 10添加到GRUB吗?(让我猜猜:不会)我希望能够从GRUB访问所有三个操作系统,而这只解决了部分问题。 - Hitechcomputergeek
我更新了问题,询问如何将Windows 10添加到GRUB操作系统列表中。我给你的答案点赞是因为它解决了部分问题,但由于我仍然需要将Windows 10添加到GRUB中,所以我还没有接受这个答案。 - Hitechcomputergeek
@Hitechcomputergeek 我更新了答案,请现在试一下。 - user433732
我会在有更多时间的时候再试一次,但请注意我已经尝试过多次使用sudo update-grub命令,但似乎无法检测到我的Windows 10分区。此外,我还在gparted中为所有三个可引导分区设置了boot标志(之前没有),但是sudo update-grub仍然找不到Windows 10分区。 - Hitechcomputergeek
从我看到的情况来看,Grub确实能够检测到你的Windows 10系统。但是它仍然将其称为Windows 8,因为Grub还没有针对Windows 10进行更新。在使用easyBCD配置后,你在Grub中仍然会看到Windows 8选项,但实际上会引导至Windows 10。明白吗? - user433732
我实际上还没有在 EasyBCD 中移除 Windows 10,因为我不想失去进入 Windows 10 的权限。但是我相信 GRUB 正在引导到 Windows 8 分区,但分区上的 Windows 引导程序看到了 Windows 10,所以它不是直接引导,而是先询问我是否要进入 Windows 10。 - Hitechcomputergeek
2另外,我注意到你说要从Dash中打开Boot Repair,但是sudo apt-get install -y boot-repair && boot-repair这行命令已经打开了它。 - Hitechcomputergeek
所以我刚刚尝试了一下启动修复(通过U盘,因为当我尝试从我的Ubuntu安装运行它时,它抱怨了),现在grub菜单中唯一的选项就是Ubuntu。就连memtest86+也神秘地从列表中消失了。哎呀,谢谢啦! - Hitechcomputergeek
请尽快帮我,因为学校星期三就开学了,我需要在那之前能够启动Windows 8。 - Hitechcomputergeek
不用在意上次的评论,我恢复了备份的 /etc/default/grub,运行了 sudo update-grub,现在我可以再次启动 Windows 8。然而,memtest86+ 仍然不在引导列表中。我想把它重新加回去。另外,我将 grub-customizer 的日志文件保存到了我的 live USB 的其他分区中,所以如果你想让我发布它,我可以这样做。 - Hitechcomputergeek
@Hitechcomputergeek,你不需要恢复备份,只需要从已经安装的Ubuntu中运行引导修复即可。我不知道如何恢复memtest86+。 - user433732
是的,但我还是这样做了,因为我已经将菜单取消隐藏,并将超时设置为2秒,就像我喜欢的那样。另外,我可以尝试谷歌搜索一下,看看如何找回MT86+。 - Hitechcomputergeek
我已经重新安装了Memtest86+。原来的问题仍未解决。然而,当我运行EasyBCD并尝试通过删除它来摆脱Windows启动菜单时,似乎在重启一两次后又会出现。我还尝试将其设置为跳过菜单,但也没有起作用。(不过我还需要进一步尝试。) - Hitechcomputergeek
我多次使用过这个引导修复应用程序,它是修复GRUB的绝佳解决方案,尤其适用于多重引导系统。它需要保持活动的互联网连接。从图像中可以清楚地看到它解决了频繁出现的问题。因此,在手动更改后,该软件将无法检测到您手动应用的修改。它仅适用于自动发生的常见问题。它会自动扫描所有可引导的驱动器,并提供相应的解决方案。 - Alamjit Singh
1您还可以在“Ubuntu测试模式(Live CD模式)”的ISO中使用此工具,在连接到互联网或Wi-Fi后安装、运行和使用它。 - Alamjit Singh
不要用那些垃圾,EasyBCD只能在Win7上使用。 - Egon Stetmann.

就我理解您的问题,您在一个或多个硬盘上安装了两个不同的Windows系统,并且不想让Windows引导程序干扰或管理这两个Windows系统。我记得在旧版设置中,可以直接从Grub引导Windows内核(我可能记错了),但在UEFI设置上我无法做到这一点。拥有两个独立的Windows引导程序配置,并可以从Grub独立调用它们,应该非常接近您想要的结果。

它预装了Windows 8.1。

我假设这是一台支持UEFI的计算机。

请检查计算机是否支持UEFI(如果不支持,我将删除我的答案),并熟悉BIOS和UEFI之间的区别(不同的引导模式,efibootmgr,不同的分区表,EFI系统分区(ESP),EFI加载程序等)。
然后,请检查所有操作系统是否以UEFI模式安装,并检查您是否有一个GPT分区表。您可以使用Windows的"dism"工具备份和恢复分区到新的分区表布局,并使用最新的Windows安装媒体的命令提示符重新安装引导程序,关于此更多详细信息请参考下一点。
由于您已经被建议尝试了各种其他不解决您问题的工具,您需要将这些更改还原到原始状态,否则会变得越来越混乱。对此表示抱歉。:(
您可以使用我在"How to boot Windows 8 from a legacy MBR partition in UEFI mode via GRUB?"中的答案。
这个答案通过"bcdboot"在不同的位置安装了一个独立的Windows引导程序配置,Grub会调用它。为了方便起见,我选择了Windows的根分区。您需要为每个Windows安装都执行此操作,以便每个Windows安装都有自己的引导程序,并且只能引导自己(清除其他条目中的单独Windows引导菜单)。
请记住,您需要在"/etc/grub.d/40_custom"中为每个要引导的Windows安装创建一个单独的条目,并按照有关UUID、分区和分区表的说明和解释进行操作。
可能需要禁用Grub中检测不同操作系统的半智能功能,如OS-prober(GRUB_DISABLE_OS_PROBER)或使用Windows或boot-repair进行故障排除引导问题(或手动清理它们之后)。
注意:您的请求是能够使用Grub管理所有操作系统,然而在UEFI下,传统的“双启动”术语几乎成为一个错误的称呼。UEFI允许多个引导加载程序共存于ESP上,并且您可以选择要启动哪个(如果它们已在UEFI固件中注册,并且制造商的固件没有超出规范地只启动Windows)。遗憾的是,只有很少的人能够考虑安装多个(独立的)Windows版本、Linux或Ubuntu的一个发行版到一台计算机上(或者一个与多台计算机一起使用并在每台计算机上引导不同安装的相同操作系统版本的硬盘)。大部分情况下这是可能的,但是Windows和Ubuntu(Fedora等)中的机制明显选择覆盖其命名空间中的内容,错误地假设只能存在一个。
(我在一台计算机上引导Windows8/10、Ubuntu、Ubuntu LTS和Fedora,并且根据不同的需求多次进行了UEFI引导的调整。)

1我不使用Windows。但是有人尝试过将/EFI/Windows复制到/EFI/Windows10和/EFI/Windows8,并编辑每个BCD文件,使其仅适用于该版本吗?然后在UEFI中为每个版本创建条目。如果从UEFI中可以正常工作,那么grub可以直接链接到每个版本。 - oldfred
@oldfred,这就是我想在下面部分指出的问题,可能还有一个bcdboot参数可以指定另一个目标目录,但我不确定。从一个ESP链式加载其他EFI二进制文件大大简化了40_custom,使其更少出错,你说得对。我想我太过于关注多硬盘情况(在这种情况下,您仍然应该能够告诉bcdboot从hdd1上的ESP引导hdd2上的Windows,我想)。m( - LiveWireBT
这台电脑支持UEFI,但老实说,我对分区的情况一点也不清楚。学校安装了一个定制的Windows 8镜像,虽然它使用了UEFI和Secure Boot(我记得BIOS配置允许同时使用UEFI和传统引导,我好像把Secure Boot禁用了),但硬盘本身是使用MBR格式化的。这是一个屏幕截图:http://imgur.com/1vDS4jf(是的,我计划很快调整一些分区大小)。此外,根据dmesg的grep结果,Ubuntu本身似乎没有以EFI模式启动,但我不知道GRUB本身是否能够。 - Hitechcomputergeek
屏幕截图显示了一个带有扩展分区但没有EFI分区的msdos/MBR分区表。如我之前所说,您应该使用GPT,并且可以使用“dism”来管理Windows分区。 - LiveWireBT
首先以UEFI启动,然后再以非UEFI方式启动其他操作系统。UEFI确实让人困惑。编辑:GRUB并未以UEFI方式启动。我对原始的Windows发生了什么问题完全不知情。事实上,仔细想想,它可能一开始就不是UEFI。我之前只是觉得很难进入BIOS,因为Windows 8的休眠功能,除非你先启动它,然后点击“重新启动”,再尝试进入BIOS。自从安装了Ubuntu(和GRUB)后,我再也没有需要这样做的情况了。 - Hitechcomputergeek
+LiveWireBT 真糟糕,你太快了;我“编辑”了我的评论,复制它,删除它,并添加了一堆东西,但我编辑得太慢了,结果没来得及加进去。无论如何,多年来我已经将几台学校电脑引导到Ubuntu上(尽管这是我第一年真正拥有一台(甚至从技术上说也不是我的 - 夏天他们会收回并重新镜像),但无论如何),但在此之前我没有深入研究过任何一台。去年我看到的一些(也是Windows 8)有的有GPT分区,有的没有(似乎是随机的), - Hitechcomputergeek
我猜想今年他们都在使用UEFI,因为有关重启的事情,以及ThinkPad标志看起来不同。这是他们第一次使用这个特定型号,所以可能是这个原因。 - Hitechcomputergeek

只需登录到您的Ubuntu操作系统,打开终端,并输入以下命令:
sudo update-grub

完成后,请重新启动您的系统。


你需要为后续安装的Windows创建一个新的EFI分区。因为最初安装的那个已经有了自己的EFI,而后来安装的Windows看到另一个Windows后只是在引导程序中添加了自己的条目,现在它将创建自己的EFI在/EFI/Microsoft/Boot/bootmgfw.efi中,所以在Windows 10上以管理员身份启动CMD,并输入以下命令(从这里进入TenForums):
diskpart
list disk
select disk # Note: Select the disk where Win10 is installed
list partition
select partition # Note: Select the Win10 installation partition.
shrink desired=100
create partition efi size=100
format quick fs=fat32
assign letter=s
list partition
list volume Note: Note the volume letter where the Win10 is installed.
exit

bcdboot X:\windows /s S:
Note: Replace "X" with the volume letter of the Win10 partition.

BCDBoot将引导文件从Windows分区复制到EFI系统分区,并在同一分区中创建BCD存储。
现在只需在/etc/grub.d/40_custom或/etc/grub.d/中的任何自定义文件中添加指向该分区的条目即可。
insmod part_gpt
insmod ntfs
set root=hd1,gpt10
chainloader /EFI/Microsoft/Boot/bootmgfw.efi

非常好的答案!对我来说,grub.d 修改的最后一部分并没有成功,但在进行 diskpart 操作之后,只需要输入 sudo os-prober 和 sudo update-grub 就足够了。 - Sergey Orlov
谢谢!顺便说一句,不确定为什么 grub.d 部分对你没起作用。 - Ahmed

在寻找解决方案一段时间后,也因为懒得再花一个小时去找到应该编辑和更新的内容和位置(因为这是徒劳的),我最终安装了Grub Customizer。效果非常好!

Windows 10大部分情况下会被os-prober自动添加到grub引导菜单中。
对于我的特定设置,我希望完全隐藏grub菜单,并在按下热键启动Ubuntu之前自动启动Windows。因此,在我的特定情况下,os-prober不是一个选项,因为隐藏grub菜单的最重要步骤(大多数我找到的答案都忽略了)是设置禁用os-prober标志,否则菜单将显示直到os-prober完成。
这个过程比我预期的要花费更长的时间,因为有很多部分答案,但大多数都依赖于版本,并可能让你误入歧途。我花了很多时间尝试编写自己的grub菜单条目,尝试使用不存在的grub命令,如ntdlr。另一个注意事项是,我的grub上的chainloader函数尝试引导bios而不是efi,并且无法工作。(我确定我做错了什么?)
最后,解决方案实际上很简单,因为脚本会在您的/boot/grub/grub.cfg中为您找到引导分区的UUIDS。因此,您可以跳过大多数人提到的fdisk和blkid步骤。
第一步是确保/boot/grub/grub.cfg文件是最新的,可以使用update-grub命令来生成.cfg文件。在终端中执行此操作。
sudo update-grub

第二步是在/etc/grub.d/40_custom中添加自定义菜单项。不要浪费时间尝试编写自己的菜单项,只需打开/boot/grub/grub.cfg,在其中搜索"menuentry"并复制自动生成的菜单项。
列表中的第一个将是Ubuntu,我的看起来是这样的。
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-9e66eed6-e672-49ff-a07c-afdc00809148' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  9e66eed6-e672-49ff-a07c-afdc00809148
else
  search --no-floppy --fs-uuid --set=root 9e66eed6-e672-49ff-a07c-afdc00809148
fi
linux   /boot/vmlinuz-5.4.0-39-generic root=UUID=9e66eed6-e672-49ff-a07c-afdc00809148 ro  quiet splash $vt_handoff
initrd  /boot/initrd.img-5.4.0-39-generic

}

Windows 的操作方式会类似。将两者都复制到 /etc/grub.d/40_custom 中。我仅对 Ubuntu 做了一个改动,即添加了 --hotkey=key 参数,这样 grub 就会根据热键来启动与之关联的操作系统。

menuentry 'Ubuntu2' --class ubuntu --class gnu-linux --class gnu --class os --hotkey=u $menuentry_id_option 'gnulinux-simple-9e66eed6-e672-49ff-a07c-afdc00809148' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  9e66eed6-e672-49ff-a07c-afdc00809148
else
  search --no-floppy --fs-uuid --set=root 9e66eed6-e672-49ff-a07c-afdc00809148
fi
linux   /boot/vmlinuz-5.4.0-39-generic root=UUID=9e66eed6-e672-49ff-a07c-afdc00809148 ro  quiet splash $vt_handoff
initrd  /boot/initrd.img-5.4.0-39-generic

}

我在这里使用--hotkey=u来设置Ubuntu的启动热键为u。
然后我调整了Windows的条目,用grub的--id flag替换了$menuentry_id_option
menuentry "Windows 10" --class windows --class os --id windows-custom {
insmod part_gpt
insmod fat
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  0EAE-C882
else
  search --no-floppy --fs-uuid --set=root 0EAE-C882
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi

}

我使用了--id windows-custom。请将更改保存到/etc/grub.d/40_custom

最后打开/etc/default/grub并添加:

GRUB_DISABLE_OS_PROBER=true

GRUB_DEFAULT=0 改为 GRUB_DEFAULT=windows-custom,将 GRUB_TIMEOUT=10 改为您自己选择的时间,我使用0.5只是为了给自己一点额外的时间,在POST之后按下 u 启动Ubuntu。
希望这对某人能够节省一些麻烦,干杯!