安装Ubuntu后无法启动Windows,如何修复?

我在我的电脑上安装了Windows,然后又安装了Ubuntu。然而,现在我无法启动我的Windows安装。
我该怎么办才能解决这个问题?

你能提供更多细节吗?是指GRUB菜单中有Windows选项但选择后无法启动,还是GRUB菜单本身没有关于Windows 8的条目? - sai siva sundar
获取Ubuntu Grub菜单当选择Windows 8 /sda1/时按下ctrl+alt+del 它会显示如下情况 - Vishnu Bathala
请提供由Boot-Repair工具提供的URL。 - LovinBuntu
@LovinBuntu,这是最新的在修复Ubuntu引导后的pastebin链接 - iammilind
1这纯属无中生有,但或许值得一试;尝试启动Ubuntu,打开Gparted,选择你的Windows分区,右键点击并选择检查。这将运行磁盘检查并尝试修复错误。在修复非主分区引导问题时,此方法曾经对我有所帮助。它可能不会产生任何结果,但也不会造成任何损害。 - sturlabragason
@DrA7,当我尝试右键单击/dev/sda3时,“检查”选项显示为禁用状态。它只出现在sda1(fat32-SONYSYS)sda2(ntfs-Windows RE tool)sda6(ntfs-Recovery)中。然而,之后重新启动也没有帮助。这里是sda1sda2, sda6的 Gparted 结果。 - iammilind
我相信这表明/dev/sda3/是当前正在使用的分区。你可以尝试使用LiveCD/USB并从那里进行检查。我还想指出,通常当一个问题看起来过于复杂时,往往是因为一个关键因素被误解了。也许你可以根据当前的发现重新评估你的基本假设。 - sturlabragason
按住Shift键启动 - Maythux
隐藏菜单通常只适用于仅安装Ubuntu的设置,@Arsian Archer,你可能遇到了配置问题。Windows 8通常设置为使用UEFI,你确定你进行了UEFI安装吗? - Erkin Alp Güney
如何知道我是否使用UEFI - Arshian Archer
3大多数人都会忽略被接受的答案并使用karel更好的答案 - Zanna
我在戴尔电脑上安装了一个原始设备制造商(OEM)的Windows系统,带有所有安全启动功能。在切换到AHCI模式、调整主分区大小并在剩余空间上安装Ubuntu后,我切换到传统引导模式,现在像OP一样,我的笔记本电脑在没有任何选项或警告的情况下启动Ubuntu。然而,BIOS引导仍然有“Windows引导管理器”作为一个选项,可以加载Windows系统。所以我成功地解决了这个问题,没有遇到任何GRUB引导程序的神秘情况。希望这对其他人有所帮助。 - Ufos
20个回答

GRUB菜单不显示

如果计算机在启动时自动进入Ubuntu,而根本没有显示GRUB菜单,有时您可以在启动时按下制造商的BIOS/UEFI键,并在固件菜单中选择所需的操作系统。常用的键包括Esc、Delete、F1、F2、F10、F11或F12。在平板电脑上,常见的按钮是音量增加或音量减少。在启动过程中,通常会出现一个提到这个键的屏幕。如果没有这样的屏幕,或者屏幕过快而无法看到它,请查阅制造商的网站。*

如果在启动时GRUB菜单未出现,请尝试以下方法:在计算机启动时,在主板/计算机制造商的标志性画面之后立即按住Shift键,这将会显示GNU GRUB菜单屏幕(如果使用的是BIOS)。如果使用的是UEFI,则需要按下Esc键(可能需要多次按下)才能进入GNU GRUB菜单屏幕。有时,制造商的标志性画面是Windows引导加载程序的一部分,因此开机后会直接进入GNU GRUB菜单屏幕,此时按下Shift键是不必要的。
如果在启动时GRUB菜单未出现,请尝试以下解决方法: - 如何在启动时进入GRUB菜单? - 在安装Ubuntu 15.10与Windows 10双启动后,启动菜单未显示

引导修复

从Ubuntu打开终端并输入:

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

打开“Boot Repair”应用程序,选择高级选项 -> 其他选项选项卡 -> 修复Windows引导文件。引导标志应该放在安装Ubuntu的同一个分区上。可以通过内置在Ubuntu中的磁盘应用程序来识别安装了Ubuntu的分区。

enter image description here

如果你无法选择“修复Windows引导文件”选项,因为它是灰色的,可以参考this answer

Rescatux

