ディスクアドレスはセクターを識別し、パーティションテーブルは、その結果得られるアドレス 空間を領域に分割します。ファイルシステムはそれらの領域の一部を占有しますが、別の フォーマット層に属します。各層を明確に区別すると、廃止されたジオメトリフィールドが 現代の論理アドレッシングと共存できる理由を理解できます。
物理 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 のように要求し、デバイスは各番号を内部媒体に マッピングします。容量は、論理ブロックの数とサイズから直接算出されます。
capacity in bytes = logical-block count × logical-block sizeMBR パーティションエントリーには、32 ビットの開始 LBA と 32 ビットのセクター数が 格納されます。1 セクターが 512 バイトの場合、セクター数フィールドによって 1 つの パーティションは 2 TiB 弱に制限されます。4096 バイトの論理ブロックを公開する ドライブでは、この算術上の上限が変わりますが、従来のファームウェアやソフトウェアとの 互換性によって別の制約が課される場合があります。LBA は CHS 変換を不要にしますが、 LBA を格納するすべてのフィールドの幅を無制限にするわけではありません。
MBR ブートストラップとパーティションエントリー #
従来のレイアウトでは、マスターブートレコードは先頭の 512 バイト論理セクターを 占有します。その一般的な構造は次のとおりです。
| オフセット | サイズ | 用途 |
|---|---|---|
| 0 | 446 バイト | ブートストラップコードと実装固有のデータ |
| 446 | 64 バイト | 16 バイトのパーティションエントリー 4 個 |
| 510 | 2 バイト | 0x55AA シグネチャ |
各エントリーには、ブートインジケーター、パーティション種別バイト、開始および終了 CHS フィールド、開始 LBA、セクター数が含まれます。BIOS ブートストラップは アクティブなエントリーを調べ、選択されたパーティションからコードをロードできます。 テーブル自体はファイルシステムを定義せず、パーティションにブートコードが含まれることも 保証しません。
拡張パーティション #
4 個のエントリーでは制約が厳しかったため、MBR システムは拡張パーティション用に パーティション種別の値を予約しています。拡張領域には、拡張ブートレコード(EBR)が 連結されたシーケンスとして格納されます。
- 最初の EBR エントリーは、その EBR からの相対位置で 1 つの論理パーティションを 記述します。
- 2 番目のエントリーが存在する場合は、それを含む拡張パーティションの先頭からの 相対位置で次の EBR を指します。
- リンクをたどることで、論理パーティションを列挙できます。
したがって、拡張パーティションはメタデータと論理パーティションのコンテナーであり、 追加のファイルシステムボリューム 1 個ではありません。EBR チェーン内のオフセットが 壊れていたりループがあったりすると、ファイルシステムデータが残っていても、後続の パーティションが見えなくなる場合があります。
ボリュームブートレコード #
BIOS ブートに使用するパーティションは、多くの場合、ボリュームブートレコード(VBR) から始まります。FAT の VBR は、初期マシンコードと、ボリュームを記述する BIOS Parameter Block を組み合わせたものです。NTFS などのブート可能なファイルシステムは、 それぞれ独自の先頭セクターフォーマットを定義しています。MBR はパーティションの位置を 特定し、VBR とファイルシステムメタデータはその内容を解釈します。どちらの構造も、 もう一方の代わりにはなりません。
GUID パーティションテーブル #
UEFI の一部として標準化された GUID パーティションテーブル(GPT)は、4 エントリーの 配列と 32 ビットの MBR LBA を、自己記述型のレイアウトに置き換えます。一般的な ディスクには次の要素があります。
- LBA 0 の保護 MBR
- LBA 1 のプライマリ GPT ヘッダー
- プライマリパーティションエントリー配列
- パーティションに使用可能な LBA
- ディスク終端付近のバックアップパーティションエントリー配列
- 最後の論理ブロックにあるバックアップ 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 で閲覧・コメントする(投稿にはログインが必要です)