我之前安装了 Windows 10 和 Ubuntu,使用 grub 可以双启动 Windows 和 Ubuntu。出于某些原因,我决定重新安装 Ubuntu,但不幸的是,它安装了错误的 grub 配置。现在我无法启动 Windows,无法从 grub(或os-prober
)看到它。
我有多个磁盘,Windows 安装在一个 SSD(sdc)上,Linux 有自己的 HDD(sda)。
我想我已经尝试了 askubuntu.com 上的多个答案,但是到目前为止,它们都没有起作用,而且我对所有内容都是在哪种配置下安装的感到更加迷茫,无论是 legacy 还是 uefi,尤其是因为它以前是可以正常工作的。
我附上了我的启动修复报告: 启动修复报告
从报告中我可以看到 Windows 已被检测到,当我尝试使用 Windows Live Disk 使用时cmd bootrec /FixMbr
,它成功了,但没有任何变化。自动修复没有。报告还指出 sdc1 有启动文件:
- /启动管理器
- /启动/BCD
在 GParted 中我可以看到 /sdc1 具有标志启动。
启动修复建议了一些它自己无法完成的步骤,所以我尝试了这种方法。我从实时 USB 启动并开始按照说明操作。有一次,他们想手动删除 grub,但我无法做到,因为 apt 需要插入 cdrom -问库本图
我尝试直接从 Windows 磁盘启动,然后收到错误“没有这样的设备,未知的文件系统”: 在此处输入图片描述
您知道我该如何修复这个问题并获得正确的启动配置吗?我尝试过更改 BIOS 传统/uefi 设置,但不确定如何以及什么是最佳配置 -个人简介页面
我确实想保留我的 Windows 安装,但我可以再次重新安装 ubuntu 以正确执行此操作,并且 grub 可以看到 Windows,但我不知道使用当前配置重新安装是否会改变任何东西。
答案1
Ubuntu 安装在 EFI 模式下,但 Windows 安装在传统 BIOS 模式下
在 EFI 模式下,GRUB 无法链式加载旧式 BIOS 引导加载程序,反之亦然。这意味着 Windows 未添加到 GRUB 引导菜单中。
要解决此问题,必须在传统 BIOS 模式下重新安装 GRUB,或者需要将 Windows 安装转换为使用 EFI 启动。
为了在 EFI 启动模式下检测 Windows 启动管理器,GRUB 会在 EFI 系统分区 (ESP) 中搜索bootmgfw.efi
。根据 Boot-Repair 的输出,此文件不存在;安装 Windows 的磁盘包含旧式 BIOS MBR,但没有 ESP。
将 Windows 安装转换为 EFI
考虑到 OP 希望将来升级到 Windows 11,最好的解决方案是将 Windows 安装转换为 EFI 启动。
从 Windows 安装(最好是该安装的恢复环境,否则您将需要提供开关/allowFullOS
来强制转换),或者从 Windows PE 环境(如 Windows 安装程序),您可以运行mbr2gpt
将 Windows 磁盘转换为 GPT 分区表,并创建 ESP。
从要转换的 Windows 安装的恢复环境来看,系统磁盘就是要转换的磁盘,因此/disk:<number>
不需要识别磁盘号和提供参数。
否则,磁盘号与 中显示的磁盘号相同diskpart
。您可以从命令提示符中运行来识别您的磁盘号list disk
:diskpart
X:\Windows\System32>diskpart
Microsoft DiskPart version 10.0.19041.964
Copyright (C) Microsoft Corporation.
On computer: ...
DISKPART> list disk
然后您可以键入exit
以返回命令提示符。
验证转换
在转换磁盘之前,您必须通过开关检查磁盘是否能够转换/validate
。
从命令提示符:
X:\Windows\System32>mbr2gpt /validate /disk:<number>
如果磁盘符合转换条件,您将看到:
MBR2GPT: Validation completed successfully
执行转换
如果一切顺利,并且您确信选择了正确的磁盘,则可以继续转换:
X:\Windows\System32>mbr2gpt /convert /disk:<number>
如果一切顺利,您将看到这些消息:
MBR2GPT: Conversion completed successfully
MBR2GPT: Before the new system can boot properly you need to switch the firmware to boot to UEFI mode!
如果您重新启动系统,Windows 安装可能会开始通过 Ubuntu 启动。Windows 成功启动后,您可以关闭 Windows 并从系统固件中的启动选择菜单中选择 Ubuntu。
更新 GRUB 启动菜单
打开终端,然后运行update-grub
:
$ sudo update-grub
您应该会看到Windows Boot Manager
已添加到 GRUB 启动菜单中。如果是这样,您现在可以在系统固件中禁用传统 BIOS 启动。
还要注意,固件的启动设备选择菜单中应该有一个Windows Boot Manager
条目。如果没有,则需要bootrec /FixMBR
在 Windows 以 EFI 模式启动时运行以将选项添加到 NVRAM。这可能会使该Windows Boot Manager
条目在启动顺序中的位置高于Ubuntu
。要反转此操作,请从终端列出 NVRAM 启动选项条目:
$ sudo efibootmgr
找到与 Ubuntu 相对应的数字,然后复制BootOrder
,将 Ubuntu 移到开头,然后将其粘贴到命令中,即,如果启动顺序为0001,0002,0003
,而 Ubuntu 为0003
,则运行:
$ sudo efibootmgr -o 0003,0001,0002
从下次重启开始,Ubuntu 将成为第一个启动的操作系统。