Rescatux 是一款免费的可启动 live CD/USB,可以修复 GRUB 和 Windows 引导程序。Rescatux 采用图形界面,提供操作系统救援任务的菜单。如果你的硬盘采用 MBR 分区格式,你可以选择“恢复 Windows MBR(BETA)”选项来修复 Windows 引导程序。如果你的计算机采用 UEFI 固件,你可以在 UEFI 引导选项中进行选择。

引导选项:

  • (>=0.41 beta 1) 更新 UEFI 排序
  • (>=0.41 beta 1) 创建新的 UEFI 引导项
  • (>=0.41 beta 1) UEFI 分区状态
  • (>=0.41 beta 1) 伪装微软 Windows UEFI
  • (>=0.41 beta 1) 隐藏微软 Windows UEFI
  • (>=0.41 beta 1) 重新安装微软 Windows EFI
  • (>=0.41 beta 1) 检查 UEFI 引导

GRUB 选项:

  • (>=0.40 beta 11) 简易GNU/Linux启动修复
  • 恢复GRUB和GRUB2
  • (>=0.31 beta 4) 更新任何GRUB2菜单
  • 更新Debian/Ubuntu GRUB菜单

Windows选项:

  • 恢复Windows MBR(测试版)
  • 清除Windows密码
  • (>=0.31 beta 4) 将Windows用户提升为管理员角色
  • (>=0.41 beta 1) 重新安装Microsoft Windows EFI
  • (>=0.31 beta 4) 解锁Windows用户

密码选项:

  • 更改GNU/Linux密码
  • 重新生成sudoers文件
  • 清除Windows密码

专家工具:

  • Boot-Repair
  • GParted
  • OS-Uninstaller
  • Clean-Ubiquity
  • PhotoRec
  • TestDisk

在此输入图像描述
Rescapp是一个很好的向导,将引导您完成救援任务。


如何在Ubuntu上制作Rescatux的live USB
制作一个Rescatux的live USB是一个很方便的方法,可以帮助您在需要时修复和恢复系统。以下是在Ubuntu上制作Rescatux live USB的步骤:
1. 首先,确保您已经下载了Rescatux ISO文件。您可以从官方网站或其他可靠的来源获取该文件。
2. 接下来,插入一个空白的USB闪存驱动器到您的计算机中。
3. 打开终端,并使用以下命令查找您的USB设备的路径: ``` sudo fdisk -l ```
4. 在终端中运行以下命令,将Rescatux ISO文件写入USB设备: ``` sudo dd if=/path/to/rescatux.iso of=/dev/sdX bs=4M status=progress ``` 请将`/path/to/rescatux.iso`替换为您下载的Rescatux ISO文件的实际路径,并将`/dev/sdX`替换为您的USB设备的路径。
5. 等待命令完成,这可能需要一些时间,具体取决于您的系统性能和ISO文件的大小。
6. 当命令完成后,您将拥有一个可启动的Rescatux live USB。您可以使用此USB来引导计算机并访问Rescatux的功能。
请注意,制作live USB时会格式化USB设备上的所有数据,请确保在执行此操作之前备份重要文件。此外,确保您具有足够的权限来执行上述命令。
希望这个指南对您有所帮助!如果您遇到任何问题,请随时向我们寻求帮助。
  1. 插入一个USB闪存驱动器,并使用GParted应用程序检查闪存驱动器上是否已启用引导标志。卸载USB闪存驱动器。打开GParted并从驱动器菜单列表中选择USB闪存驱动器。从GParted菜单中选择:分区 -> 管理标志 -> 选中引导

  2. 非常重要的是要验证您要将Rescatux实时USB安装到的设备确实是您的闪存驱动器,以免覆盖任何系统或个人文件,可能导致您的操作系统无法启动。在Ubuntu中,您可以使用Disks应用程序找到闪存驱动器的设备名称。

  3. 卸载USB分区设备。假设USB分区设备是/dev/sdc1

     sudo umount /dev/sdc1 # 将sdc1替换为您的USB驱动器的分区名称
    
  4. 使用cd命令切换到下载的Rescatux iso文件所在目录的路径。

  5. 将Rescatux iso文件写入USB闪存驱动器。在以下命令中,将rescatux_0.xxxx.iso替换为您下载的Rescatux iso文件的名称。

     sudo dd if=rescatux_0.xxxx.iso of=/dev/sdc # 这个命令也适用于Windows子系统Linux 2
     sudo sync  
    

我还能使用内置的启动磁盘创建应用程序制作 Rescatux live USB。

Windows 10工厂重置修复Windows引导加载程序

