
你好,我有一個大問題,因為你看到當我用來efibootmgr
建立啟動項目時,它只會在 EFI 啟動選單中產生一個無法啟動的日文字符,這非常糟糕。
另一方面,當我在 EFI shell 中使用 bcfg 時,它工作得很好。使用的 efibootmgr 指令是:efibootmgr -c -d /dev/nvme0n1 -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"
而 bcfg 指令是:bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"
當我執行bcfg boot dump -v
efibootmgr 和 bcfg 條目之間的區別如下:
DevPath
對於 bcfg 所做的條目是,而PciRoot(0x0)/Pci.....\EFI\refind\refind_x64.efi
對於 efiboomgr 所做的條目只是說VenHw(99E275E7-75AO-4B37)
您知道如何讓 efibootmgr 運作嗎?或者,我需要使用命令呼叫中的哪個選項才能使用 bcfg 指定核心參數?
答案1
如果efibootmgr
正在建立像您所描述的那樣的條目 ( ),那麼這聽起來像是韌體VenHw(99E275E7-75AO-4B37)
中的錯誤。efibootmgr
也就是說,考慮efibootmgr
您指定的命令:
efibootmgr -c -d /dev/nvme0n1 -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"
這有兩件事不尋常:
- 磁碟設備-- Linux 中的大多數磁碟裝置都有以下形式的名稱
/dev/sd?
,其中?
是從上到下的字母a
。某些裝置(例如某些 SSD 卡)的檔案名稱採用其他形式,例如/dev/mmcblk0
(來自內存,可能不太正確)。我不記得曾經見過類似的設備名稱/dev/nvme0n1
。這並不是說它是錯誤的,但至少它是不尋常的,你應該仔細檢查它。我會特別小心不要包含分區號碼——這就是-p
選項的efibootmgr
用途。 - 文件規格-- 舊版要求
efibootmgr
使用 EFI 語法指定檔案 -- 即使以反斜線 (\
) 而非斜線 (/
) 分隔目錄條目。由於 Linux shell 通常以獨特的方式處理反斜杠,因此這也需要引用整個路徑名或在反斜杠上加倍,因此您需要指定-l \\EFI\\refind\\refind_x64.efi
or-l "\EFI\refind\refind_x64.efi
。我聽說最新版本efibootmgr
將接受更傳統的 Unix/Linux 形式並在內部進行“翻譯”,但我不知道該功能何時添加,而且您也沒有說您使用的是哪個版本的 Ubuntu重新使用。因此,我建議您使用雙引號或引號反斜線而不是斜線。
當然,作為一個實際問題,如果您通過 獲得了工作條目bcfg
,則無需執行任何其他操作efibootmgr
。我猜你這麼問是因為應該工作,並且因為您希望能夠從 Ubuntu 執行此類維護。
答案2
我有完全相同的問題。嘗試使用 nvme 磁碟透過 efibootmgr 建立啟動項目。它沒有啟動,BIOS 中的啟動選單僅顯示該條目的日文(或中文?)字元。檢查另一個作業系統的啟動條目表示新建立的條目是 VenHw 類型。
但問題是分區號不正確。我在加密的 lvm 卷中有根分割區和其他一些分割區。因此,我為 efibootmgr 指定了加密分割區,而不是應該指定的 /boot 分割區。這可能不是你的情況,但我仍然寫下這篇文章,以防其他人因為同樣的原因遇到這個問題。仔細檢查您的分區號碼和 efibootmgr 的其他參數。
答案3
您需要編輯 refind.conf 檔案並將路徑更改回 PciRoot。寫下設備的完整描述,以便您可以將其輸入到conf 檔案中。只要確保選擇正確的 PciRoot 即可;)