![Solus/Windows 10 双启动停止工作,GRUB 未自动修复](https://linux22.com/image/210896/Solus%2FWindows%2010%20%E5%8F%8C%E5%90%AF%E5%8A%A8%E5%81%9C%E6%AD%A2%E5%B7%A5%E4%BD%9C%EF%BC%8CGRUB%20%E6%9C%AA%E8%87%AA%E5%8A%A8%E4%BF%AE%E5%A4%8D.png)
我的系统设置为双启动 Windows 10 和 Solus Linux;然而,在我的一个辅助驱动器出现一些问题之后(最终将其删除,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.
。此外,我无法/EFI/Microsoft/Boot/bootmgfw.efi
在 Windows 安装中找到我应该拥有的位置,而是在我尝试访问它不存在的其他位置时找到并收到错误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
以下内容中找到的输出以旧模式启动这指南找到它。
答案1
您遵循的指南适用于 UEFI 系统。 Windows 操作系统将启动方法的选择与分区系统的选择联系起来,因此您的磁盘采用 MBR 样式分区(Disklabel type: dos
在输出中用表示fdisk -l
)这一事实意味着您的 Windows 将以传统 BIOS 样式启动。
这基本上意味着您必须在/etc/grub.d/40_custom
条目中修复三件事:
insmod part_gpt
用。。。来代替insmod part_msdos
。- 如果该行中的 UUID
search
指的是/dev/nvme0n1p1
分区,则该分区不是 Windows 引导加载程序所在的位置。现代 Windows 将其放入具有分区 id 的“系统”分区中27
- 在您的情况下,它是/dev/nvme0n1p2
.找出它的 UUID(使用lsblk -o +UUID
或blkid
),然后将其search
代替当前的 UUID 放在该行上。 chainloader /Windows/Boot/EFI/bootmgfw.efi
用。。。来代替chainloader +1
。 (这意味着:加载上一行选择的分区的第一个块search
,并执行它。)
进行这些更改后,update-grub
以 root 身份运行,然后尝试再次启动 Windows。