ブートセクタは、ハードディスクの最初のセクタのことで、オペレーティングシステムにプロセッサの制御権をロード・転送するために使われるものです。この記事では、ブートセクタとは何か、そしてどのように機能するかについて解説します。

ブートセクタは通常、ハードディスクの最初のセクタを指し、プロセッサの制御権をオペレーティングシステムに直接渡すために使われます。

マスターブートセクタ(MBR)

ハードディスクのシリンダー0、ヘッド0、セクタ1は、マスターブートセクタあるいはマスターブートレコードと呼ばれます。

このレコードは512バイトです。ハードディスクが起動すると、ユーザー指定によりパーティションテーブルに登録された特定のオペレーティングシステムパーティションにシステム制御権を転送します。パーティション分割ソフトウェアがパーティションを分割する際に、MBRの内容が特定のセクタに書き込まれます。

BRはどのオペレーティングシステムにも属さず、オペレーティングシステムの変更と無関係に変更されることはありません。MBRが変更されても、オペレーティングシステムの性質が変わるというよりは、共通のガイドといえる特性を持っています。ただし、マルチブート機能を持つソフトウェアやLinuxのLILOをインストールする際には、書き換えられる可能性があります。MBRはメモリに読み込まれるために呼び出され、最初に役割を果たします。その後、制御をアクティブパーティションに直接渡します。

MBRに含まれるもの

  1. 446バイトのマスターブートプログラムコード
  2. ディスクシグネチャ
  3. 64バイトのハードディスクパーティションテーブル
  4. マスターブートセクタの終了マークは55AAH

ハードディスクのマスターブートプログラムが占有する446バイトは0000Hから01BDHまでです。マスターブートコードには実行コードの小片が含まれています。PCを起動すると、システムはまずハードウェアデバイスをテストします。テストが成功した後、ブートローダーINT 19Hがアクティブ化されます。そして、システムディスクのシリンダー0、ヘッド0、セクタ1(MBRの内容)が、メモリの最初にある指定された領域の先頭アドレス0:7C00に読み込まれます。最後にMBRブロックが実行されます。

MBR機能

  1. パーティションテーブルをスキャンしてアクティブパーティションを検出する
  2. アクティブパーティションの開始セクタを検索する
  3. アクティブパーティションのブートセクタをメモリに読み込む
  4. ブートセクタコードを実行する

マスターブートコードがこれらの機能を完了できなかった場合、次のエラーメッセージが表示されます。

パーティションテーブルが無効です

オペレーティングシステムの読み込みエラー オペレーティングシステムが見つかりません

パーティションブートセクタ

パーティションブートセクタはDBRとも呼ばれ、シニアフォーマットコマンドによって特定のセクタに書き込まれる内容です。

DBRはハードディスクのMBRが読み込むブロックです。DBRがメモリに読み込まれた後、ブートブロックが開始されます。主な機能はオペレーティングシステムのブートストラップを完了し、OSに制御を移すことです。どのパーティションにもブートセクタがありますが、パーティションがアクティブに設定された後にのみ、DBRがブートセクタをメモリにロードして実行します。

DBRに含まれるもの

  1. 3バイトを保持するジャンプ命令は、ブートコードにジャンプする
  2. ベンダー識別とDOSバージョン番号は、計8バイトを保持
  3. BPB(BIOSパラメータブロック)
  4. オペレーティングシステム起動プログラム
  5. 値が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」
  • hatena