efibootmgr 建立一個條目,其中 DevPath 設定為 Venhw 而不是 PciRoot

efibootmgr 建立一個條目,其中 DevPath 設定為 Venhw 而不是 PciRoot

你好,我有一個大問題,因為你看到當我用來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 -vefibootmgr 和 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.efior -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 即可;)

相關內容