第2章 ブートセクタ

ブートセクタ

なぜ、ブータブルCDと、そうでないCDがあるのか?いったいどこが異なるのか?これを理解しておくことにはとても意義がある。

しかし、CDの場合は多少仕組みがややこしいので、最初はもっと簡単なフロッピーディスクの場合を例にして考えてみよう。

フロッピーを使って、1つの実験をしてみる。

Windows MeではMS-DOSの起動フロッピーディスクを作ることが出来る。(Win98と違ってフロッピーディスク1枚にまとまるので重宝する。) このフロッピーディスクをフロッピードライブに装填しておいてPCを起動すると、MS-DOSが起動する。

一方、同じWin Meでフォーマットしただけのファイルが1つもないフロッピーディスクを、同じようにフロッピードライブに装填してPCを起動してみよう。

Invalid system disk.
Replace the disk,and then press any key.

とエラーメッセージが表示され起動できない。ここまでは誰でも理解できるだろう。

次に、Win XPでフォーマットしたフロッピーディスクを用意し、上で作ったWin MeのMS-DOS起動フロッピーディスクから、(隠しファイル・システムファイルも含めて)全てのファイルをこのフロッピーディスクにそのままコピーして、複製MS-DOS起動フロッピーディスクを作成してみる。このフロッピーディスクで起動するとどうなるか?予想に反してMS-DOSは起動しない。

Remove disks or other media
Press any key to restart

とモニタに表示されて止まってしまう。ファイルを丸ごとコピーしたのだから中身は一緒のはずなのに何故?その秘密は、ファイルとしては見えない部分にある。

フォーマットというと、まっさらの状態に完全消去するというイメージがあるが、実はデータを消すだけではなく、一部必要なデータを書き込んでいるのである。そのデータは、ファイルとして書き込まれるのではなく、ディスクに直接書き込まれる。そのためExplorerのようなファイラーでは、これを確認することができず空っぽに見える。このようなディスクに直接書き込まれたデータを見るためには、【DiskProbe】のようなsector editor を使わねばならない。

以下に、Win Meでフォーマットしたフロッピーディスクの先頭セクタを、【DiskProbe】で読み取ったものを図示する。

Meのブートセクタ

セクタというのは、ディスクを単位容量で区分けした最小記録単位だ。いまの場合は512バイトごとに1つのセクタになっている。ディスクの上には、512バイトの大きさの小部屋が碁盤の目のようにビッシリとちりばめられているようなイメージで捉えればよいだろう。

同じく、Win XPでフォーマットしたものでは、先頭セクタは以下のようになる。

XPのブートセクタ

こんなものを見せられてビックリした方もいるかもしれないが、細かいことを理解する必要は全くない。上と下が違うものであることと、右側のASCHII表示の記載の中に先ほど紹介したエラーメッセージが含まれていることを確認してもらえればそれで良い。例のエラーメッセージは、このプログラムが表示していたわけだ。

Win Me では、IO.SYS から起動するように命令するプログラムがこの先頭セクタの中に書かれている。このセクタと、IO.SYS 等の必要なファイルが両方揃って初めて、MS-DOS が起動するのだ。

