blank
MBR (マスタブートレコード)の解説

[MBR の構造]

ここでは PC/AT アーキテクチャでのブートの仕組みを理解するために 必要な MBR(マスタブートレコード) の構造について解説します。

PC/AT アーキテクチャではハードディスクの先頭 512 bytes の領域を MBR と呼び、そこには OS をブートするためのプログラムおよびハード ディスクの 4 つのパーティション情報が格納されています(図1参照)。 通常は 1 つのハードディスクには 4 つのパーティション(正確には基 本パーティション)しか作成できません。拡張パーティションを用いる ことで 5 つ以上のパーティションを作成することができますがここで は拡張パーティションには触れません。

MBR structure

図1. MBR の構造

ハードディスクの 0x0000 から 0x01BE (446 bytes)まではブートプロ グラムが、0x01BE から 0x01FE まではパーティション情報(16 * 4 = 64 bytes)が格納されています。0x01FE にはマジックナンバが入ってお り、MBR の検査に使われます。

パーティションテーブルの各エントリの内容は以下の通りです。
Active起動フラグ。ブート可能かどうかを 示す。DOS/Windows のブートローダではこのフラグがない領域からブー トできません。
Start CHSパーティションの開始位置。CHS (Cylinder, Head, Sector)で表現。
Patition IDパーティション種別。使用し ているファイルシステムの ID が入る。
End CHSパーティションの終了位置。CHS (Cylinder, Head, Sector) で表現。
Start Sector パーティションの開始位置。 LBA (Logical Block Address) で表現。
# of Sector パーティションサイズ。 LBA (Logical Block Address) で表現。

ここでパーティションの範囲をあらわすための情報として {Start CHS, End CHS} と {Start Sector, # of Sector}の組の二つが存在します。 従来は CHS 方式だけでしたので {Start CHS, End CHS} のみでパーティ ションの範囲をあらわしていました。CHS 値は 24 bits (C = 10 bits, H = 8 bits, S = 6 bits)で表現されており、1セクタ = 512 bytes 固定ですので 1パーティションの最大サイズは 2^24 * 512 = 8,589,934,592 bytes = 約 8 Gbytes となります。昔に世間を騒がせ た 8 G bytes の壁です。

これを解決するために採用されたのが LBA (Logical Block Addressing) 方式です。この方式は SCSI で用いられているものとほぼ 同様であり、CHS といったジオメトリでディスク上のアドレスを表現す るのではなく、リニアアドレスを用いてディスク上のアドレスを表現す る方式です。当時はパーティションテーブルにはまだ未使用の領域があっ たので、その領域を利用してLBA 方式をパーティションテーブルに導入 しました。ただ、LBA 方式自体が 8Gbytes の壁を突破したのではなく、 LBA 方式を導入するときに 32bits 値で範囲を表現することにしたため、 2^32* 512 = 2,199,023,255,552 bytes = 約 2200 GBytesまで表現可能 となったというほうが正確でしょう。ジオメトリ方式でも大きい値を表 現することは可能です(E-IDE 自体は約 128 GBytes まで表現できた)。

LBA 方式に BIOS, ハードディスクコントローラの両方が対応すること によって 8 Gbytes の壁が突破できるようになりました。ちなみに 32 GBytes の壁も少し問題になりましたが、それは LBA 方式に対応すると きに一気に 32 bits に対応したのではなく、数 bit 拡張したのみだっ たことに起因します。

ここまでがブートシーケンスの理解に必要な MBR に関する最低限の情 報です。理解を簡単にするためにすこし大まかな説明になっていますが、 概要はつかめてもらえたと思います。