ブート可能なメディアとそうでないメディアの違いとは何なのでしょうか?
HDDにおけるブート可能・不可能の違いは、MBRのブートシグニチャにマジックナンバーが書かれているかどうかがポイントになっているらしい、というところまでは調べました( http://ja.wikipedia.org/wiki/MBR )。
Linuxのddコマンドを使って、確かにマジックナンバーが入っていることも確認しました。
では、CDやFD、USBメモリからブートする場合には、「どのエリアに」「どのようなデータが書かれていたら」ブート可能として認識されるのでしょうか?
FDやCDに対して、ddコマンドで先頭数バイトを取り出してみたのですが、イマイチよくわかりません。(単純にddコマンドを間違えただけなのかもしれませんが……)
ネットでいろいろ検索してみたのですが、その辺りの細かい記述が見つかりませんでした。
詳しい方、どうぞよろしくお願いいたします。
FD や光学ディスクのケースは上記サイトに詳しく書いてあります。
USB メモリの場合は、基本的には HDD と同じ扱いです。問題は、BIOS レベルで USB ストレージを HDD と同様の扱いでブート対象とできるかどうか、になります。
こちらを参考にしてください。
Windows.FAQ - PC の起動する仕組みは?マスターブートレコード (MBR) やブートセクターって何?
簡単に解説します。
(1)BIOSがサポートするブート可能メディア(FDD,HDD,USBなど)のブートセクタを検査します。
(2)メディアが存在すればブートセクタを読み込みます。
(3)ブートセクタは、ブートプログラムとメディアに関する情報が混在しています。BIOSはブートセクタの先頭(オフセット+0)にジャンプします。
(4)ブートセクタのオフセット+0~+2には、通常x86アセンブリコードで3バイトのジャンプ命令が書かれています。たいていは[EB 3C 90]固定です。[EB 3C]は、x86で相対ジャンプ命令(JMP SHORT +3Ch)、[90]はダミー(NOP)です。
(5)オフセット+0のジャンプ命令により、オフセット+3Eh(ジャンプ命令の次のアドレス+02h +相対オフセット+3Ch = 3Eh)にジャンプします。なお、スキップされたオフセット+03h~+3Dhにはアセンブリコードではなくメディア情報が書かれています。
(6)オフセット+3E~1FDhにはメディア内のOSをロードするプログラムが書かれており、OSがロードされます。ブータブルメディアでない場合は、「NO SYSTEM DISK」などの最低限のメッセージを表示するコードが書かれていることもあります。
ありがとうございます。
ブートセクタ内に書かれている情報がどのようなものなのかを理解することができました。
ブートセクタの中身って、アセンブリだったんですね。
ただ、CDの先頭セクタを見てみたのですが、オール0だったように記憶しています。
CDとHDDだと、ブートセクタの場所が違うのでしょうか???
ありがとうございます!
ブートするための規格であるEl Torito規格(エルトリート?)というのがあるのですね。
> El Toritoでは、Boot Record Volume Descriptor という場所が決められている。 ( 略 ) これは必ず16進数で第11hセクタ、すなわち10進数で第17セクタに存在する。
で、Boot Record Volume Descriptorの値が、Boot catalog(ブートインジケータ?)の場所が判明し、その部分に88hがあればブート可能。00hであればブート不可能。
ということみたいですね。
El Toritoについては、下記も参考にしました。
http://ja.wikipedia.org/wiki/ISO_9660#El_Torito
> 1995年にIBMとPhoenix Technologiesが提唱した規格。
> CD-ROM上からのブート
> がサポートされている。