マスターブートレコード

From Wikipedia, the free encyclopedia

マスターブートレコード: Master Boot Record、略称MBR)とは、PC/AT互換機において、単数または複数のパーティションに分けられたディスク[注釈 1]のパーティション外に存在する先頭セクタであり、ブートセクタの一種である。コンピュータの起動に必要なプログラムや情報を記録した小さな領域であり、起動時の処理過程(ブートプロセス)で最初に読み込まれる[1]

PC/AT互換機では、BIOSはセクタ長が512バイトで先頭1セクタのみのロードしか保証しないため、MBRのサイズは512バイトである。アドレス0(先頭)- 445(計446バイト)にブートストラップローダ、うちアドレス440 - 444(計4バイト)にディスクMBRシグネチャ (disk MBR signature)、アドレス446 - 509(計64バイト)にパーティションテーブル (partition table)、アドレス510 - 511(計2バイト)にブートシグネチャ (boot signature) がある[2][注釈 2]

さらに見る アドレス, 内容 ...
マスターブートレコードの構造
アドレス 内容 サイズ(バイト)
Hex Dec
0000 0ブートストラップローダ 446
01BE 446 第1パーティション パーティションテーブル(各16バイト) 64
01CE 462 第2パーティション
01DE 478 第3パーティション
01EE 494 第4パーティション
01FE 510 55h ブートシグネチャ; 0xAA55(リトルエンディアン 2
01FF 511 AAh
MBRサイズ 512
閉じる

ブートストラップローダ

ブートストラップローダは、マスターブートローダ、マスターブートコード、イニシャルプログラムローダ (IPL) などとも呼ばれる。この領域には、IBM PCでは、

  1. 自身をメモリ上へコピーし起動したのち、ブート可能フラグが立っているパーティション(これを「アクティブなパーティション」と称する)を探し、
  2. そのパーティションブートセクタに含まれるブートストラップローダをロードし、それへ制御を渡す

という単純な起動プログラムが入っており、このプログラムコードはIBMマイクロソフトによって開発されたものであるが、どのオペレーティングシステム (OS) もデファクトスタンダードとして利用していた。

しかし、この方式では、違うパーティションに切り替えて起動する際には、OSをシャットダウンする前に、かならずそれぞれのOS内でユーティリティプログラムを実行してアクティブなパーティションを再設定しなければならず、不便であった。このため、起動時にメニュー方式で選択できる各種のプログラムがよく使われるようになった。

ブートストラップローダの動作詳細

以下はブートシーケンスのうちブートストラップローダが担う部分である。

  1. パーティションテーブルを4つのテーブルエントリーの先頭から検査し、起動フラグが立っている基本領域(アクティブなパーティション)がないか探す。
  2. 起動フラグが立っている基本領域が見つかったらその領域の先頭位置をパーティションテーブルから取得する。
  3. BIOSにその位置を示してメモリにロードしてもらい、IPLに制御を渡す。

パーティションテーブル

パーティションに関する情報を記録している。4つのエントリがあり1つあたり16バイトである。各エントリにはそのパーティションの位置情報、種類、起動フラグが記録されている。

さらに見る オフセット, 内容 ...
各エントリの構造
オフセット 内容 サイズ
Hex Dec
0x00 0 ブートフラグ0x80 = ブート可, 0x00 = ブート不可) 1
0x01 1 パーティションの最初のセクタ。CHS 方式での値。ヘッド 3
シリンダの上位2ビットとセクタ
シリンダの下位8ビット
0x04 4 パーティションの種類(パーティション識別子)。 1
0x05 5 パーティションの最後のセクタ。CHS 方式での値。ヘッド 3
シリンダの上位2ビットとセクタ
シリンダの下位8ビット
0x08 8 パーティションの最初のセクタ。LBA 方式での値。 4
0x0C 12 パーティションの全セクタ数 4
閉じる

パーティション識別子

さらに見る 格納値(16進値), ファイルシステム名 ...
パーティションの種類
格納値(16進値)ファイルシステム名
0x00空のパーティション
0x01 / 0x11FAT12(後者は隠し、以下0x01 - 0x0Fに対する0x11 - 0x1Fは同様)
0x04 / 0x14FAT16(32MB以下)
0x05 / 0x15拡張DOS領域
0x06 / 0x16FAT16(32MBより大きい)
0x07 / 0x17HPFS / NTFS / exFAT
0x0B / 0x1BFAT32
0x0C / 0x1CFAT32(LBA対応)
0x0E / 0x1EFAT16(LBA対応)
0x0F / 0x1F拡張DOS領域(LBA対応)
0x13超漢字のファイルシステム
0x39Plan 9のファイルシステム
0x71EOTAのSFSファイルシステム[3]
0x81MINIXファイルシステム / ext1
0x82Linux スワップパーティション / Solaris 10以前のファイルシステム
0x83ext2などのLinuxファイルシステム
0x85Linux拡張領域
0xA0サスペンド領域
0xA5FreeBSD Unix File System (FFS/UFS1/UFS2)
0xA6OpenBSD UFS
0xA9NetBSD UFS
0xBESolarisにおけるブート用パーティション(ミニルート)
0xBFSolarisのファイルシステム[4]
0xC1DR-DOSのファイルシステム
0xC4DR-DOSのファイルシステム
0xC6DR-DOSのファイルシステム(32Mより大きい)
0xEBBeOSのファイルシステム
0xEEGPT
0xEFEFIシステムパーティション (FAT12/FAT16/FAT32)
閉じる

ブートシグネチャ

ここには0xAA55という値がマジックナンバーとして必ず入っている(リトルエンディアンなのでアドレス順と格納される値に注意)。これはこのMBRが有効であるという署名で、これがない場合はこのMBRは無効として扱われる。

ブートレコードの復元

Windows NTWindows 2000Windows XPの場合
回復コンソールfixmbrを実行すればよい。または、WindowsのCD-ROMで起動しRキーで修復すればよい。
DOSWindows 95Windows 98/98SEWindows Meの場合
FDから起動し、fdisk /mbrを実行すればよい。

脚注

関連項目

Related Articles

Wikiwand AI