運作方式
UEFI 韌體幾乎以 GUID 識別它所處理的一切:驅動程式提供的協定、DXE、PEI 和 SMM 模組、韌體磁碟區,以及變數的命名空間,例如全域開機變數或安全開機簽章資料庫的命名空間。單獨一個 GUID 說明不了什麼;本工具會在收錄 EDK2 與主要韌體廠商數千個 GUID 的目錄中,查找它的符號名稱。
裝置路徑是韌體用來到達某個裝置或檔案的路徑:從 PCI 匯流排的根開始,經過控制器、磁碟、分割區,直到 .efi 載入程式。Boot#### 開機項目以二進位形式儲存裝置路徑;本工具會將其轉換為文字形式,並逐一說明每個節點及其欄位。
範例
8BE4DF61-93CA-11D2-AA0D-00E098032B8CEfiGlobalVariableGuid規格中全域變數的命名空間,例如 BootOrder、Boot#### 或 SecureBoot。db-d719b2cb-3d3a-4596-a3bc-dad00e67656fEfiImageSecurityDatabaseGuid/sys/firmware/efi/efivars 中的檔案名稱:安全開機的 db 變數。本工具會從名稱中擷取 GUID。Fv(7CB8BDC9-F8EB-4F34-AAEA-3EE4AF6516A1)/FvFile(7C04A583-9E3E-4F1C-AD65-E05268D0B4D1)Fv → FvFile 7C04A583-9E3E-4F1C-AD65-E05268D0B4D1 = FullShell韌體內建 UEFI Shell 的開機項目:在韌體磁碟區中依 GUID 尋找檔案。01 00 00 00 20 00 55 00 45 00 46 00 49 00 20 00 4F 00 53 00 00 00 02 01 0C 00 D0 41 03 0A 00 00 00 00 01 01 06 00 02 1F 03 12 0A 00 00 00 FF FF 00 00 7F FF 04 00UEFI OS — PciRoot(0x0)/Pci(0x1F,0x2)/Sata(0x0,0xFFFF,0x0)Boot#### 變數的二進位內容:屬性、描述和裝置路徑。若貼上 efivarfs 中的檔案,開頭的 4 位元組變數屬性會自動辨識。使用情境
- 在變更開機順序或刪除開機項目之前,了解 efibootmgr -v 列出的每個項目啟動的是什麼。
- 識別開機記錄、變數傾印或 EDK2 程式碼中出現的 GUID。
- 了解 /sys/firmware/efi/efivars 中的每個檔案對應哪個變數,例如安全開機的簽章資料庫。
- 在複製或更換磁碟後,找出已無法運作的開機項目所使用的磁碟、分割區和檔案。
- 檢視以 UEFITool 或其他分析工具開啟的韌體映像檔中的模組。
常見問題
要從哪裡取得開機項目的裝置路徑?
在 Linux 中,efibootmgr -v 會顯示每個項目及其文字形式的裝置路徑;/sys/firmware/efi/efivars 中的 Boot#### 檔案包含完整的二進位資料,可用 xxd 或 hexdump -C 傾印。在 UEFI Shell 中,bcfg boot dump -v 會顯示開機項目,map -v 則顯示磁碟的裝置路徑。
為什麼某個 GUID 不在目錄中?
任何製造商都可以為自己的模組建立 GUID,而無須在任何地方註冊。目錄收錄了 EDK2 的 GUID,以及社群在主要製造商韌體中陸續識別出的 GUID,但總會有一些沒有名稱的專屬 GUID。HD 節點中出現的分割區 GUID 是每顆磁碟獨有的,永遠不會出現在目錄中。
支援哪些裝置路徑格式?
支援 UEFI Shell 和 EDK2 顯示的規格文字形式、efibootmgr -v 的完整一行,以及十六進位的二進位資料(不論是否以空格分隔,也可以是 xxd 或 hexdump -C 的輸出)。二進位資料可以只是裝置路徑,也可以是 Boot#### 變數的內容,或開頭帶有屬性的 efivarfs 檔案。
裝置路徑會傳送到伺服器嗎?
不會。裝置路徑會在您的瀏覽器中解碼。只有節點中出現的韌體 GUID 會向伺服器查詢,以顯示其名稱;分割區 GUID 和其他資料都不會離開您的電腦。
efibootmgr 在檔案路徑之後顯示的資料是什麼意思?
這是開機項目的選用資料,由韌體傳遞給載入程式。例如,Windows 開機管理程式會在其中儲存對其 BCD 存放區的參照。這些資料不屬於裝置路徑;若貼上變數的二進位資料,本工具會另外顯示它們。