Linux mint 19.2 和 Windows 10 的 Grub/Bootmgr 問題
我已經在筆記型電腦上雙啟動 Linux mint 19 和 Windows 10 3 年了,沒有任何問題。今天,我在 Linux 上執行了一個 apt-get upgrade 命令,並且遇到了 grub、os prober 等身份驗證錯誤。清除 grub/* 並重新安裝 grub-efi 修復了軟體包升級問題。但是,在啟動到 Windows 後,我無法再次啟動到 Linux(grub 螢幕沒有出現,筆記型電腦直接啟動到 Windows)
- 根據幾個論壇建議,我跑了
bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
具有 Windows cmd 的管理員權限。現在,重新啟動筆記型電腦會出現“選定的啟動映像未通過身份驗證”錯誤。
- 我從 BIOS 開啟了傳統啟動。這使得 ubuntu 備份(沒有 grub 螢幕)。從 ubuntu 終端,我執行 sudo update-grub 終端顯示顯示 grub 能夠找到 Windows 啟動管理器映像。這一次,我重新啟動,顯示 grub 螢幕,但上面沒有 Windows 選項。
- 我啟動到 ubuntu 並使用“備份和重命名 Windows EFI 文件”選項執行啟動修復。應用所有更改後,Windows 選項出現在 grub 螢幕上,但按 Enter 鍵只會讓我回到 grub 螢幕。從 BIOS 中選擇 F11(系統恢復)也讓我回到了 grub。**我還沒有在這裡找到另一個有同樣問題的文章。**這一步也都是在遺留模式下。關閉傳統模式會導致圖像身份驗證錯誤,並且仍然無法啟動任何內容。粘貼箱在這裡: http: //paste.ubuntu.com/p/96jHFRfYBF
任何建議將不勝感激。目前我會做任何事情來恢復我的 Windows 系統(包括清除 Linux Mint 系統,因為我的 Linux 文件系統更有條理,並且我能夠在第 2 步中備份所有內容)。
但是,在啟動到 Windows 後,我無法再次啟動到 Linux(grub 螢幕沒有出現,筆記型電腦直接啟動到 Windows)
這很可能是 Windows 10 檢測到其 UEFI NVRAM 引導條目已被篡改,並在不考慮系統上可能存在的其他作業系統的情況下“自我修復”它。這是 Windows 10 會做的事情,據我所知,沒有辦法繞過它。
UEFI NVRAM 引導條目的目前狀態可以在您的 pastebin 的 Boot-Repair 輸出中查看:
===================================== UEFI ===================================== BIOS is EFI-compatible, and is setup in EFI-mode for this installed-session. SecureBoot disabled. efibootmgr -v BootCurrent: 0003 Timeout: 0 seconds BootOrder: 0000,0001,0003,9999 Boot0000* Windows Boot Manager HD(1,GPT,afab201a-94f8-11e8-851f-806e6f6e6963,0x800,0x12bfff)/File(\EFI\ubuntu\grubx64.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{.9.d.e.a.8.6.2.c.-.5.c.d.d.-.4.e.7.0.-.a.c.c.1.-.f.3.2.b.3.4.4.d.4.7.9.5.}...a................ Boot0001* ubuntu HD(1,GPT,afab201a-94f8-11e8-851f-806e6f6e6963,0x800,0x12bfff)/File(\EFI\ubuntu\grubx64.efi) Boot0003* Internal Hard Disk PciRoot(0x0)/Pci(0x17,0x0)/Sata(2,32768,0)/HD(1,GPT,afab201a-94f8-11e8-851f-806e6f6e6963,0x800,0x12bfff)..BO Boot9999* USB Drive (UEFI) PciRoot(0x0)/Pci(0x1d,0x0)/USB(16,0)..BO
請注意,Boot0000 條目目前是 BootOrder 中的第一個條目,雖然它的可讀名稱是“Windows Boot Manager”,但它執行的實際引導文件已更改為
\EFI\ubuntu\grubx64.efi
.這可能是由您的 引起的
bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
,因為這實際上是命令告訴 Windows 執行的操作。由於 Windows 10 啟動後會自動將其改回其標準
\EFI\Microsoft\boot\bootmgfw.efi
,並且該Boot0000
條目被指定為 中的第一個,因此BootOrder
Windows 的“自我修復”將有效地使系統一啟動就直接進入 Windows進入 Windows。您可以做的是更改引導順序,以便 Ubuntu (
Boot0001
) 的引導條目將是第一個。這是 Windows 似乎不傾向於篡改的東西,只要該Boot0000
條目保持不變。您可以通過多種方式執行此操作:a.) 訪問 BIOS 引導順序設置,並移動(希望)標記
ubuntu
為引導順序中第一個的條目。b.) 在 Windows 提升的命令提示符下,執行
bcdedit /enum FIRMWARE
,找到description
設置為的啟動項ubuntu
並記下它identifier
:它將是一個大括號中的長 UUID 字元串。然後執行bcdedit /set {fwbootmgr} DEFAULT {UUID of the ubuntu entry}
。**注意:**使用{fwbootmgr}
而不是在{bootmgr}
這裡很重要。c.) 在 Linux 中,您可以使用以下命令重新定義引導順序:
sudo efibootmgr --bootorder 0001,0000,0003,9999
這應該將
ubuntu
條目放在引導順序中的第一個位置,然後Windows Boot Manager
是 ,然後以它們目前的相同順序放置其他現有條目。但請繼續閱讀…
您的 pastebin 還表明 Boot-Repair 成功地做到了這一點:
mv /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi /boot/efi/EFI/Microsoft/Boot/bkpbootmgfw.efi cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
換句話說,它將 Windows 移到
bootmgfw.efi
一邊,並用 UEFI GRUB 的副本取而代之。這有時是解決 UEFI 韌體錯誤所必需的,但由於您的系統以前可以工作,因此在您的情況下這可能不是必需的。您需要撤消此操作。在 Mint 中,sudo cp /boot/efi/EFI/Microsoft/Boot/bkpbootmgfw.efi /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi
應該這樣做。或者,如果你進入 Windows,它可能會以
bootmgfw.efi
“自我修復”的名義立即替換為 Windows 版本,甚至不告訴你。您的 BIOS 設置似乎在騙您:“傳統模式”似乎更像“MBR 或 UEFI,但顯然 UEFI 是首選”。
關閉舊模式會導致圖像身份驗證錯誤
這表明“關閉傳統模式”也將自動啟用安全啟動。
由於 Windows
bootmgfw.efi
現在已被替換為副本,grubx64.efi
並且它是由韌體直接載入而沒有shimx64.efi
.,因此預計安全啟動檢查將失敗……並且“圖像身份驗證錯誤”似乎就是這樣。因此,要使您的
ubuntu
啟動條目使用shimx64.efi
安全啟動合規性,您需要sudo efibootmgr -b 0001 -l \\EFI\\ubuntu\\shimx64.efi
. 如果不使用 Secure Boot,shimx64.efi
將直接grubx64.efi
在其所在的目錄中執行,因此即使 Secure Boot 未生效,這也不會有害。在 Windows 端執行此操作有點棘手:再次使用
bcdedit /enum FIRMWARE
,辨識ubuntu
條目的 UUID,然後使用:bcdedit /set {UUID of the ubuntu entry} path \EFI\ubuntu\shimx64.efi