UEFI GUID とデバイス パス
UEFI ファームウェアの GUID がどのプロトコル、モジュール、変数空間なのかを調べたり、デバイス パスをデコードして、ブート エントリが使用するディスク、パーティション、ファイル、ネットワーク カードをノードごとに確認したりできます。UEFI Shell と efibootmgr -v のテキスト形式、および Boot#### 変数のバイナリに対応しています。
1 つ以上の GUID、efivarfs の変数名、EDK2 の構造体を貼り付けるか、GlobalVariable のように名前の一部を入力してください
例:

仕組み

UEFI ファームウェアは、扱うほぼすべてのものを GUID で識別します。ドライバーが提供するプロトコル、DXE・PEI・SMM モジュール、ファームウェア ボリューム、そしてグローバル ブート変数や Secure Boot の署名データベースなどの変数の名前空間です。GUID 単体では何もわかりません。このツールは、EDK2 と主要なファームウェア メーカーの数千の GUID を収録したカタログから、そのシンボル名を検索します。

デバイス パスは、ファームウェアがデバイスやファイルに到達するために使用する経路で、PCI バスのルートからコントローラー、ディスク、パーティション、.efi ローダーまでをたどります。Boot#### ブート エントリはデバイス パスをバイナリで保存しています。このツールはそれをテキスト形式に変換し、各ノードをそのフィールドとともに説明します。

例

8BE4DF61-93CA-11D2-AA0D-00E098032B8CEfiGlobalVariableGuidBootOrder、Boot####、SecureBoot など、仕様で定義されたグローバル変数の名前空間です。
db-d719b2cb-3d3a-4596-a3bc-dad00e67656fEfiImageSecurityDatabaseGuid/sys/firmware/efi/efivars のファイル名で、Secure Boot の 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 の各ファイルがどの変数に対応するか (Secure Boot の署名データベースなど) を調べます。
  • ディスクのクローンや交換の後に動作しなくなったブート エントリが、どのディスク、パーティション、ファイルを使用しているかを突き止めます。
  • 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 の行全体、そして 16 進数のバイナリ (スペース区切りの有無を問わず、xxd や hexdump -C の出力も可) に対応しています。バイナリは、デバイス パス単体、Boot#### 変数の内容、先頭に属性が付いた efivarfs のファイルのいずれでもかまいません。

デバイス パスはサーバーに送信されますか?

いいえ。デバイス パスはブラウザー内でデコードされます。サーバーに照会するのは、名前を表示するためにノードに現れるファームウェア GUID だけです。パーティション GUID やその他のデータがお使いのコンピューターの外に送信されることはありません。

efibootmgr がファイル パスの後に表示するデータは何を意味しますか?

エントリのオプション データで、ファームウェアがローダーに渡すものです。たとえば Windows ブート マネージャーは、そこに BCD ストアへの参照を保存しています。デバイス パスの一部ではありません。変数のバイナリを貼り付けた場合、ツールはこれを別に表示します。