一方Win XPでは、NTLDR から起動するように命令するプログラムが先頭セクタの中に書かれている。したがって、上の実験のWin XPでフォーマットしてから作った複製MS-DOS起動ディスクでは、NTLDR を呼び出す先頭セクタになっていたので、MS-DOS起動に必要なIO.SYS を呼び出すことができなかったのだ。これがブートできなかった理由である。(このプログラムのことを詳しく知りたい方は、The Starman's Realmさんのサイトに詳しい説明がある。)

このように、BIOSから制御を受け取り、次に起動するプログラムを呼び出す働きをするプログラムが書き込まれているセクタを、ブートセクタという。

BIOSからブートセクタに移行する段階では、まだファイルシステムは起動していないので、データをファイルとして取り扱うことが出来ない。フロッピーの場合には先頭セクタにブートセクタがあると決まっているので、単純にディスクの先頭から512バイト分のデータを読み取って、それをメモリにロードするわけだ。

メモリにロードされたプログラム(ブートローダー)は、ファイルシステムを整え、IO.SYS のようなファイル形態の起動プログラムを呼び出して、プログラム本体が起動していく仕組みになっている。

FDブートの仕組み

El Torito規格

さていよいよ、CD/DVDのブートについて説明する番だ。

ブータブルCD/DVDには標準規格が決まっている。El Torito規格というものである。そして、現在現役で使われている多くのPCのBIOSやCDドライブは、(完全ではないものの)ほぼこの規格をサポートしていると思う。

El Toritoを知らないとブータブルCDを作れないというものでは決してないので、最低限必要な説明のみしておこうと思う。

その前に、先に理解しておかないといけないのが、我々がこれから作ろうとしているようなデータCD/DVDで使われるファイルシステムのことだ。これはISO9660というファイルシステムになっている。ハードディスクに比べてアクセスが遅いCD/DVDでも十分に機能を発揮できるように工夫されているが、これも細かい仕様などを理解しておく必要はない。ただし、1セクタが2048バイトになっていることだけは頭に入れておいて欲しい。

それでは、フロッピーの実験のときに作ったWindows MeのMS-DOS起動ディスクをブータブルCDに変換したものを題材にして検証していこう。ブートセクタがCDの先頭セクタにあれば話はラクだが残念ながらそうではない。

ブータブルフロッピーディスクをブータブルCDに変換するのは【Super ウルトラ ISO】を使うのが簡単だ。フロッピーを装填しておいて、メニューの ブート→フロッピーイメージの作成... でimaファイルを作る。その後 ブート→ブートイメージの読み込み... で今作ったimaファイルを読み込んでおいて、最後に ファイル→名前をつけて保存... でisoファイルとして保存する。isoファイルをCD-R(W)に焼けば、ブータブルCDの完成だ。

【Super ウルトラ ISO】には体験版があり、作成できるISOファイルが300MBまでという制限以外は無制限・無期限で使えるので、ぜひインストールしておいたほうが良い。私の説明の中でも、今後何回も登場する。上のような用途以外でも、多彩な使い道がある。もちろん気に入ったらレジストすればよい。

El Toritoでは、Boot Record Volume Descriptor という場所が決められている。(Joliet拡張を使うと多少複雑になるが)ここがスタート地点だ。これは必ず16進数で第11hセクタ、すなわち10進数で第17セクタに存在する。(末尾のhは、16進数であることを示す) 今回は【かんべ】のセクタビューア機能を使って、このセクタをのぞいて見よう。

Boot Record Volume Descriptor

【かんべ】のセクタビューアは、0000段に余分なデータが表示され、通常のビューアとアドレスが10hずれるので注意が必要だが、多くの環境で問題なく使える数少ないCD用sector viewer だ。

今は紫に塗りつぶした部分、47h〜4Ah(ズレを補正した値)に注目する。このDouble Word をリトルエンディアンで読むと、今の例では00000019になる。19h すなわち第25セクタにBoot catalog が存在することを示している。それでは、第25セクタを表示して見よう。

Boot catalog

青く塗った部分がブートインジケータというもので、88hならばブータブルであることを示す。それ以外では00hになる。

赤く塗った部分はブートのタイプを示すインジケータで以下のようになっている。

数値 ブートのタイプ
00 NO Emulation
01 1.2MBフロッピーをエミュレート
02 1.44MBフロッピーをエミュレート
03 2.88MBフロッピーをエミュレート
04 ハードディスクをエミュレート

今回は一般的な3.5インチフロッピーディスクを基にして作ったブータブルCDなので、02hになっている。"NO Emulation" というのが分かりにくいと思うが、他の機器をエミュレートすることなく専用のブートセクタを用いるもので、Windows 2000/XP のインストールディスクなどは、この代表的なものである。

緑に塗った部分はブートセクタ領域が占めるサイズで、今の場合は0001hすなわち1セクタ分(2048バイト)であることを示している。

最後の紫の部分(28h〜2Bh)のDWordは、ブートセクタの開始セクタ番号を示している。今の場合は、0000001Ahすなわち第26セクタにブートセクタが存在することを示している。

それでは第26セクタをみてみよう。

ブートセクタ

これは、まさしく最初の実験で確認したMS-DOS起動フロッピーディスクのブートセクタにそっくりである。CD/DVDの場合は、フロッピーと違って多少まわりくどいが、El Torito の約束どおりに順番にたどっていけば、ブートセクタをきちんと見つけることができることがお分かりいただけたと思う。あなたのPCも、ブータブルCDから起動する時には、今私たちがやってきた方法でブートセクタを見つけ、そこから起動しているのだ。

CD/DVDブートの仕組み

ここまでのまとめ

Boot Record Volume Descriptor だのBoot catalog だのと、ややこしい内容が出てきたので、早くも嫌になってきた人が多いと思うが、心配はない。

それらのややこしい作業は、いざブータブルCDを作ろうという際には、作成ソフトが勝手にうまくやってくれるので、私たちが細かいことまで気にする必要はないのだ。

ここまでで理解してほしいポイントは、

さて、ここまでず〜っと基本概念みたいなことばかり書いてきたので、書いている私も、おそらく読むほうも飽きてきたと思う。次章は、実践的に役に立つ内容を記載していこう。

<目次へ> <前の章へ> <次の章へ>