source

打开设置

点击“开始”菜单,在左下角选择齿轮图标以打开设置窗口。你也可以从应用列表中选择设置应用程序。在设置中,点击“更新和安全性”继续。

选择恢复选项

点击“恢复”选项卡,在“重置此电脑”下选择“开始”。

保存或删除文件

到这一步,你有两个选择。你可以选择保留个人文件并仅删除已下载的应用程序和设置,或者你可以擦除所有内容并从头开始。每个选择还会给你一个额外的设置修改选项。

如果你选择“保留我的文件”,应用程序和设置将恢复到电脑初始状态。你可以通过点击“更改设置”链接并关闭该选项来取消此设置。如果你选择“删除所有内容”,也有一种方法可以在保留应用程序和设置的同时删除个人文件。点击“更改设置”链接,将数据擦除选项切换为开启状态。
重置你的计算机
一旦你决定从计算机中删除什么,点击“下一步”,Windows会在你做出最终决定之前告诉你将会被删除的内容。如果你选择了“保留我的文件”,你可以查看将随重置一起被删除的应用程序列表。
最后,点击“重置”来实际执行操作。你的计算机将重新启动,在几分钟后再次启动。当你回到Windows 10时,你会发现你选择要删除的内容已经从机器上清除了。如果你备份了你的文件,现在可以将它们恢复到机器上。

我已经双系统使用了很长时间,但我从来不知道这两个方法,我总是使用Windows修复盘。这个回答真的非常有帮助。 - cat
2需要注意的是,最近版本的grub由于某种原因(我想是出于安全考虑?)禁用了os_prober功能。因此它无法检测到Windows引导程序。我不得不在/etc/default/grub中添加一行代码来启用它:GRUB_DISABLE_OS_PROBER=false,然后运行sudo update-grub并重新启动。现在,我有一个grub菜单,可以选择启动Windows。非常简单的解决方法。 - mchid

我将做出一些假设:
  1. Windows已安装并配置为通过UEFI引导。
  2. Ubuntu已安装并配置为通过UEFI引导。
  3. 您当前在启动时看到grub菜单。
如果这些假设中有任何一个是错误的,那么以下建议将对您无济于事(尽管也不会造成任何损害):
创建一个名为/boot/grub/custom.cfg的文件(通过运行sudo -H gedit /boot/grub/custom.cfg)并添加以下内容:
#This entry should work for any version of Windows installed for UEFI booting

