ディスクアドレッシングとパーティションテーブル

最終更新: 2024-02-16 16:23:16 +0800 +0800
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

ディスクアドレスはセクターを識別し、パーティションテーブルは、その結果得られるアドレス 空間を領域に分割します。ファイルシステムはそれらの領域の一部を占有しますが、別の フォーマット層に属します。各層を明確に区別すると、廃止されたジオメトリフィールドが 現代の論理アドレッシングと共存できる理由を理解できます。

物理 CHS ジオメトリと変換された CHS ジオメトリ #

シリンダー・ヘッド・セクター(CHS)アドレッシングは、回転ディスクを 3 つの 座標でモデル化します。

  • シリンダーは、プラッターの各記録面にまたがる同じ半径位置のトラックを選択します。
  • ヘッドは、記録面を選択します。
  • セクターは、そのトラック内で番号が付けられたレコードを選択します。

BIOS の INT 13h インターフェイスと初期の IBM PC パーティションテーブルは CHS を エンコードしていましたが、それぞれのフィールドは同じ規模には拡張できませんでした。 従来の MBR エントリーは、シリンダーに 10 ビット、ヘッドに 8 ビット、1 から始まる セクター番号に 6 ビットを割り当てます。したがって、エンコード可能な最大ジオメトリは 1024 シリンダー、256 ヘッド、1 トラックあたり 63 セクターです。512 バイトの セクターを使用する場合、これらのフィールドで表現できる容量は最大約 8.4 GB です。

実際のドライブでもゾーンビット記録、予備セクターへの再マッピング、組み込み コントローラーが使われるようになったため、単一の固定されたトラックあたりセクター数では 媒体を表現できなくなりました。BIOS とドライブファームウェアは、変換されたジオメトリや 仮想的なジオメトリを使って対応しました。その結果、古いパーティションエントリー内の CHS タプルは、物理トラックの位置ではなく互換性メタデータの場合があります。

論理ブロックアドレッシングと容量 #

論理ブロックアドレッシング(LBA)は、アドレス指定可能なセクターに 0 から番号を 付けます。ホストは LBA 0、LBA 1 のように要求し、デバイスは各番号を内部媒体に マッピングします。容量は、論理ブロックの数とサイズから直接算出されます。

text
capacity in bytes = logical-block count × logical-block size

MBR パーティションエントリーには、32 ビットの開始 LBA と 32 ビットのセクター数が 格納されます。1 セクターが 512 バイトの場合、セクター数フィールドによって 1 つの パーティションは 2 TiB 弱に制限されます。4096 バイトの論理ブロックを公開する ドライブでは、この算術上の上限が変わりますが、従来のファームウェアやソフトウェアとの 互換性によって別の制約が課される場合があります。LBA は CHS 変換を不要にしますが、 LBA を格納するすべてのフィールドの幅を無制限にするわけではありません。

MBR ブートストラップとパーティションエントリー #

従来のレイアウトでは、マスターブートレコードは先頭の 512 バイト論理セクターを 占有します。その一般的な構造は次のとおりです。

オフセットサイズ用途
0446 バイトブートストラップコードと実装固有のデータ
44664 バイト16 バイトのパーティションエントリー 4 個
5102 バイト0x55AA シグネチャ

各エントリーには、ブートインジケーター、パーティション種別バイト、開始および終了 CHS フィールド、開始 LBA、セクター数が含まれます。BIOS ブートストラップは アクティブなエントリーを調べ、選択されたパーティションからコードをロードできます。 テーブル自体はファイルシステムを定義せず、パーティションにブートコードが含まれることも 保証しません。

拡張パーティション #

