如何修复Grub?(在安装Windows后如何恢复Ubuntu?)

我安装了Windows 7,它吃掉了Ubuntu的引导文件。现在启动电脑时,直接进入Windows,没有给我选择启动Ubuntu的选项。
我该如何恢复Ubuntu?

我觉得这是一个常见的任务,我也有两个硬盘驱动器,并且安装了Ubuntu和Windows。我希望你能用正确的方法修复它。尝试按照这个教程操作。如果有任何问题,请问我! - antivirtel
2相关(当GRUB安装到错误的驱动器的MBR时):安装Ubuntu后的Grub救援问题 - Eliah Kagan
可以的,你只需要用Windows进行正常启动和安装,然后在计算机启动时,它就会显示在Grub引导菜单中。 - Rampoo1208
我知道这是一个旧的帖子,但我通过将BIOS中的启动模式从UEFI更改为Legacy来解决了这个问题。 - user183708
1请注意:接受的答案是关于如何修复GRUB的一般指导。它也适用于安装程序(ubiquity)错误编写GRUB的各种情况。 - Danatela
14个回答

当你安装Windows时,Windows会假设它是机器上唯一的操作系统(OS),或者至少不考虑Linux。因此,它会用自己的引导加载程序替换GRUB。你需要做的是将Windows的引导加载程序替换为GRUB。我看到过各种各样的关于通过操纵GRUB命令或类似方法来替换GRUB的说明,但对我来说,最简单的方法就是简单地使用chroot进入你的安装并运行update-grubchroot非常好用,因为它允许你在实际的安装中工作,而不是试图在这里那里进行重定向。这真的很干净。
以下是具体步骤:
  1. 从Live CD或Live USB启动,进入“尝试Ubuntu”模式。
  2. 确定您的主分区的分区号。 sudo fdisk -lsudo blkid或GParted(默认情况下已安装在Live会话中)可以帮助您。在本答案中,我假设它是/dev/sda2,但请确保使用正确的分区号!

    如果您的主分区位于LVM中,则该设备将位于/dev/mapper/中,很可能是/dev/mapper/{volume}--{os}-root,其中{volume}是LVM卷名称,{os}是操作系统。执行ls /dev/mapper以获取确切的名称。

  3. 挂载您的分区:

    sudo mount /dev/sda2 /mnt  #用步骤2中的分区替换sda2
    

    如果您有单独的/boot/var/usr分区,请重复步骤2和3,将这些分区分别挂载到/mnt/boot/mnt/var/mnt/usr。例如:

    sudo mount /dev/sdXW /mnt/boot
    sudo mount /dev/sdXY /mnt/var
    sudo mount /dev/sdXZ /mnt/usr
    

    用相应的分区号替换sdXWsdXYsdXZ

  4. 绑定挂载其他必要的内容:

    for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
    
  5. 如果Ubuntu是以EFI模式安装的(如果您不确定,请参见此答案),请使用sudo fdisk -l | grep -i efi或GParted查找EFI分区。它将具有标签EFI。挂载此分区,用实际系统的分区号替换sdXY

    sudo mount /dev/sdXY /mnt/boot/efi
    
  6. chroot进入您的Ubuntu安装:

    sudo chroot /mnt
    
  7. 此时,您在安装中而不是Live会话中,并作为root运行。更新grub:

    update-grub
    

    如果出现错误或者步骤7没有解决您的问题,请转到步骤8。(否则,它是可选的。)

  8. 根据您的情况,您可能需要重新安装grub:

    grub-install /dev/sda
    update-grub # 以查找并添加Windows到grub菜单。
    
  9. 如果Ubuntu是以EFI模式安装的,并且EFI分区UUID已更改,则可能需要在/etc/fstab中更新它。比较一下:

    blkid | grep -i efi
    grep -i efi /etc/fstab
    

    如果当前的EFI分区UUID(来自blkid)与/etc/fstab中的不同,请使用当前的UUID更新/etc/fstab

  10. 如果一切正常且没有错误,则完成

    如果您无法正常启动,并且没有执行第8步骤,因为没有错误消息,请再次尝试执行第8步骤。
    有时候,仅仅给GRUB2正确的分区配置是不够的,您还必须实际安装(或重新安装)到主引导记录中,这就是第8步骤的作用。通过与用户聊天的经验表明,即使没有显示任何错误消息,有时候第8步骤也是必要的。

