Windows

Solus/Windows 10 雙啟動停止工作,GRUB 不會自動修復

  • September 18, 2022

我有一個系統設置,可以使用 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_gptinsmod part_msdos
  • 如果該search行上的 UUID 指的是/dev/nvme0n1p1分區,那不是 Windows 引導載入程序所在的位置。現代 Windows 將其放入具有分區 ID 的“系統”分區中27- 在您的情況下,它是/dev/nvme0n1p2. 找出它的 UUID(用lsblk -o +UUIDor blkid),然後把它放在search行而不是目前的行上。
  • 替換chainloader /Windows/Boot/EFI/bootmgfw.efichainloader +1。(這意味著:載入由上search一行選擇的分區的第一個塊,並執行它。)

進行這些更改後,update-grub以 root 身份執行,然後再次嘗試引導 Windows。

參考:MBR 分區磁碟上的 Windows 10/11 預設分區佈局

引用自:https://unix.stackexchange.com/questions/717664