MBR (マスター ブート レコード) 形式に関する完全な RFC ドキュメントはありますか? 説明付きの方が良いでしょうか?

MBR (マスター ブート レコード) 形式に関する完全な RFC ドキュメントはありますか? 説明付きの方が良いでしょうか?

私はシステム内のパーティションを列挙するコードを設計しています。多数のドキュメントを読んでも、アルゴリズムの制約の完全かつ明確なリストを考案できず、制約が存在する理由もわかりません。

  • ルート MBR には 4 つのエントリがあり、したがって MBR には 4 つのプライマリ パーティションが含まれる可能性があります。
  • このルート MBR のリストには、拡張パーティションが 1 つだけ存在し、それが論理ボリュームを持つセカンダリ MBR にチェーンダウンされる場合があります。

質問:

  1. DOS 6.22 FDISK では、プライマリ パーティションを 3 つ作成できず、1 つしか作成できないのはなぜですか?
  2. 拡張パーティション チェーンのセカンダリ MBR には、論理ボリュームが 3 つある可能性があるのに (拡張パーティション リスト用に 2 つの追加リンクを保存)、論理ボリュームが 1 つしか存在してはならないのはなぜですか?
  3. 拡張パーティションがチェーンの最後まで論理ドライブに対してチェックされた場合、列挙はルート MBR に戻り、拡張パーティション エントリの次のエントリから続行されますか? なぜそうならないのですか?
  4. MBR エントリが制約に従っていないことがわかった場合、DOS または Windows OS はどうなりますか (上記の質問 1 ~ 3 を参照)。つまり、オペレーティング システムがパーティション/論理ドライブを列挙するプロセスについての説明はありますか。

答え1

マスター ブート レコードは、IBM PC 互換システムで使用されるブート セクターの一種です。MBR のオリジナル バージョンは、1982 年 6 月に IBM の David Litton によって作成され、1983 年に PC-DOS 2.0 で公開されました。ただし、PC-DOS ではすべての機能ではなく、最も重要な機能のみが実装されていました。

「仕様」に最も近いもの(私が知る限り)はhttps://thestarman.pcministry.com/asm/mbr/STDMBR.htm

MBR 構造は次のとおりです。

アドレス 16 進数 (10 進数) サイズ 関数
0x0000 (0) 440 ブートローダー
0x01B8 (440) 4 ディスク署名 (Windows NT ファミリ以降)
0x01BC と 0x01BC (444 と 445) 2 ゼロ (0x0000)
0x01BE (446) 64 パーティションテーブル
0x01FE と 0x01FF (510 と 511) 2 サイン
合計 512

回答:

  1. DOS 6.22 FDISK では、プライマリ パーティションを 3 つ作成できず、1 つしか作成できないのはなぜですか?

パーティション化されたメディアのサポートは、1983年3月にIBM PC DOS 2.0で導入されましたが、当時は1つのプライマリパーティションしかサポートしていませんでした。これは変更されませんでした。DOS自体は一度もない複数のプライマリ パーティションを使用しました。その結果、FDISK複数のプライマリ パーティションを作成することはできません。

  1. 拡張パーティション チェーンのセカンダリ MBR には、論理ボリュームが 3 つある可能性があるのに (拡張パーティション リスト用に 2 つの追加リンクを保存)、論理ボリュームが 1 つしか存在してはならないのはなぜですか?

「セカンダリ MBR」が正確に何を意味するのかよくわからないので、結局、以下はあなたの質問に答えていません。(慎重に扱ってください!)

拡張パーティションのサポートは DOS 3.2 で追加されました。拡張パーティション内のネストされた論理ドライブは DOS 3.30 で導入されました。

各拡張パーティション テーブルは、正確に 1 つの論理パーティションを定義し、必要に応じて次の拡張パーティション テーブルを指します。言い換えると、拡張パーティション テーブルは連鎖リストの原則に従って動作します。その開始セクターは、現在のパーティション テーブルの位置を基準にして指定されます。2 番目のエントリには、別の拡張パーティション テーブルへの連結を含めることができ、常にタイプ 5 になります。このエントリの開始セクターは、常に最初の拡張パーティションのセクターを基準にして参照されます。定義により連鎖されているため、すべての拡張パーティションを参照することはできません。したがって、2 つの追加リンクを保存することはできません。

  1. 拡張パーティションがチェーンの最後まで論理ドライブに対してチェックされた場合、列挙はルート MBR に戻り、拡張パーティション エントリの次のエントリから続行されますか? なぜそうならないのですか?

いいえ。「次のエントリ」というものは存在しません。

  1. MBR エントリが制約に従っていないことがわかった場合、DOS または Windows OS はどうなりますか (上記の質問 1 ~ 3 を参照)。つまり、オペレーティング システムがパーティション/論理ドライブを列挙するプロセスについての説明はありますか。

パーティションが認識できない場合は使用されません。最初のプライマリ パーティションが見つからない場合、DOS/Windows は起動できません。

注記: 以前のバージョンの Windows では、MS-DOS によって決定されるドライブ文字に依存していましたが、Windows 2000 では、これらのマッピングは HKLM\SYSTEM\MountedDevices などのレジストリ キーに保存されます。特定のシステム構成では、ディスク署名は、Windows NT ブート ローダー (NTLDR) の一部である boot.ini ファイルでも使用されます。Windows は、新しいディスクが初期化されるときにディスク署名を割り当てます。

関連情報