PC起動時のフロー - MBRとブートローダとパーティションテーブル
先日、Linuxを入れていたPCにWindowsを入れようとしたら上手くブートできなくなるという事態が発生したので、これを期にブート回りをちゃんと勉強しなおしてみました。
忘れないようにメモ書き。
PC起動時のフロー
MBRとは
マスターブートレコード(Master Boot Record)の略。
ハードディスクの先頭部分(セクタ)に置かれ、パソコン起動時に最初に読み込まれる。
PC/AT互換機におけるマスターブートレコードの構造は以下
アドレス | 内容 | サイズ |
---|---|---|
0000 | ブートローダ | 446 |
01BE | パーティションテーブル | 64 |
01FE | ブートシグニチャ | 2 |
ブートローダとは
またはブートストラップローダ、マスターブートローダ、マスターブートコード、イニシャル・プログラム・ローダ(正式な名称はない)。
電源を入れた後、OS起動までの一連の処理を行うソフトウェア。
ブートローダは多段階で使われ、MBRに記録されたプログラムがさらに別のプログラムを呼ぶ。
MBRに記録されているプログラムは非常に小さいが、OSをロードして起動するための別のプログラムをロードするには十分な機能を持っている。
パーティションテーブルとは
ディスクのパーティション情報を管理している領域。
4エントリあり、それぞれ以下の情報を持つ。
アドレス | 内容 | サイズ |
---|---|---|
0x00 | ブート可能かどうかのフラグ(「PC起動時のフロー」での起動フラグはこれ) | 1 |
0x01 | パーティションの開始位置(CHS方式) | 3 |
0x04 | パーティションのタイプ(NTFSとかFAT32とか) | 1 |
0x05 | パーティションの終了位置(CHS方式) | 3 |
0x08 | パーティションの開始位置(LBA方式) | 4 |
0x0C | 総セクター数(LBA方式) | 4 |
サンプル
自分のWinPCのMBRをダンプして、パーティションテーブル部分を抜き出してみたのが下記。
第1エントリ - 80 00 01 fe 07 ff ff 00 3f 00 00 ea cc 09 ff 00 第2エントリ - 00 ff c1 fe 0f ff ff eb 0b 09 ff ac f5 1b 42 00 第3エントリ - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 第4エントリ - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
第1エントリに起動フラグが立っていて、第2エントリは拡張DOS領域(拡張パーティション)となっている事等が分かる。(第3エントリ、第4エントリはnull)
ここで示されている各パーティションの先頭位置にはブートセクタ (PBR) が存在するが、拡張パーティションの場合はMBRと同じ構成の拡張ブートレコード (EPBR)が存在し、パーティションテーブルの最初の2エントリのみが使用される(拡張パーティションテーブル)。
この拡張ブートレコード (EPBR)は、第1エントリに自身のブートセクタ(PBR)の位置を、第2エントリに次のパーティションのEPBRの位置を管理することにより、入れ子になる形で多数のパーティションの作成が可能となっている。