停用 Windows 對 UEFI NVRAM 的訪問

停用 Windows 對 UEFI NVRAM 的訪問

我編寫了 bash 腳本,將 Grub 條目新增到 UEFI NVRAM 中。腳本由可啟動 USB linux 呼叫。此命令新增條目:

efibootmgr -c -d /dev/sda -p 2 -L "Grub2" -l "\EFI\Boot\shimx64.efi" 

腳本工作正常。但後來我從 Partclone 映像安裝了 Windows。

Windows 會覆寫啟動順序並新增項目。它發生在 Windows 載入期間。重啟後Grub2消失。

我不想在 Windows 上進行更改 (bcdedit bootmgr),因為我已經準備好了映像(由 partclone 製作)

是否可以停用 Windows 對 UEFI NVRAM 的存取?是否可以在沒有 Windows 啟動管理員的情況下從 Grub EFI(安全啟動)執行 Windows(我的意思是直接 winload.efi)?

你有什麼主意嗎?

答案1

我不知道有什麼方法可以阻止 Windows 寫入 NVRAM 並修改 EFI 變數;但是,您還可以做其他事情...

請參閱我的回答這個問題一些可能有幫助的工具。bcdedit在這方面最有可能有用。你也可以嘗試EasyUEFI,當我寫之前的回覆時,我沒有使用它。

另一種選擇是建立自動復原所需啟動配置的系統啟動和/或關閉腳本。您可以bcdedit在 Windows 中使用此功能,但我不是 Windows 用戶,無法提供詳細資訊。在 Linux 中這樣做不太可能是必要的,因為 Linux 不是罪魁禍首;但如果是的話,你可以使用efibootmgr- 或者為了更輕鬆一點,你可以使用refind-mkdefault腳本,我將其添加到下一版本的 rEFInd 中。預設情況下,此腳本將 rEFInd 設定為預設啟動程序,但如果您透過選項向其傳遞另一個工具的名稱(檔案名稱或描述)-L,腳本會將其設定為預設啟動程序。

在最壞的情況下,您可以將 Windows 開機載入程式檔案(EFI\Microsoft\Boot\bootmgfw.efi在 ESP 上)重新命名或移動到其他位置,然後將 Shim 放在其位置,並在那裡儲存 GRUB 的副本。這將導致 GRUB 啟動而不是 Windows 啟動載入程式。不過,您需要重新設定 GRUB 設定才能正確啟動 Windows 開機載入程式。這啟動修復工具可以自動執行此操作;該選項位於「進階」功能表上,名稱類似於「備份和替換 Windows 啟動檔案」(我不記得確切的名稱)。這種方法的主要缺點是,如果 Windows 更新其引導程序,您將需要重新套用此修復程序。這也令人困惑;磁碟檔案名稱和 NVRAM 開機條目可能會產生誤導,這可能會使未來的修復變得複雜。

相關內容