Debian

如何為 grub (EFI) 設置預設前綴?

  • May 25, 2021

嘗試在 vanilla debian buster 上安裝 OpenZFS 2.0.0 並從它啟動時,我已經度過了艱難的四天。長話短說,OpenZFS 2.0.0 執行,buster 從它啟動,但只需要一點手動幫助:

每次重新啟動後,grub 都會進入命令行。顯然,它不執行 grub.cfg。如果我手動執行 grub.cfg,系統會啟動。

請注意,我已經閱讀了無數其他執行緒和問答,它們都在處理 grub 在重新啟動後在命令行中的問題。但是,我沒有找到與我類似的問題 - 我相信到目前為止我已經找到了這個問題,所以我的問題非常具體:

當我在 grub 的命令提示符下發出set命令時,(當然,其中包括)以下行:

prefix=(hd0,gpt2)/EFI/debian

我不是 Linux 專家,更不是 grub 專家。所以我可能是錯的,但我相信這是罪魁禍首,因為引導載入程序(grubx64.efishimx64.efi,分別)以及配置文件(grub.cfg)實際上是在(hd0,gpt2)/EFI/debian-hdd1(請注意尾隨-hdd1prefix缺少值),而不是在(hd0,gpt2)/EFI/debian.

因此,當我在命令行發出normal時,什麼也沒有發生(好吧,螢幕似乎刷新了,但沒有別的)。但是當我第一次輸入

set prefix=(hd0,gpt2)/EFI/debian-hdd1

然後輸入normal,就會出現正常的 grub 啟動菜單。

這讓我假設prefix在這種特殊情況下變數是錯誤的。顯然,當到達命令提示符時,grub 還沒有執行任何腳本。因此,value ofprefix必須是預設值。

問題:

grub 從哪裡得到這個預設值?它是編譯時選項,還是我可以在某個地方設置它?也就是說,我如何設置 grub 變數的預設值,特別是prefix(即這些變數在沒有腳本執行時的值)?

題外話:

我知道我可能可以通過安裝grub.cfgin.../debian而不是.../debian-hdd1. 我還沒有嘗試過,原因有兩個:

  1. 我真的很想學習如何更改 grub 的預設值prefix(稱為好奇心或迂腐)。
  2. 我正在安裝 grub grub-install,它顯然使用 UEFI 引導條目名稱(通過提供選項設置--bootloader-id=debian-hdd1)作為它創建的目錄名稱。

我需要這種形式的引導條目名稱,因為系統啟動的 rpool 包含兩個磁碟的鏡像,如果其中一個磁碟出現故障,我希望能夠從另一個磁碟引導。因此,我需要能夠在 UEFI BIOS 設置中區分這兩個磁碟。

我仍然無法回答我的問題,即我仍然不知道如何更改prefixgrub-efi 中的預設值。但是,我找到了解決問題的方法——efibootmgr前來救援,直到現在我還不太清楚。

--bootloader-id=我第一次在做的時候放棄了這個選項,結果結果和下面grub-install的效果一樣--bootloader-id=debian:bootloader files now was inEFI\debian而不是EFI\debian-hdd1.

當然,現在 UEFI BIOS 設置中的引導菜單項也是debian,我必須避免。幸運的是,在閱讀了手冊頁之後,很明顯 efibootmgr 是解決這種情況的正確工具。

首先,我刪除了名稱錯誤的 UEFI BIOS 啟動菜單項:

efibootmgr -b 0001 -B

然後我用正確的名稱創建了一個新的 UEFI BIOS 引導菜單項:

efibootmgr -c -d /dev/sda -p 2 -w -L debian-hdd1 -l '\EFI\debian\shimx64.efi'

請注意,此命令不涉及實際的引導載入程序安裝,無論是 EFI 分區中的那個還是/boot/grub. 相反,它實際上只是在 UEFI 韌體中創建了一個啟動菜單條目。

這正是我所需要的。實際上,我不在乎 EFI 引導載入程序是否在EFI\debianEFI\something-else. 但是,我確實關心 UEFI 設置中該引導載入程序條目的名稱,而我的問題出現了,因為在那之前我認為這--bootloader-idgrub-install正確命名 UEFI 設置中的引導載入程序條目的唯一舒適方法。

系統現在啟動沒有任何問題,因為初始的grub.cfgnow 在 中EFI\debian,因此 grub 可以找到它。

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