GPTヘッダーの署名は何ですか?


13

このWikipediaの記事によると、GUIDパーティションテーブル(LBA 1)の2番目の論理ブロックアドレスはプライマリGPTヘッダーです。次に、ヘッダーに関するセクションで、ヘッダーの最初の8バイトは「署名」用であると述べています。

このGPTヘッダーシグネチャとは何ですか?また、GPTテーブル/ストレージデバイスの機能/動作との関連性は何ですか?

私はWebを検索しましたが、このヘッダー署名の目的に関する情報はほとんど見つかりませんでした。

編集:

Deltikの回答へのコメントで、これらの後続の質問をしました。

  • 署名が空白の場合、GPTテーブルは認識されませんか?
  • 現在、署名が「IGNOREME」に設定されているように見えるChrome OS GPTを検査しています。それはどんな効果がありますか?
  • 他に有効なGPT署名はありますか?(デフォルトの「EFI PART」を除く)

回答:


23

署名EFI PART0x45 0x46 0x49 0x20 0x50 0x41 0x52 0x54)は、単に「これはGUIDパーティションテーブルです」と言います。ブロックデバイスがGPTレイアウトでフォーマットされていることをソフトウェアが認識する方法です。

この16進ダンプのスニペットから確認できます。

*
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
00000210  ea b5 99 a4 00 00 00 00  01 00 00 00 00 00 00 00  |................|
00000220  af 12 9e 3b 00 00 00 00  22 00 00 00 00 00 00 00  |...;....".......|
00000230  8e 12 9e 3b 00 00 00 00  7f 8c d6 05 c8 e8 01 4a  |...;...........J|
00000240  b8 74 6b 37 30 7c bf 15  02 00 00 00 00 00 00 00  |.tk70|..........|
00000250  80 00 00 00 80 00 00 00  10 d3 0e 29 00 00 00 00  |...........)....|
00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*