menuentry "Windows (UEFI)" {
 search --set=root --file /EFI/Microsoft/Boot/bootmgfw.efi
 chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

复制并粘贴以上内容到弹出的Gedit窗口中,然后保存并退出Gedit。
重新启动计算机,您应该看到一个名为“Windows(UEFI)”的条目,如果选择它,则Windows应该能够启动。如果不起作用,请运行引导信息脚本(http://bootinfoscript.sourceforge.net/),并发布生成的RESULTS.txt文件,以便我能够提供恰当的建议所需的信息。

1感谢您的回复,我通过安装Grub工具轻松解决了这个问题。 - Vishnu Bathala
2我之前有一个Mint19和Windows 10的双系统,一直运行得很好。出于某种原因,我决定用Ubuntu 18替换掉Mint19。安装完成后,我只能启动Ubuntu,我的Windows 10无法启动了。我在执行脚本后得到了result.txt文件。我的Google Drive中有RESULTS.txt文件,链接如下:https://drive.google.com/file/d/1JAOcZaEGZZbV4q96ADw9cqDnaK_bNLwI/view?usp=sharing - masiboo
这个给了我一个错误:找不到设备:/EFI/Microsoft/Boot/bootmgfw.efi。 - StrugglingProgrammer
我现在的GRUB菜单中没有Windows引导选项,但它无法正确启动。错误信息显示为“无效签名。按任意键继续...”。 - Jamie Hutber
谢谢。这对我有用,在运行了引导修复后,就像@karel的回答中所说的那样。 - effel

没有办法撤销对Windows的分区更改。您将需要重新安装或恢复Windows,然后重新安装Ubuntu。
首先,尝试运行Boot-Repair(info)并查看是否有所帮助。要运行此程序:
  1. 从Ubuntu的光盘或USB启动。

  2. 在终端中逐行输入以下命令:

    sudo add-apt-repository ppa:yannubuntu/boot-repair
    sudo apt-get update
    sudo apt-get install boot-repair
    
  3. 在Dash中搜索Boot-Repair并启动它。

    enter image description here

使用Boot-Repair修复您的计算机,只需点击“推荐修复”按钮。如果成功了,您就完成了。
如果Boot Repair没有起作用,使用Windows恢复光盘进行修复(向您的电脑制造商索取一张)。
1. 从恢复光盘启动。您应该看到这个界面。 [图片链接1](https://istack.dev59.com/FJG6X.webp)
2. 打开命令提示符应用程序,输入`bootrec /fixmbr`。 [图片链接2](https://istack.dev59.com/V8DGJ.webp) (图片来源:HowtoGeek)
3. 关闭窗口,这次选择“启动修复”。等待过程完成,通常需要30分钟至2小时。
如果Windows成功修复,您就完成了。如果没有修复成功,您将需要使用Windows安装光盘重新安装Windows。
如果你没有Windows安装光盘,你可以启动Ubuntu的live DVD/USB,并安装一个与Windows引导程序功能相当的引导程序。
sudo apt-get update   
sudo apt-get install lilo  
sudo lilo -M /dev/sda mbr  

Lilo安装后会给你一个警告,但是你可以忽略它,因为当它作为Windows风格的引导程序使用时,Lilo能够正常工作。
接下来,在安装或恢复Windows之后,您需要删除Ubuntu分区。在Windows中使用磁盘管理工具识别并删除它。

enter image description here

之后,以同样的方式重新安装Ubuntu。

3引导修复表示,它的推荐修复应该可以解决在安装Ubuntu后无法启动Windows的问题。 - damien
哎呀,忘记了。谢谢你提醒我! - Emerson Hsieh
谢谢你的回答。我成功地重新启动了Windows(Ubuntu的磁盘分区工具没有起作用)。我只有一个问题,就是无法找到Ubuntu的分区,所以无法删除它们。 现在当我重新启动电脑时,GRUB已经消失了,默认运行Windows。在我的磁盘分区工具中,有4个磁盘:
  1. OS (C:) 磁盘,占用20%的空间(我猜这是Windows的部分)。
  2. 3个磁盘,容量分别为17GB、3GB和8GB(我猜这些是在分区过程中创建的,但上面没有任何内容)。我应该全部删除它们吗?还是保留它们?我应该重新安装Linux,但使用这些分区吗?
- Mike
回到你的问题:OS(C :) 绝对是Windows分区。 你告诉我的3个分区并不是空的,只是Windows无法读取它们。 要验证这些是否是Ubuntu分区,请打开Windows资源管理器,看看你是否只能看到OS(C :)。 如果你只能看到OS(C :),那么这些就是Ubuntu分区。 你可以安全地删除它们。 - Emerson Hsieh
不行。那些分区里的东西可能已经损坏了,所以我建议如果你想重新安装Linux的话,最好是删除并重新创建这些分区。 - Emerson Hsieh

如果操作系统以不同的模式安装,双启动Windows和Ubuntu将无法工作。如果您的Windows是以BIOS模式安装的,建议您以BIOS模式安装Ubuntu,但如果它是以UEFI模式安装的,则与Ubuntu相同。确定您正在运行UEFI还是BIOS的最简单方法是查找名为/sys/firmware/efi的文件夹。如果您的系统使用BIOS,则该文件夹将不存在。
如果您在同一驱动器上使用GPT分区以传统模式安装了Ubuntu,您可以使用Boot Repair的“高级选项”来卸载grub-pc并安装grub-efi-amd64。这将把Ubuntu的安装从BIOS引导转换为UEFI引导,与大多数预装Windows的最新制造的笔记本电脑使用相同的固件。
将Ubuntu转换为UEFI模式
开始启动Boot-Repair,并选择“高级选项” -> “GRUB位置”选项卡。 如果你没有看到"单独的/boot/efi分区"选项,这意味着你的电脑没有任何UEFI分区。 如果你看到"单独的/boot/efi分区"选项,请在其左侧的复选框上打勾,然后点击右下角的"应用"按钮。 将你的BIOS设置为以UEFI模式启动硬盘。具体调整此设置的方法取决于计算机的型号,但通常该设置位于BIOS/UEFI设置实用程序的"引导"选项卡下的引导优先级设置中。
有关将Ubuntu转换为UEFI模式的更多信息,请参阅https://help.ubuntu.com/community/UEFI中关于将Ubuntu转换为UEFI模式的部分。
grub引导加载程序也可以从UEFI转换为BIOS。Linux可以在BIOS模式下从GPT磁盘正常启动。请参阅此问题:从EFI转换为BIOS启动模式

引导修复将会处理这个问题。

首先打开一个新的终端,然后输入以下命令:

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

Boot-Repair

查看也 此工具的参考和使用说明

安装Ubuntu时未检测到已安装的Windows操作系统。默认的Ubuntu软件源中的os-prober可以检测系统上可用的其他操作系统,并在终端输出结果。如果os-prober无法工作,请检查命令sudo fdisk -l是否能够找到Windows分区。
如果找到了Windows分区,则输入sudo update-grub。sudo update-grub会更新GRUB引导加载程序并纠正不正确的条目。这个命令解决了我的问题,如下所示。
sudo update-grub && sudo reboot会更新GRUB引导加载程序并重新启动。
我在Windows 10旁边安装了Ubuntu。现在在GRUB启动菜单中看不到启动Windows的选项。
注意:分区仍然存在。 enter image description here

确保您以UEFI模式启动。使用sudo efibootmgr -t nn来使用您的EFI菜单。您可以选择Windows引导管理器或Ubuntu(GRUB)。
注意:每次更新BOOTMGR时,Windows都会擦除GRUB安装在其自己的EFI系统分区上的内容。

方法1

1. 在开机时按下"esc"(可能在您的计算机上有不同的方式)进入Windows恢复模式。

2. 点击"故障排除"。

3. 点击"高级选项"。

4. 选择"命令提示符"。

5. 输入以下命令:

bootrec /fixmbr
bootrec /fixboot
bootrec /scanos
bootrec /rebuildbcd

6.现在重新启动你的电脑。
好的,如果这对你有效,如果不行的话,请尝试以下方法。
方法2。
1.使用Rufus制作Ubuntu的可启动USB驱动器,并进入Ubuntu。
2.打开终端并输入。
sudo fdisk -l

3.记下Linux安装的根分区。 例如:在我的情况下是(/dev/sda8)。 还有你的引导分区,它由*符号表示。 例如:在我的情况下是(/dev/sda6)
4.现在挂载你的根分区以进行一些更改和绑定。 在下面的命令中,将"/dev/sda8"替换为你的根分区。
sudo mount /dev/sda8 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys

5.现在将根目录从USB驱动器更改为硬盘的根目录

sudo chroot /mnt

6.现在将grub安装到您记下的启动分区,该分区用 "*" 符号标注。将 "/dev/sda6" 替换为您的启动分区。
grub-install /dev/sda6

7. 现在开始输入。
exit

8. 卸载之前挂载的分区。
sudo unmount /mnt/dev
sudo unmount /mnt/proc
sudo unmount /mnt/sys
sudo unmount /mnt

9.移除U盘并重新启动您的电脑。

下次在双启动Windows和Linux时,请参考此答案:双启动Windows和Linux


1在第5步中,有时在运行命令bootrec /rebuildbcd之前运行命令bootrec /scanos也会有帮助。/scanos选项会扫描所有磁盘以查找与Windows兼容的安装,并显示当前不在BCD存储中的条目。此截图显示了第5步中的所有4个命令:https://i.stack.imgur.com/qrnMl.png - karel

如果您正在使用Bitlocker,在安装Ubuntu之前可能对分区进行了一些更改(例如为Ubuntu安装释放了未分配的空间),那么您可能会遇到这个问题,因为GRUB无法处理启动Windows时出现的安全提示,该提示要求您输入Bitlocker恢复密钥。
我在安装Ubuntu 16.04.02与Windows 7并存后几乎遇到了同样的问题。Ubuntu可以正常启动,但在从GRUB选择Windows 7加载程序后,屏幕会显示一些奇怪的彩色倾斜线条,并停留在那里,直到处理器风扇转动并变热,我决定关闭计算机以避免损坏。
解决方法是使用Hiren's Boot CD,并在其中的主菜单中选择“Boot Windows 7”选项,这使我能够进入bitlocker恢复密钥的提示符界面,输入密钥,暂停和恢复我的Windows会话中的bitlocker,并随后按预期使用我的双系统启动。

我也有一个修复引导程序的工具... 不过只是开个玩笑 ;)

从安装的系统中运行update-grub破坏了我的引导项。 但让我能够引导进入已安装的系统。(ubuntu 20.04)

在我这个简单情况下,我只需要再次从已安装且正确引导的Linux系统中运行update-grub, 它会找到Windows的引导程序... 之后再运行'grub-install'就可以使之保持。

我有一个三重启动的系统。所以这已经成为一个常见的过程。 不像10年前那样了;)