如何安全地設定、更改、刪除 EFI 變數的值

如何安全地設定、更改、刪除 EFI 變數的值

在花了幾個小時調試systemd-boot開始跳過啟動菜單並通常忽略其配置文件/loader/loader.conf(在 EFI 分區上)的問題後,我發現我可以通過在啟動時按下某個鍵來調用啟動菜單,並且問題是由我顯然無意中創建的某些EFI 變數引起的。 (我不知道這是怎麼發生的,但在我在一個分割區重新安裝 Ubuntu 18.04.1 後不久,問題就出現了。)

特別是,我發現將變數LoaderConfigTimeout-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f設為0某種形式,這會覆蓋 中定義的超時/loader/loader.conf,並且我還定義了變量LoaderEntryDefault-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f,這會覆蓋 中設定的預設選單項目/loader/loader.conf

請參閱底部“systemd-boot UEFI 啟動管理器”freedesktop.org 頁面上的 所使用的 EFI 變數清單systemd-boot。例如,可以檢查它們的值

cat /sys/firmware/efi/efivars/LoaderConfigTimeout-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f

在我透過按某個鍵顯示啟動選單,然後按d兩次設定和取消設定新的預設條目後,這刪除了我的LoaderEntryDefault-...變數。然而,我仍然堅持LoaderConfigTimeout-...。我知道我可以透過使用選單中的t T( ) 鍵來更改超時,這會修改 ,但我想完全刪除它,以便再次使用配置。Shift-tLoaderConfigTimeout-.../loader/loader.conf

修改和取消設定 EFI 變數(例如 )的正確且安全的方法是什麼LoaderConfigTimeout-...

答案1

在 systemd-boot 中,按ShiftTNum -足夠多次,使設定達到零,然後再按一次以取消設置,完全刪除變數。

在 Linux 上,首先使用chattr -i/sys/… 檔案來刪除核心應用的保護,然後使用rm完全刪除變數。

在 UEFI Shell 中,使用dmpstore -d <name>(帶有可選的-guid <guid>)刪除變數(請參閱中的文檔UEFI 外殼規範 2.0,第 113 頁)。

相關內容