署名はGPTに固有のものではありません。ファイルには、ソフトウェアがファイルの内容を識別するために使用できる署名もあります。これがfileコマンドの動作メカニズムです。(のfile


フォローアップの質問への回答

この署名が空白の場合、GPTパーティションテーブルは認識されませんか?

少なくとも、gdiskもはや認識しません。このデモをご覧ください:

  1. デモ用のファイル(ブロックデバイスとして機能)を作成します。

    root@demo [/tmp]# truncate -s 1M gpt-demo
    
  2. GPTでファイルをフォーマットします。

    root@demo [/tmp]# sgdisk --clear gpt-demo
    Creating new GPT entries.
    Warning: The kernel is still using the old partition table.
    The new table will be used at the next reboot or after you
    run partprobe(8) or kpartx(8)
    The operation has completed successfully.
    
  3. パーティションテーブルのバイナリデータを確認します。

    root@demo [/tmp]# hexdump -C gpt-demo
    00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001c0  02 00 ee 20 20 00 01 00  00 00 ff 07 00 00 00 00  |...  ...........|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
    00000210  13 14 6d 6a 00 00 00 00  01 00 00 00 00 00 00 00  |..mj............|
    00000220  ff 07 00 00 00 00 00 00  22 00 00 00 00 00 00 00  |........".......|
    00000230  de 07 00 00 00 00 00 00  be 2c cb 6e 58 d4 e3 46  |.........,.nX..F|
    00000240  84 84 3c 83 52 59 5b 58  02 00 00 00 00 00 00 00  |..<.RY[X........|
    00000250  80 00 00 00 80 00 00 00  86 d2 54 ab 00 00 00 00  |..........T.....|
    00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000ffe00  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
    000ffe10  18 3a 1f d9 00 00 00 00  ff 07 00 00 00 00 00 00  |.:..............|
    000ffe20  01 00 00 00 00 00 00 00  22 00 00 00 00 00 00 00  |........".......|
    000ffe30  de 07 00 00 00 00 00 00  be 2c cb 6e 58 d4 e3 46  |.........,.nX..F|
    000ffe40  84 84 3c 83 52 59 5b 58  df 07 00 00 00 00 00 00  |..<.RY[X........|
    000ffe50  80 00 00 00 80 00 00 00  86 d2 54 ab 00 00 00 00  |..........T.....|
    000ffe60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00100000
    
  4. gdiskパーティションテーブルの読み取り方法を調べます。

    root@demo [/tmp]# gdisk gpt-demo
    GPT fdisk (gdisk) version 1.0.3
    
    Partition table scan:
      MBR: protective
      BSD: not present
      APM: not present
      GPT: present
    
    Found valid GPT with protective MBR; using GPT.
    
    Command (? for help): q
    
  5. GPT署名を変更します。

    root@demo [/tmp]# sed -i 's/EFI PART/IGNOREME/g' gpt-demo
    
  6. 署名が偽造されたことを確認します。

    root@demo [/tmp]# hexdump -C gpt-demo
    00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001c0  02 00 ee 20 20 00 01 00  00 00 ff 07 00 00 00 00  |...  ...........|
    000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  49 47 4e 4f 52 45 4d 45  00 00 01 00 5c 00 00 00  |IGNOREME....\...|
    00000210  13 14 6d 6a 00 00 00 00  01 00 00 00 00 00 00 00  |..mj............|
    00000220  ff 07 00 00 00 00 00 00  22 00 00 00 00 00 00 00  |........".......|
    00000230  de 07 00 00 00 00 00 00  be 2c cb 6e 58 d4 e3 46  |.........,.nX..F|
    00000240  84 84 3c 83 52 59 5b 58  02 00 00 00 00 00 00 00  |..<.RY[X........|
    00000250  80 00 00 00 80 00 00 00  86 d2 54 ab 00 00 00 00  |..........T.....|
    00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000ffe00  49 47 4e 4f 52 45 4d 45  00 00 01 00 5c 00 00 00  |IGNOREME....\...|
    000ffe10  18 3a 1f d9 00 00 00 00  ff 07 00 00 00 00 00 00  |.:..............|
    000ffe20  01 00 00 00 00 00 00 00  22 00 00 00 00 00 00 00  |........".......|
    000ffe30  de 07 00 00 00 00 00 00  be 2c cb 6e 58 d4 e3 46  |.........,.nX..F|
    000ffe40  84 84 3c 83 52 59 5b 58  df 07 00 00 00 00 00 00  |..<.RY[X........|
    000ffe50  80 00 00 00 80 00 00 00  86 d2 54 ab 00 00 00 00  |..........T.....|
    000ffe60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00100000
    
  7. GUIDパーティションテーブル(GPT)が認識されなくなったことに注意してくださいgdisk

    root@demo [/tmp]# gdisk gpt-demo
    GPT fdisk (gdisk) version 1.0.3
    
    Partition table scan:
      MBR: protective
      BSD: not present
      APM: not present
      GPT: not present
    
    Creating new GPT entries.
    
    Command (? for help): q
    

現在、署名が「IGNOREME」に設定されているように見えるChrome OS GPTを検査しています。どんな効果があるか知っていますか?

上記のデモからわかる限り、署名がと異なる場合EFI PART、GPTは認識されません。

IGNOREME「署名は」クロムによって作成された特別な署名です。これは私が見つけIGNOREMEドキュメントです

cgptlib: Add support for IGNOREME GPT signature

This patch makes cgpt aware of a special "IGNOREME" GPT header signature
string that may appear in either the primary or the secondary GPT and
cause cgpt (and other cgptlib clients) to completely ignore that GPT. It
will continue to function correctly for all other purposes (using the
data from the non-ignored GPT), but never write any data back to the
ignored GPT.

BRANCH=None
BUG=chrome-os-partner:52595
TEST=unit tests

Change-Id: I7e53542385ae9d8d24dc25b75e91f4ff4917f66f
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/340072
Reviewed-by: Nam Nguyen <namnguyen@google.com>

ディスク/ブロックデバイスの最後でセカンダリGPTを確認しましたか?

他に有効なGPT署名はありますか?

いいえ、UEFI仕様EFI PARTで唯一の署名であるため、署名以外はありません(123ページを参照)。(UEFI仕様バージョン2.7(エラータA)のアーカイブコピー


これは面白いです、ありがとう。この署名が空白の場合、GPTパーティションテーブルは認識されませんか?現在、署名が「IGNOREME」に設定されているように見えるChrome OS GPTを検査しています。どんな効果があるか知っていますか?他に有効なGPT署名はありますか?
Time4Tea

3
@ Time4Tea:上記の回答の編集で、フォローアップの質問に回答しました。
デルティック

1
素晴らしい編集。このような詳細な回答をありがとうございます!
Time4Tea

したがって、「IGNOREME」はChromium / Chrome OSにとって何か意味があるかもしれませんが、デバイスを「通常の」Linuxシステムに接続すると、おそらく認識されないでしょうか?
Time4Tea

2
@ Time4Tea:正しい。私の答えのデモから、署名をに変更した後、LinuxはGPTレイアウトを認識できなくなることがわかりIGNOREMEます。
デルティック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.