2评论不是用于长时间讨论的,请点击此处进入聊天室 - Thomas Ward
我仍然希望Windows成为我的主要启动操作系统。这个修复方法还有效吗?我应该如何选择要启动的操作系统?按F11键吗? - Jeff
这对于主要的操作系统没有影响。这是在GRUB的设置中控制的,超出了这个答案的范围。这个答案只关注修复损坏的GRUB。 - Scott Severance
@ScottSeverance 很不幸的是,还有其他问题本应在范围内但却被标记为与此问题重复而关闭。我想这可能是过于雄心勃勃的审查制度所造成的。 - Jeff
@Jeff:我已经好几年没有双启动了,所以对细节不太清楚,但肯定有办法配置GRUB默认启动哪个操作系统。你可以在谷歌上搜索GRUB配置的详细信息,我早就忘记了。我相信你也可以配置Windows引导程序来链式加载GRUB。你需要在谷歌上搜索相关内容,因为我从未尝试过这样的操作。 - Scott Severance
@ScottSeverance 谢谢。我现在已经在做这件事了。我只是想发泄一下对过度雄心勃勃的管理的不满。 - Jeff
3@ScottSeverance 我从你的个人资料中看到你住在DFW地区。你有没有考虑过开设课程或现场教学,让更多的人深入了解Linux呢? - M J
我很乐意这样做,但是我在DFW地区不认识任何Linux的人,而且也没有时间从零开始组建一个团体。我从未调查过这个地区可能已经存在的资源。 - Scott Severance
3这些问题永远不会过时 :D - 当处理EFI时,你可能需要安装grub-efi-amd64,如果你使用的是安全启动,你会想要使用grub-install --uefi-secure-boot。这也在https://superuser.com/a/376471/197980中有详细说明。 - Raffael
嗨,你还在吗?我已经尝试了三次,花了大约一个半小时的时间,但是还是无法恢复我的Ubuntu系统;它总是默认启动Windows,当我按住F12键时,只有我的USB驱动器和Windows引导程序可供选择。我还能做些什么呢?这真让我发疯。 - jdc
@jdc,我建议你提出一个新问题,引用这个问题,并详细介绍你的设置以及你尝试过的内容。也许这里有人对现代的UEFI系统非常熟悉,能够提供帮助。 - Scott Severance
我猜这个问题可能会因为重复而被关闭,不过我想这是下一步的进展。谢谢你的回复。 - jdc
@jdc:这些指示对很多人都有效,所以假设你已经正确地按照它们操作了,那么你可能遇到了不同的潜在问题。 - Scott Severance
@ScottSeverance:这就是我担心的,害怕我的真正问题没有解决办法。看到那么多人点赞,我以为问题可以解决了,但是我已经按照你的方法尝试了三次,却没有运气。 - jdc
这个解决方案给了我一个错误:文件/boot/grub/../normal.mod未找到,进入救援模式,所以我尝试了下面的修复工具。 - user10089632
3此解决方案也适用于具有 BIOS(即非 UEFI)的 Windows 10 计算机。您可以使用此提示回答关于您所使用的是哪个的问题-https://www.thewindowsclub.com/check-if-uefi-or-bios。 - okolnost
至少对我来说,chroot到/mnt失败是因为/bin/bash不可用。根本问题是,我看不到解决办法的是,以/mnt为根目录的系统必须包含/bin/bash、/lib和/lib64。但是,这些文件系统的绑定失败,因为设备上没有可用空间。 - Paul A.
1@PaulA.: 如果你缺少 /bin/lib 或者 /lib64,只需将它们绑定挂载:mount --bind /bin /mnt/bin 等等,或者更好的做法是找出它们在你系统中的位置并挂载正确的目录。 - Scott Severance
1我只想说,截至2021年5月,这个方法仍然有效。我的旧戴尔笔记本安装了双系统,Windows 10和Ubuntu 20.04。由于Windows更新导致grub引导菜单丢失,这个方法帮助我恢复了grub菜单。从第8步开始的操作是必要的。 - Nicolas Molano
现在是2021年,这个答案仍然对我有帮助 :) 这既是好事也是坏事,坏的一面是问题仍然存在... - minisaurus
如果你已经删除了EFI分区,你只需要重新创建它:https://askubuntu.com/a/743098/933016 然后你就可以安装grub并加载了。 - James Bond
我收到了"/mnt/sys: mount point does not exist"的错误信息。(同样适用于proc、run和dev)。这是否表示出现了问题? - Kvothe
@Kvothe:听起来好像有些问题,但没有更多的背景信息很难说清楚是什么问题。 - Scott Severance
@ScottSeverance,/dev/sda2 包含了文件夹 boot-savlost+foundupperwork。这是它应该包含的内容吗? - Kvothe
听起来sda2不是你需要的分区。你需要弄清楚你需要哪一个。请参考第二步。 - Scott Severance
2这在我克隆磁盘到新的替代设备后几乎成功了。我也使用EFI进行双重引导。在执行grub-install时出现了一个警告:grub-install: warning: EFI variables are not supported on this system.. 根据这个答案https://unix.stackexchange.com/a/693111 我必须在第4步中使用--rbind标志而不是--bind,所以命令是for i in /sys /proc /run /dev; do sudo mount --rbind "$i" "/mnt$i"; done - kprist
非常好的教程,需要第8步。@kprist的评论也很有用!成功恢复了LUKS加密的LM引导。Scott Severance,请您能否添加kprist的回复?我还遇到了"EFI变量不受支持"的问题,对于LUKS,我们需要先解密分区(显而易见但仍需注意),以便能够显示加密卷。 - Aubergine
1只是想对@ScottSeverance和@kprist表示感谢。这真的救了我的一天。 在我的情况下,我还必须使用--rbind,并且运行第8步是必需的。 - SergioLeone

