Boot

Linux mint 19.2 和 Windows 10 的 Grub/Bootmgr 問題

  • July 13, 2021

我已經在筆記型電腦上雙啟動 Linux mint 19 和 Windows 10 3 年了,沒有任何問題。今天,我在 Linux 上執行了一個 apt-get upgrade 命令,並且遇到了 grub、os prober 等身份驗證錯誤。清除 grub/* 並重新安裝 grub-efi 修復了軟體包升級問題。但是,在啟動到 Windows 後,我無法再次啟動到 Linux(grub 螢幕沒有出現,筆記型電腦直接啟動到 Windows)

  1. 根據幾個論壇建議,我跑了

bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi

具有 Windows cmd 的管理員權限。現在,重新啟動筆記型電腦會出現“選定的啟動映像未通過身份驗證”錯誤。

  1. 我從 BIOS 開啟了傳統啟動。這使得 ubuntu 備份(沒有 grub 螢幕)。從 ubuntu 終端,我執行 sudo update-grub 終端顯示顯示 grub 能夠找到 Windows 啟動管理器映像。這一次,我重新啟動,顯示 grub 螢幕,但上面沒有 Windows 選項。
  2. 我啟動到 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條目被指定為 中的第一個,因此BootOrderWindows 的“自我修復”將有效地使系統一啟動就直接進入 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 是首選”。

關閉舊模式會導致圖像身份驗證錯誤

這表明“關閉傳統模式”也將自動啟用安全啟動。

由於 Windowsbootmgfw.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

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