おいらは光学ドライブが嫌いだ。
買ってもすぐ壊れる。
しかも滅多に使わないから使おうと思うと壊れてたりする。
(Plextorのみ例外。但し、お値段は2〜3倍するけど。)

なのでOSとかのインストールはUSBメモリからするんだけど毎回、CD-ROMのISOファイルをUSBメモリから起動させるのに苦労する。

BIOSの起動シーケンスを理解しないまま適当にやっていたのでちょっと真面目にしらべて見た。

物理的に起動可能なUSBメモリ

そもそも物理的に起動可能なUSBメモリとそうでないUSBメモリが存在する。
これは単純にM/BのBIOSとUSBメモリの相性であるようでUSBメモリの問題では無い。
BIOSで起動デバイスとして認識されなければアウトなのでBIOSのアップデートや幾つかのメーカのUSBメモリを試して見るしか無い。

USBメモリの起動シーケンス

通常USBメモリはHDDとして認識されるので起動シーケンスもHDDと同じである。

1. BIOSがHDDの先頭のセクタ 512Byte を MBR として読み込んで実行する。
  • MBRにはパーティション情報も含まれる。
  • OSのセレクタがMBRに書き込まれていればセレクタが起動する。

2. MBRはアクティブなパーティションの先頭セクタ 512Byte を PBR として読み込んで実行する。

3. PBRはパーティションのファイルシステムから特定のファイルを読み込んで実行する。
  • 各OSのカーネルが読み込まれて実行される。
  • 通常はファイルシステムを処理するコードは 512Byte では足りないので、間にもう一段大きなローダを読み込む。

CD-ROMの起動シーケンス

1. BIOS が Boot Record Volume Descriptor から Boot catalog の位置を調べる。

  • Boot Record Volume Descriptor は第17番目のセクタに固定されている。
  • CD-ROMのセクタは 2048 なので番地は 17*2048=0x8800 となる。

00008800= 0043 4430 3031 0145 4c20 544f 5249 544f / .CD001.EL TORITO
00008810= 2053 5045 4349 4649 4341 5449 4f4e 0000 /  SPECIFICATION..
00008820= 0000 0000 0000 0000 0000 0000 0000 0000 / ................
00008830= 0000 0000 0000 0000 0000 0000 0000 0000 / ................
00008840= 0000 0000 0000 0013 0000 0000 0000 0000 / ................

  • Boot catarog のセクタ番号は 0x47〜0x4A Byte にリトルエンディアンで書き込まれている。

2. BIOS が Boot catalog からローダを読み込んで実行する。

00009800= 0100 0000 4d69 6372 6f73 6f66 7420 436f / ....Microsoft Co
00009810= 7270 6f72 6174 696f 6e00 0000 4c49 55aa / rporation...LIU.
00009820= 8800 0000 0000 0400 3701 0000 0000 0000 / ........7.......

  • Boot catalog の
    •  0x26〜0x27 Byte に ローダのセクタ数
    •  0x28〜0x2B Byte に ローダのセクタ番号
    がリトルエンディアンで書き込まれている

3. ローダがCD-ROMのファイルシステムから特定のファイルを読み込んで実行する。

CD-ROMのISOからUSBメモリへの変換はできない


FDD,FDD から CD-ROM への変換はできるがその逆はできない。
CD-ROM のほうが後から出来たので上位互換だが下位互換にはなっていないらしい。

CD-ROM に書き込まれているローダは CD-ROM 用でファイルシステムは ISO9660 である。
したがってこのローダをUSBメモリから読み込ませても動作しない。

結局、OS毎の対応しか無い


最終的にローダが実行するファイルが分かっている場合はそのファイルを実行する環境がUSBメモリから起動できれば良い。

Windows系の場合は HP USB Disk Storage Format Tool を使えば良い。
WinXP の場合は、FreeDOS の command.com から i386/winnt.exe を起動する事でインストールできた。
試して無いが WindowsPE を使えば何でも有りっぽい。

FreeBSD,Linux 系はUSBメモリ用のイメージが用意されるようになったので気にしなくて良いのかな。

GRUB は殆どの環境に対応しているようなのでこれを使いこなすのが良さげ。
ただ、必要となる頻度が少ないのが何とも...