★阿修羅♪ > IT9 > 243.html ★阿修羅♪ |
Tweet |
『Windows.FAQ--ウインドウズの処方箋』
http://homepage2.nifty.com/winfaq/howtoboot.html からの引用です。
----------------------------------------------------------------------------------
■ PC が起動する仕組み
HDD からオペレーティングシステムを起動する場合、次のようなステップが実行されています。
1. POST (Power-on Self Test) が実行されます。
2. BIOS がブートデバイスを検索します。
3. 最初のブートデバイスの MBR をメモリー上にロードし、制御を渡します。
(ブートデバイスがフロッピーディスクの場合はブートセクターに制御を渡します。)
4. MBR のブートストラップコードは、パーティションテーブルを検索し、ブート識別子がアクティブ (0x80) なパーティションのブートセクターをメモリー上にロードして制御を渡します。
5. ブートセクターに記録されたプログラムは、OS ローダーをメモリー上にロードし、制御を渡します。
(DOS/Windows の場合は IO.SYS が、Windows NT/2000 の場合は NTLDR がロードされます。)
6. OS の起動が開始されます。
単純化すると以下のようになります。
* BIOS -> MBR -> ブートセクター -> IO.SYS または NTLDR
■ マスターブートレコード (MBR) とは?
マスターブートレコード (MBR) とは、ハードディスクの最初のセクタ (512 バイト) です。このセクターには次のようなものが記録されています。
開始オフセット 内容
0x0000 ブートストラップコード
0x01B8 署名 (Windows NT/2000/XP のディスクマネージャやディスクの管理が使用)
0X01BA パーティションテーブル(x4)
パーティションテーブルは 446 バイト目から始まり、16 バイトづつの 4 レコードが記録されます。
各レコードには次の情報が記録されています。
* ブート識別子 (アクティブパーティションかどうかのフラグ)
* 開始位置 (Starting CHS)
* 終了位置 (Ending CHS)
* システム ID (パーティション ID。ファイルシステムの種類を記録)
* オフセット
* 総セクター数
パーティションテーブルは最大 4 レコードなので、PC は 1 つのハードディスクに作成できる最大パーティション数は 4 になります。
パーティションには、次の 2 つの種類があります。
* 基本パーティション
* 拡張パーティション
起動ドライブとして使うことができるのは基本パーティションだけです。また、5 個以上のドライブを作りたい場合は、1 つを拡張パーティションとして定義し、この中に論理ドライブを複数作成する必要があります。
拡張パーティションの中で論理ドライブを定義するために使われるのが、拡張ブートレコード (EBR) です。
EBR は MBR のパーティションレコード部分と同じ構成です。パーティションレコードの最初の 2 レコードだけが使用され、第一レコードは自分のドライブのブートセクターの位置を、第二レコードは次のドライブの EBR の位置を示しています。
■ マスターブートレコード (MBR) が壊れたら?
何らかの理由で MBR が破損して PC が起動しなくなった場合、次のような手順で MBR を再作成することができます。
ただし、ウィルスに感染して MBR が破壊されたり、乗っ取られた場合にこのような手順で MBR を書き換えると、ウィルスが保管したデータも消滅して被害が拡大することもあります。以下のプログラムは MBR の 446 バイトまでを上書きするので、パーティションテーブルは一切変更されません。
* Windows9x/Me を使っている場合
1. Windows9x/Me の起動ディスクで PC を起動します。
2. コマンドプロンプトから次のコマンドを実行します。
FDISK /MBR
* Windows 2000/XP を使っている場合
1. Windows の回復コンソールを起動します。
2. コマンドプロンプトから次のコマンドを実行します。
FIXMBR
注:Window NT/2000/XP を起動する場合でも、FDISK /MBR コマンドで MBR を復旧できます。
■ ブートセクターとは?
各ドライブの最初のセクターです。ここには OS に依存する実行プログラムが記録され、IO.SYS や NTLDR などのオペレーティングシステムローダーを起動します。
Windows9x が導入された PC に Windows NT/2000 を導入すると、既存のブートセクターが bootsect.dos というファイルにコピーされます。(当然の結果として、bootsect.dos ファイルのサイズは 512 バイトです。) NTLDR の表示する起動選択画面で Microsoft Windows を選択すると bootsect.dos がロードされて制御が渡され、これが IO.SYS (Windows9x の起動プログラム) を起動します。
ブートセクターには以下のものが記録されています。
開始オフセット 内容
0x00 JUMP 命令
0x03 OEM ID
0x0B BIOS パラメータブロック (BPB)
0x24 拡張 BIOS パラメータブロック (BPB)
0x3E(54) ブートストラップコード
0x1FE 終了識別子 (0x55AA)
--------------------------------------------------------------------------------