4 個のエントリーでは制約が厳しかったため、MBR システムは拡張パーティション用に パーティション種別の値を予約しています。拡張領域には、拡張ブートレコード(EBR)が 連結されたシーケンスとして格納されます。

  1. 最初の EBR エントリーは、その EBR からの相対位置で 1 つの論理パーティションを 記述します。
  2. 2 番目のエントリーが存在する場合は、それを含む拡張パーティションの先頭からの 相対位置で次の EBR を指します。
  3. リンクをたどることで、論理パーティションを列挙できます。

したがって、拡張パーティションはメタデータと論理パーティションのコンテナーであり、 追加のファイルシステムボリューム 1 個ではありません。EBR チェーン内のオフセットが 壊れていたりループがあったりすると、ファイルシステムデータが残っていても、後続の パーティションが見えなくなる場合があります。

ボリュームブートレコード #

BIOS ブートに使用するパーティションは、多くの場合、ボリュームブートレコード(VBR) から始まります。FAT の VBR は、初期マシンコードと、ボリュームを記述する BIOS Parameter Block を組み合わせたものです。NTFS などのブート可能なファイルシステムは、 それぞれ独自の先頭セクターフォーマットを定義しています。MBR はパーティションの位置を 特定し、VBR とファイルシステムメタデータはその内容を解釈します。どちらの構造も、 もう一方の代わりにはなりません。

GUID パーティションテーブル #

UEFI の一部として標準化された GUID パーティションテーブル(GPT)は、4 エントリーの 配列と 32 ビットの MBR LBA を、自己記述型のレイアウトに置き換えます。一般的な ディスクには次の要素があります。

  1. LBA 0 の保護 MBR
  2. LBA 1 のプライマリ GPT ヘッダー
  3. プライマリパーティションエントリー配列
  4. パーティションに使用可能な LBA
  5. ディスク終端付近のバックアップパーティションエントリー配列
  6. 最後の論理ブロックにあるバックアップ GPT ヘッダー

ヘッダーには、自身の LBA、代替ヘッダーの LBA、使用可能な LBA の範囲、ディスク GUID、エントリー配列の位置と構成、およびヘッダーとエントリー配列それぞれの CRC32 チェックサムが記録されます。一方のコピーが破損した場合に復旧できるだけのメタデータが バックアップに格納されていますが、修復ソフトウェアは、有効なコピーのうち意図した レイアウトを反映しているものを判断する必要があります。

各パーティションエントリーには、パーティション種別 GUID、一意のパーティション GUID、 先頭と末尾の 64 ビット LBA、属性、UTF-16LE の名前が格納されます。種別 GUID は パーティションの意図された役割を示し、一意の GUID は個々のパーティションを識別します。 どちらの GUID も、存在するファイルシステムを証明するものではありません。

保護 MBR には通常、32 ビットの MBR サイズで許容される範囲まで GPT ディスクを覆う 0xEE エントリーがあります。その目的は防御です。MBR のみを扱うプログラムには、 ディスクの再パーティション化を提案させるのではなく、ディスクが使用中であると認識させます。 ハイブリッド MBR は、選択された GPT パーティションを従来のエントリーに複製しますが、 2 つのテーブルは乖離する可能性があり、標準の保護レイアウトではありません。

アドレッシング、パーティショニング、ファイルシステムを分離する #

ストレージツールは異なる層で動作します。

  • デバイスは、論理ブロックとそのサイズを報告します。
  • MBR または GPT メタデータは、それらのブロックの範囲をパーティションに割り当てます。
  • ファイルシステムは、割り当てられた 1 つの範囲内のブロックを、ブートレコード、 割り当て構造、ディレクトリー、ファイルデータとして解釈します。

パーティション境界を変更しても、内部のファイルシステムのサイズは変更されません。 パーティションをフォーマットしても、その GPT エントリーは再作成されません。同様に、 あるオフセットで見つかったファイルシステムシグネチャは、パーティションエントリーが 削除された後も残る場合があります。安全な復旧および移行ツールは、ある層から別の層を 推測するのではなく、3 つの層すべてを検証する必要があります。

参考資料 #

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)