Windows安装程序不关心系统中的其他操作系统。因此,它会覆盖主引导记录的自身代码。幸运的是,解决方案也很简单。

您需要修复MBR。请按照以下步骤进行操作:

使用Ubuntu的live USB/CD启动计算机。 使用boot-repair工具来修复问题。

在使用live USB/CD启动后,在终端中运行以下命令:

sudo add-apt-repository ppa:yannubuntu/boot-repair && sudo apt-get update
sudo apt-get install -y boot-repair && boot-repair

使用“推荐修复”。

enter image description here

更多信息 - https://help.ubuntu.com/community/Boot-Repair

2你的意思是微软人员故意这样做的吗?另外,使用Windows 7时可以进行双系统启动,这岂不是与你所说的"Windows安装程序不关心系统中其他操作系统"这一说法相矛盾了吗? - Shagun Sodhani
4Windows经常破坏grub,这是一个非常常见的问题,我自己也遇到过。答案仍然有效,应该能解决这个问题。 - damien
11你先安装了Windows 7,然后再安装了Linux。所以Linux识别Windows,而Windows并不识别Linux。尝试重新安装Windows 7,你就会明白我的意思了。 - Web-E
当你有加密分区(luks)时,请不要这样做,它会搞乱它。 它还会使用apt-get重新安装GRUB - 不知道为什么会这样做。 - Meng Tian
它根本不会对luks分区产生任何影响,因此不会搞乱它们。只有在需要清除GRUB时才会使用apt-get。 - LovinBuntu
对于这个问题,两种解决方案都有效,但这个方法对于没有任何知识的新手来说非常有用,可以帮助他们解决问题。在执行操作时,我没有丢失任何数据,但是,请注意:在执行操作之前,请确保备份所有的数据。这是一个很好的习惯,值得推荐。 - AzkerM
值得注意的是,Boot-Repair只适用于以EFI/UEFI模式启动的系统,这是在您计算机的BIOS中设置的。如果您的Ubuntu/Linux设置为以传统模式启动,Boot-Repair将无法工作。 - Fuzzy Analysis
2引导修复非常支持传统模式,也许您需要以传统模式引导Live CD/USB @fuzzyanalysis :) - Web-E
@Shagun 我同意。我已经删除了它,因为它与其他正确答案完全无关。 - Mikel
刚刚在14.10版本尝试了这个。apt-get update显示了一堆404 Not Found错误,安装失败并出现无法找到包boot-repair的提示。 - Dan Dascalescu
14.10目前无法使用,请参阅https://launchpad.net/~yannubuntu/+archive/ubuntu/boot-repair - Web-E
“推荐修复”在使用Ubuntu 16.04可启动的USB来拯救一个注定要被火焰和绝望永远吞噬的Ubuntu 14.04安装时表现得非常出色。 - Krøllebølle
准确地说,“Windows安装程序对系统中的其他非微软操作系统不关心”,因为它会检测并列出所有可用的DOS和Windows操作系统。 - phuclv

从活动的Ubuntu USB闪存驱动器或CD引导 和
按照以下步骤在Ubuntu上安装Boot-Repair

打开终端并运行以下命令

sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install boot-repair

