Solus/Windows 10 双启动停止工作,GRUB 未自动修复

Solus/Windows 10 双启动停止工作,GRUB 未自动修复

我的系统设置为双启动 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
  • 如果该行中的 UUIDsearch指的是/dev/nvme0n1p1分区,则该分区不是 Windows 引导加载程序所在的位置。现代 Windows 将其放入具有分区 id 的“系统”分区中27- 在您的情况下,它是/dev/nvme0n1p2.找出它的 UUID(使用lsblk -o +UUIDblkid),然后将其search代替当前的 UUID 放在该行上。
  • chainloader /Windows/Boot/EFI/bootmgfw.efi用。。。来代替chainloader +1。 (这意味着:加载上一行选择的分区的第一个块search,并执行它。)

进行这些更改后,update-grub以 root 身份运行,然后尝试再次启动 Windows。

参考:MBR 分区磁盘上的 Windows 10/11 默认分区布局

相关内容