在花了幾個小時調試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 中,按ShiftT或Num -足夠多次,使設定達到零,然後再按一次以取消設置,完全刪除變數。
在 Linux 上,首先使用chattr -i
/sys/… 檔案來刪除核心應用的保護,然後使用rm
完全刪除變數。
在 UEFI Shell 中,使用dmpstore -d <name>
(帶有可選的-guid <guid>
)刪除變數(請參閱中的文檔UEFI 外殼規範 2.0,第 113 頁)。