我有一个系统设置,可以使用 Solus Linux 双启动 Windows 10;但是,在我的一个辅助驱动器出现问题后(最终将其删除,Windows 在没有它的情况下运行良好),尝试在 GRUB 中启动 Windows 产生了一个我不记得的错误,我不得不通过终端更新 Solus让它正确启动(如果我没记错的话)。现在,Solus 启动得很好,但是 Windows 根本没有出现在 GRUB 中,在研究和尝试解决方案几个小时后,我感觉就像把头撞在砖墙上一样。我见过推荐并尝试过但不起作用的东西:
尝试通过运行
os-prober
和自动修复它update-grub
。起初,我收到一条错误消息WARNING: Failed to connect to lvmetad. Falling back to device scanning.
。一旦我通过重新启动 lvmetad 服务解决了这个问题,它什么也不会输出,GRUB 会说它更新了它的配置,但仍然没有 Windows。尝试手动添加 Windows 10 启动项。主要遵循本指南,我努力寻找
fs-uuid
但最终设法得到它。不过,我始终无法hints_string
正常工作,总是收到错误消息grub-probe: warning: unknown device type nvme0n1.
。此外,我在我的 Windows 安装中找不到/EFI/Microsoft/Boot/bootmgfw.efi
我应该拥有的,而是在我尝试访问它不存在的其他位置时找到bootmgfw.efi
位于并收到错误。/Windows/Boot/EFI/bootmgfw.efi
尽管有这些障碍,我还是继续努力并将以下内容作为手动条目添加到 中/etc/grub.d/40_custom
,但结果error: invalid signature
令人失望。
# Microsoft Windows 10
menuentry "Windows 10" {
insmod part_gpt
insmod ntfs
insmod search_fs_uuid
insmod chain
search --no-floppy --fs-uuid --set=root 2E6E49286E48E9E3
chainloader /Windows/Boot/EFI/bootmgfw.efi
}
- 尝试从可启动的 Windows 10 USB 运行启动修复。按照这个建议的答案,我启动到我的 Windows 10 安装程序 USB,转到“修复您的计算机”,选择“启动修复。”,并被告知 Windows 无法找出问题所在,只是提示“关闭” ”。
在这一点上,我已经筋疲力尽了。我觉得我在网上找到的东西绕着圈子跑,我真的想不出还有什么可以起作用的。我不是 Linux 专家。我在终端的东西上有点像样,但我不太了解这些东西是如何工作的,试图自己从零开始修复它。尽管 Solus 使用起来很可爱,但它仍然有我遇到的一些问题(尽管这些与这里的大问题无关),我仍然非常希望拥有一台能够运行 Windows 的强大台式计算机所以仅仅放弃我的 Windows 分区并不是我想要接受的。任何事情都将不胜感激,非常感谢您。
作为参考,如果它有帮助,这是fdisk -l
与我的引导驱动器相关的输出:
Disk /dev/nvme0n1: 476.94 GiB, 512110190592 bytes, 1000215216 sectors
Disk model: INTEL SSDPEKNW512G8
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x313ff715
Device Boot Start End Sectors Size Id Type
/dev/nvme0n1p1 2048 499578836 499576789 238.2G 7 HPFS/NTFS/exFAT
/dev/nvme0n1p2 999153664 1000210431 1056768 516M 27 Hidden NTFS WinRE
/dev/nvme0n1p3 499578880 957210623 457631744 218.2G 83 Linux
/dev/nvme0n1p4 957210624 999153663 41943040 20G 82 Linux swap / Solari
Partition table entries are not in disk order.
此外,我很确定 Windows 会根据我在setupact.log
按照本指南找到它后找到的输出以传统模式启动。
您遵循的指南适用于 UEFI 系统。Windows 操作系统将引导方法的选择与分区系统的选择联系起来,因此,您的磁盘是 MBR 样式的分区(
Disklabel type: dos
在您的fdisk -l
输出中表示)意味着您的 Windows 将以旧版 BIOS 样式引导。这基本上意味着您必须在
/etc/grub.d/40_custom
条目中修复三件事:insmod part_gpt
为insmod part_msdos
。search
行上的 UUID 指的是/dev/nvme0n1p1
分区,那不是 Windows 引导加载程序所在的位置。现代 Windows 将其放入具有分区 ID 的“系统”分区中27
- 在您的情况下,它是/dev/nvme0n1p2
. 找出它的 UUID(用lsblk -o +UUID
orblkid
),然后把它放在search
行而不是当前的行上。chainloader /Windows/Boot/EFI/bootmgfw.efi
为chainloader +1
。(这意味着:加载由上search
一行选择的分区的第一个块,并执行它。)进行这些更改后,
update-grub
以 root 身份运行,然后再次尝试引导 Windows。参考:MBR 分区磁盘上的 Windows 10/11 默认分区布局