UEFI
ファームウェアのあるワークステーションとパーティションテーブルタイプのディスクがあります。GPT
EFI Boot Managerによると、システムはUUIDから起動するように指示されます7e169454-1df0-40bf-9c63-0f6b094c1e15
。
# efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000
Boot0000* debian HD(1,GPT,7e169454-1df0-40bf-9c63-0f6b094c1e15,0x800,0xee000)/File(\EFI\debian\grubx64.efi)
#
7e169454-1df0-40bf-9c63-0f6b094c1e15
/dev/sdb
FAT32
ファイルシステムがあるディスクの最初のパーティションは次のとおりです。
# blkid /dev/sdb1
/dev/sdb1: UUID="DA79-BCEA" TYPE="vfat" PARTUUID="7e169454-1df0-40bf-9c63-0f6b094c1e15"
#
~によるとこのUEFIガイドGPT
、UEFI仕様では、UEFIがパーティションテーブルを読み取ることができる必要があります()。これは、EFIブートマネージャのインストール/編集中にのみ必要ですか?私が知っているのは、efibootmgr
パーティションの開始と終了のセクタがEFIブートマネージャエントリに追加されることです。たとえば、上記の例に基づいて、私のEFIブートマネージャエントリには、次から読み取った開始と終了のセクタに一致する0x800
(2048
10進数)と(10進数)が含まれます。0xee000
974848
fdisk
GPT
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): i
Partition number (1-4, default 4): 1
Device: /dev/sdb1
Start: 2048
End: 976895
Sectors: 974848
Size: 476M
Type: EFI System
Type-UUID: C12A7328-F81F-11D2-BA4B-00A0C93EC93B
UUID: 7E169454-1DF0-40BF-9C63-0F6B094C1E15
UEFI
EFIブートマネージャに開始および終了セクタ情報を入力するには、パーティションテーブルにアクセスする必要がありますか?
または、?と一致するパーティションをUEFI
見つける必要があるため、起動するたびにパーティションテーブルにアクセスする必要があります。UUID
わかったらこのUEFI
ガイドそうであれば、UEFI
各ペリフェラルは起動中に一致するデバイスが見つかるまで指定されていない順序で初期化されますUUID
。したがって、この例では、EFIブートマネージャから読み取り7e169454-1df0-40bf-9c63-0f6b094c1e15
、各ブロックデバイスを繰り返し、7e169454-1df0-40bf-9c63-0f6b094c1e15
パーティションが完了するまでGPTを読み取ります。設立する?
答え1
このUEFIガイドによれば、UEFI仕様では、UEFIが(GPT)パーティションテーブルを読み取ることができる必要があります。
これは仕様要件なので、特定のUEFIファームウェアの実装可能他のパーティション表形式もサポートされています。すべてUEFIの実装〜しなければならないコンプライアンスのためにGPTもサポートされています。したがって、PCハードウェアのUEFI実装は、通常、これを認識できるほどクラシックMBRパーティションもサポートします。 AppleのUEFI実装は、Appleの独自のレガシーパーティショニング方式もサポートでき、Oracle / Sun UEFIはSolaris VTOCディスクラベルなども理解できます。
これは、EFIブートマネージャのインストール/編集中にのみ必要ですか?
EFIブートマネージャはUEFIファームウェアに組み込まれています。絶対に「インストール」しないでください。このefibootmgr
コマンドを使用して編集できます。パラメータこれはマザーボードの不揮発性メモリ(NVRAM)に保存されます。
UEFIファームウェアは、特定のUEFI実装でサポートされている代替パーティションテーブル形式を使用してシステムをインストールしない限り、起動するたびにGPTパーティションテーブルを読み取ることができるはずです。
HD(1,GPT,7e169454-1df0-40bf-9c63-0f6b094c1e15,0x800,0xee000)
出力の文字列はefibootmgr
単純な文字列ではありません。これは人間が読める簡潔な表現です。UEFIハードディスクメディアデバイスパスデータ構造。このデータ構造は、データが実際にEFIブートマネージャのNVRAMに格納される方法です。
UEFI仕様によると(私の強調点と段落に分けられます):
ブートマネージャは、最初の要素で始まる省略デバイスパスからのブートもサポートする必要があります。ハードディスクメディアデバイスパス(表77を参照)ブートマネージャは、ハードドライブのデバイスパスのGUIDまたは署名とパーティション番号を使用して、システムのデバイスと一致させる必要があります。
ドライブがGPTパーティションスキームをサポートしている場合、GUIDは次の場所にあります。ハードディスクメディアデバイスパス
UniquePartitionGuid
GUIDパーティション項目のフィールドと比較してください(表18を参照)。ドライブがPC-AT MBR方式をサポートしている場合、署名はハードディスクメディアデバイスパスUniqueMBRSignature
既存のマスターブートレコードと比較してみてください(表13を参照)。署名が一致する場合は、パーティション番号も一致する必要があります。ハードドライブデバイスパスを一致するハードウェアデバイスパスに追加すると、通常の起動動作を使用できます。ハードディスクデバイスパスに一致するデバイスが複数ある場合、ブートマネージャはランダムに1つを選択します。したがって、オペレーティングシステムは、決定的な起動動作を保証するためにハードドライブの署名の一意性を確保する必要があります。
したがって、パーティションの一意のUUIDを一致させることが基本的なメカニズムです。開始および終了セクタ情報は冗長性を提供するためにのみ存在します。すべてのUEFI実装はそれを自由に使用または無視できます。
UEFI ファームウェアは、開始および終了セクタ情報を使用して、NVRAM 情報とディスクの内容が一致するかどうかをさらに確認できます。さらに、ディスク上のパーティションテーブルが破損しているように見える場合、ファームウェアは場所ごとにESPパーティションを見つけようとする可能性があるため、データエラーからシステムの信頼性が向上します。各UEFIファームウェアの実装者は、この追加情報を使用するかどうか、および使用するときに全体的な戦略が何であるかを自分で判断できます。
セキュリティを念頭に置いて、UEFI実装はブートプロセスを中断し、不整合に関するエラーを報告することができますが、最大安定性のために設計された実装は単一のNVRAMエラーまたはパーティションテーブルを解決する可能性を最大化しない前に、冗長情報のすべて組み合わせを試すことができます。一致する署名が見つからない場合、最小のUEFI実装はエラーメッセージで停止し、追加情報を完全に無視できます。
UEFIとその機能をよりよく理解するには、UEFIシェルを試してください。一部のUEFI実装(IntelやPhoenixなど)にはこの機能が組み込まれており、他のもの(AMI)には、ファイルがshellx64.efi
ESP(EFIシステムパーティション)のルートに追加された場合にファイルを実行するための特定のオプションがあります。他のすべての方法が失敗した場合は、いつでも.efi
ESPにシェルファイルを配置し、efibootmgr
EFI Boot Managerで追加の起動メニュー項目として設定できます。
この記事を書いた時点で、TianoCoreプロジェクトが提供するUEFIシェルのプリコンパイル済みの最新バージョンは、次の場所にあるようです。 https://github.com/tianocore/edk2/releases/download/edk2-stable201911/ShellBinPkg.zip