安装完成后,如果您使用Gnome桌面环境,可以从“系统”->“管理”->“Boot-Repair”菜单中启动它;如果您使用Unity桌面环境,则可以在Dash中搜索“boot-repair”来启动它。然后按照以下截图进行操作: 方法1
  • 点击高级选项

Initial screen

  • 请在下面显示的选项上打勾

advanced option

将选项卡更改为“Grub位置选项卡”,并勾选图中显示的选项。

enter image description here

按下“应用”并重新启动系统

方法2

  • 选择第一个屏幕截图中显示的推荐启动修复选项

文档:


Web-E已经给出了这个答案。也许可以改进那个答案?我已经在评论中解释了为什么它不起作用。 - Dan Dascalescu
2这种方法对我来说非常有效,特别是在Windows 10更新覆盖GRUB并破坏自己的引导加载程序之后。按照这个步骤,我成功地恢复了Windows和Linux。在我的情况下,我使用的是Linux Mint 18.1,引导修复菜单看起来有些不同,但一切都正常工作。谢谢! - TheBigH

在基于EFI的系统上(例如大多数预装Windows 8或更高版本的系统),Windows有时会更新其引导加载程序或将其重置为默认的引导加载程序。这在重新安装操作系统或进行重大系统更新(例如升级到最新的Windows版本)时特别常见。请注意,Windows不太可能实际擦除EFI计算机上的任何GRUB文件。启动Ubuntu所需的一切仍然存在;只是被绕过了。在这些情况下,完全重新安装GRUB是过度的,事实上这样做还有(小)可能会产生新问题。
因此,在这些情况下,我建议将GRUB(或您喜欢的任何引导加载程序或引导管理器)重置为默认设置,而不是重新安装GRUB。有几种方法可以做到这一点,包括:
  • EasyUEFI - 调整启动顺序的最简便方法是使用 EasyUEFI,这是一个免费(基本版)的第三方图形界面工具,用于管理EFI启动顺序。操作很简单 - 在启动选项列表中找到ubuntu条目,并将其移到列表的顶部。下次重新启动时,GRUB应该会显示出来。(如果您使用的是除GRUB之外的其他引导程序,则需要定位其条目。)
  • bcdedit - Windows的bcdedit工具可用于设置GRUB为默认启动顺序。在管理员命令提示符窗口中键入命令bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi就可以实现这一点;然而,如果您的计算机启用了安全启动,那么需要改为使用bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi。实际上,即使没有使用安全启动,后一条命令也通常可以工作,所以我建议首先使用这个命令。请注意,有一种比我提供的语法稍有不同的高级Windows Shell工具,但我不记得详细信息。
  • 一次性引导到Ubuntu - 大多数EFI提供内置的引导管理器,通过在系统启动过程中按下功能键、Esc或Enter键来访问。很有可能,在此引导管理器菜单中会显示要引导Ubuntu的ubuntu条目,使您能够引导到Ubuntu。或者,您可以引导到一个Ubuntu紧急介质上,比如以“试用后再安装”模式引导的安装程序。无论哪种方式,您都可以使用efibootmgr来调整启动顺序:
    1. 键入sudo efibootmgr以查看引导条目。
    2. 注意当前的BootOrder行。
    3. 查找ubuntu的条目,注意其Boot####编号。
    4. 键入sudo efibootmgr -o xxxx[,yyyy,zzzz,....]来更改启动顺序,将xxxx设置为Ubuntu的编号。之后的内容可能并不是非常重要,尽管我注意到如果Windows不在列表中,它很有可能会将自己重新添加到启动顺序的开头。因此,您可能应该确保Windows在列表中,并且最安全的做法可能是重新排序列表,以便所有原始条目都在那里,只是将ubuntu条目移到列表的顶部。
  • 固件设置实用程序 - 一些EFI的设置实用程序允许您调整启动顺序。具体细节因EFI而异,所以我不会详述,但您可以在设置实用程序中寻找此类选项。

这些过程还有其他变体,例如在EFI Shell中使用bcfg,在macOS中使用bless,使用我的rEFInd进行一次性引导等。不过,我会从EasyUEFI开始;这可能是最简单的解决方案。尽管如此,有时Windows坚持在每次启动时将自己设为默认操作系统,而报告显示bcdedit可能更好地处理了这个问题。

请注意,上述内容都不适用于BIOS模式安装;然而,由于大多数搭载Windows 8或更高版本的计算机以EFI模式启动,BIOS模式安装正变得越来越少见,所以在许多情况下,最好通过EFI方式处理问题,而不是盲目重新安装GRUB。


