ブートセクタは、ハードディスクの最初のセクタのことで、オペレーティングシステムにプロセッサの制御権をロード・転送するために使われるものです。この記事では、ブートセクタとは何か、そしてどのように機能するかについて解説します。
ブートセクタは通常、ハードディスクの最初のセクタを指し、プロセッサの制御権をオペレーティングシステムに直接渡すために使われます。
マスターブートセクタ(MBR)
ハードディスクのシリンダー0、ヘッド0、セクタ1は、マスターブートセクタあるいはマスターブートレコードと呼ばれます。
このレコードは512バイトです。ハードディスクが起動すると、ユーザー指定によりパーティションテーブルに登録された特定のオペレーティングシステムパーティションにシステム制御権を転送します。パーティション分割ソフトウェアがパーティションを分割する際に、MBRの内容が特定のセクタに書き込まれます。
BRはどのオペレーティングシステムにも属さず、オペレーティングシステムの変更と無関係に変更されることはありません。MBRが変更されても、オペレーティングシステムの性質が変わるというよりは、共通のガイドといえる特性を持っています。ただし、マルチブート機能を持つソフトウェアやLinuxのLILOをインストールする際には、書き換えられる可能性があります。MBRはメモリに読み込まれるために呼び出され、最初に役割を果たします。その後、制御をアクティブパーティションに直接渡します。
MBRに含まれるもの
- 446バイトのマスターブートプログラムコード
- ディスクシグネチャ
- 64バイトのハードディスクパーティションテーブル
- マスターブートセクタの終了マークは55AAH
ハードディスクのマスターブートプログラムが占有する446バイトは0000Hから01BDHまでです。マスターブートコードには実行コードの小片が含まれています。PCを起動すると、システムはまずハードウェアデバイスをテストします。テストが成功した後、ブートローダーINT 19Hがアクティブ化されます。そして、システムディスクのシリンダー0、ヘッド0、セクタ1(MBRの内容)が、メモリの最初にある指定された領域の先頭アドレス0:7C00に読み込まれます。最後にMBRブロックが実行されます。
MBR機能
- パーティションテーブルをスキャンしてアクティブパーティションを検出する
- アクティブパーティションの開始セクタを検索する
- アクティブパーティションのブートセクタをメモリに読み込む
- ブートセクタコードを実行する
マスターブートコードがこれらの機能を完了できなかった場合、次のエラーメッセージが表示されます。
パーティションテーブルが無効です
オペレーティングシステムの読み込みエラー オペレーティングシステムが見つかりません
パーティションブートセクタ
パーティションブートセクタはDBRとも呼ばれ、シニアフォーマットコマンドによって特定のセクタに書き込まれる内容です。
DBRはハードディスクのMBRが読み込むブロックです。DBRがメモリに読み込まれた後、ブートブロックが開始されます。主な機能はオペレーティングシステムのブートストラップを完了し、OSに制御を移すことです。どのパーティションにもブートセクタがありますが、パーティションがアクティブに設定された後にのみ、DBRがブートセクタをメモリにロードして実行します。
DBRに含まれるもの
- 3バイトを保持するジャンプ命令は、ブートコードにジャンプする
- ベンダー識別とDOSバージョン番号は、計8バイトを保持
- BPB(BIOSパラメータブロック)
- オペレーティングシステム起動プログラム
- 値がAA55である終了マークは2バイト
終了マークに加えて、DBRの内容が不確定です。内容の他の4つの部分は、ハードディスクのフォーマットと論理パラメータを使用して、OSのバージョンの変更に伴って変更されます。
FAT 32パーティションのブートセクタ
ブートセクタはFAT 32ファイルシステムの最初のセクタで、DBRセクタとも呼ばれます。
BPBおよびFATボリュームのBPBドメインの拡張:
バイトオフセット ドメインの長さ 名称 定義
- 0x03、8バイト、OEM番号
- 0x0B、2バイト、セクタあたりのバイト数
- 0x0D, 1バイト、クラスタあたりのセクタ数
- 0x0E、2バイト、予約済みセクタ数
- 0x10、1バイト、FATテーブルの数
- 0x11、2バイト、ルートディレクトリエントリの数
- 0x13、2バイト、セクタの総数
- 0x15、1バイト、中間記述子の数
- 0x16、2バイト、FATセクタ数
- 0x18、2バイト、トラックごとのセクタ
- 0x1A、2バイト、ヘッド数
- 0x1C、4バイト、特殊な隠しセクタの数
- 0x20、4バイト、セクタの総数
- 0x24、4バイト、FATテーブルごとのセクタ数
- 0x28、2バイト、タグの数、FATテーブルの動作方法を決定。ビット7が1の場合、1つのFATテーブルのみがアクティブであり、同時にビット0~ビット3が記述。それ以外の場合、2つのFATテーブルが互いにミラーリング
- 0x2A、2バイト、バージョン数
- 0x2C、4バイト、ルートディレクトリの開始クラスタ番号、通常は2番目のクラスタ
- 0x30、2バイト、通常は1番目のセクタにあるFSINFOの場所を示すセクタ数
- 0x32、2 バイト、バックアップブートセクタの位置の数、通常は6番目のセクタ
- …
- 0xFE、2バイト、シグネチャ数、値「55AA」
NTFSパーティションのブートセクタ
NTFSパーティションの場合、パーティションブートセクタ(DBR)は1つのセクタしか使用しません。このパーティションの最後のセクタにバックアップがあります。NTFSパーティションのブートセクタも起動を完了し、パーティションのパラメータを定義します。システムレコード($MFTなど)が正常であれば、MFT内に正常にアクセスできます。
BPBおよびNTFSボリュームのBPBドメインの拡張:
バイトオフセット ドメインの長さ 名称 定義
- 0x03、2バイト、OEM名
- 0x0B、2バイト、セクタあたりのバイト数
- 0x0D, 1バイト、クラスタあたりのセクタ数
- 0x0E、2バイト、予約済みセクタ数
- 0x10、4バイト、未使用領域
- 0x15、1バイトの中間記述子
- 0x16、2バイト、未使用領域
- 0x18、2バイト、トラックあたりのセクタ
- 0x1A、2バイト、ヘッド数
- 0x1C、4バイト、隠しセクタ数
- 0x20、4バイト、NTFSでは未使用
- 0x24、4バイト、NTFSでは未使用
- 0x28、8バイト、セクタの総数
- 0x30、8バイト、ファイル $MFT の開始クラスタ数
- 0x38、8バイト、ファイル $MFT のバックアップクラスタ数
- 0x40、4バイト、クラスタに含まれる各ファイルレコードセグメントの数
- 0x44、4バイト、各インデックスブロック内のクラスタ数
- 0x48、8バイト、ボリュームシリアルの数
- 0x50、4バイト、チェックサムの数
- 0x54、426バイト、ブートコード数
- 0x1F、2バイト、シグネチャ数、値「55AA」