4手动一次性启动Linux(在我的情况下是Fedora 28),通过EFIs内置的引导管理器,我可以使用efibootmgr重新排序启动顺序(正如Rod所描述的->谢谢!),这是由于Win10更新而混乱了。之后,GRUB引导管理器出现了,就像更新之前一样,所以我可以确认提供的解决方案对我有效。我找不到EasyUEFI的基本版本,只找到了一个试用版的非免费专业版。 - antiplex
这应该是被接受的答案。 - Déjà vu

只需在Windows 7中安装easyBCD并执行以下操作:
添加新条目 > Linux/BSD > (选择)Grub2 > (点击)添加条目
然后,您可以在Windows 7的引导加载程序中选择Ubuntu,进入Grub2(之前的引导加载程序)。

3这些指令本身并不能恢复Grub引导程序 - 当我尝试使用它们时,它们在Windows中添加了一个额外的启动选项,选择后会重新启动我的机器,然后进入grub>提示符。因此,我们需要进一步的步骤来指导接下来该怎么做。 - therobyouknow
1easyBCD允许我添加和删除启动选项,这些选项可以在Windows引导程序和BIOS中看到,但它们从来没有起作用,因为easyBCD依赖于某种自动化魔法来查找Linux分区... 当我的Linux分区位于单独的硬盘上时,它就不起作用了。 - Fuzzy Analysis
这个能处理Win 11吗? - toha
它不适用于以EFI模式安装的Windows 11。 - Amin Ya

现在有一个更简单的解决方案:
1. 重新启动电脑,进入BIOS选项(通常是F2,或者有时是F11)。 2. 进入“引导”菜单,选择“引导设备优先级”。 3. 检查是否“Windows引导管理器”位于主引导驱动器(通常是SATA HDD...或IDE HDD...)之上。如果是的话,请将引导磁盘的优先级调整到高于Windows引导管理器。 4. 保存BIOS选项并退出(通常是F10)。
这个方法已经在一台三星Series 7 Chronos笔记本电脑上进行了测试,该电脑同时安装了Windows 8和Ubuntu 13.10,关闭了安全引导,启用了UEFI和传统引导。

这最终对我来说是最干净的选择。虽然需要多按几下键盘,但嘿,它有效。我的设备有一些遗留的和UEFI引导的混合。如果用户经常启动某个操作系统而不是其他各种操作系统,从长远来看,这样做可能更快(也更安全)。 - Fuzzy Analysis
这对我来说也行,Windows 10自动更新后。 - luis_js
当我从Windows 10中删除Ubuntu时,这个解决方案对我起了作用。 - Vikas Gupta
如何从Windows 10切换到Ubuntu? - Hamendra Sunthwal

Boot-Repair对我很有效。这是一个非常非常容易使用的图形化应用程序,您不需要使用命令行,只需点击一个按钮:)

所有可用的修复选项都在Ubuntu文档中进行了描述,并且有一个单独的页面说明如何启动Boot-Repair(通过创建可引导的磁盘或将其安装在现有的Ubuntu Live磁盘上)以及如何使用它。

只需启动Ubuntu Live CD,安装Boot-Repair并运行它即可。


虽然这样做可能会更方便,但如果有一个更简单的方式来获取引导修复程序就好了。与其在谷歌上寻找其他工具进行安装,还不如直接设置一个“chroot”修复来得快速。 - Scott Severance

当GRUB损坏时,用户通常无法访问系统,因此必须从实时会话(实时CD或实时USB)中进行修复。
导致GRUB损坏的原因有很多:Windows在MBR上写入、DRM阻止GRUB正确安装、安装程序错误、硬件更改等等。 如Scott最初提出的更新GRUB通常是不够的,而像Marco提出的重新安装GRUB更有效,但仍然有各种情况需要其他调整(添加内核选项、取消隐藏GRUB菜单、更改GRUB选项、选择正确的主机架构等)。 修复GRUB的其他困难包括使用chroot和选择正确的分区/磁盘。
所有这些都已经在一个小型图形工具中变得简单易用:Boot-Repair。它将集成到Ubuntu 12.04 CD中以便更容易使用,但对于现在需要它的人来说,已经有一些集成了它的发行版:Ubuntu-Secured-Remix(集成了Boot-Repair的Ubuntu CD)、Boot-Repair-Disk(启动时运行Boot-Repair的CD)...
希望这能有所帮助。

Scott和Web-E提供的答案已经足够好,并且在很多次中都帮了大忙。但是有很多情况下,启动修复工具无法修复grub,原因可能与i386和amd64平台相关,或者由于grub找不到efi目录而导致。

我解决问题的方法已经用了超过10次,那就是手动清除旧的grub安装并安装一个新的。

所以首先按照Scott的答案执行前6个步骤,如果第5步出错可以跳过。

  1. 从光盘或U盘启动,选择“试用Ubuntu”模式。
  2. 确定您的主分区的分区号。可以使用sudo fdisk -lsudo blkid或GParted(默认情况下已安装在试用会话中)来帮助您。在本答案中,我假设它是/dev/sda2,但请确保使用正确的分区号!

    如果您的主分区位于LVM中,设备将位于/dev/mapper/,很可能是/dev/mapper/{volume}--{os}-root,其中{volume}是LVM卷的名称,{os}是操作系统。执行ls /dev/mapper以获取确切的名称。

  3. 挂载您的分区:

    sudo mount /dev/sda2 /mnt  #将sda2替换为第2步中的分区
    

    如果您有单独的/boot/var/usr分区,请重复第2步和第3步,将这些分区挂载到/mnt/boot/mnt/var/mnt/usr。例如:

    sudo mount /dev/sdXW /mnt/boot
    sudo mount /dev/sdXY /mnt/var
    sudo mount /dev/sdXZ /mnt/usr
    

    sdXWsdXYsdXZ替换为相应的分区号。

  4. 绑定挂载其他必要的内容:

    for i in /sys /proc /run /dev; do sudo mount --bind "$i" "/mnt$i"; done
    
  5. 如果Ubuntu是以EFI模式安装的([如果不确定,请参考此答案][efi]),使用sudo fdisk -l | grep -i efi或GParted查找您的EFI分区。它将具有一个标签为EFI的分区。挂载此分区,将sdXY替换为您系统的实际分区号:

    sudo mount /dev/sdXY /mnt/boot/efi
    
  6. chroot进入您的Ubuntu安装:

    sudo chroot /mnt
    
然后按照以下步骤进行操作:
1. 配置所有待处理的软件包。 ``` sudo dpkg --configure -a ```
2. 修复损坏的软件包。 ``` sudo apt install -fy ```
3. 移除当前的 grub。 ``` sudo apt purge -y grub*-common grub-common:i386 shim-signed ``` 这可能会给出一个警告,表示您的设备将没有引导加载程序,并且可能无法下次启动。请继续并接受。
4. 安装 grub-pc。 ``` sudo apt install -y grub-pc ``` 运行此命令后,它会要求您指定当前的 `sdXY` 来安装引导加载程序。使用 `sudo fdisk -l` 命令找到您当前的操作系统所在位置。它将被标记为 `Linux`。使用 Tab 键导航该窗口,并使用 Space 键选择一个选项。
5. 如果一切顺利,grub 将正确安装。您还可以运行 `sudo grub-update` 进行双重检查。
如果问题仍然存在,你可以阅读Arch的维基来真正了解关于grub的知识,以解决其他各种问题。(是的,对Ubuntu也有帮助!)

Scott Severance的回答是有效且详细的,但有一种解决方法不需要外部启动设备,因此无需识别和手动挂载所有Ubuntu分区以进行chroot。
在Windows 10中,您可以使用高级恢复来选择要从中引导的设备(分区?)。
转到“设置”并选择“更新和安全”:

enter image description here

去“恢复”页面:

enter image description here

从“高级启动”中选择“立即重启”。

enter image description here

然后选择“使用设备”,所有的启动选项都会呈现给你。选择“ubuntu”分区,你的电脑就会从那个分区启动。
一旦进入我平常使用的Ubuntu环境,我尝试运行“grub-update”,但没有任何变化。
然后我找到了我的“/boot/efi”分区,它是“/dev/nvme0n1p1”,然后运行了“sudo grub-install /dev/nvme0n1p1”和“sudo update-grub”。
这样多次恢复了我的主引导记录,因为似乎有一个新的Windows 10政策,会在小型更新中覆盖引导信息。

我有些困惑。你提到了MBR和UEFI:哪一个被用于安装呢?我猜应该是UEFI,否则它可能不会显示Linux的启动选项。但是,它应该不需要去操作MBR。可能只有在Grub2被安装在你的Ubuntu分区而不是MBR时才有效。 - DanMan
抱歉,我的错。我之前使用了MBR这个术语,实际上我是指通用的引导信息。我已经从描述中删除了MBR。 - timbo