FreeDOSをUSBメモリにインストール

できればあっさりのfreeDOS起動画面

BIOSの更新というと、ブートフロッピーディスクに新しいBIOSイメージを入れて、そのフロッピーディスクを起動して更新というのが定番。でも、最近はWindows環境でもブートできるフロッピーディスクを作成できなくなっている。それより、フロッピーディスクドライブそのものがPCになかったり、フロッピーディスクの入手自体が困難になっている。BIOSの更新って、どうしているんだろう...。Linuxユーザは、以前からそれに悩まされていた。
というわけで、救世主となるのがFreeDOSで、これは今は亡きMS-DOSに代わるオープンソースなディスクオペレーティングシステム。これをディスクじゃないけどUSBメモリにインストールしてみた。参考にしたのはCreating FreeDOS USB boot stick for BIOS flashingで、ここではWindows環境で次の手順でしている。

  1. Delete all partitions on your stick
  2. Create one primary partition and mark it as active
  3. Format that partition using FAT32
  4. syslinux\syslinux.exe -fma X:
  5. xcopy usb-root\* X:\ /E/H/I
  6. copy your flash tool and flash binary into the flash\ folder
  7. Reboot
  8. press [Enter] at syslinux boot: prompt
  9. double press [Enter] while your asked to change date and time
  10. your done! have fun!

誰にでもWindows環境がある時代じゃない(嘘)というわけで、Linux環境だけでやってみた。USBメモリの中には、大容量のフロッピーディスクのように拡張してパーティションのないスーパーフロッピー形式のものがあって、その場合はfdiskでハードディスク形式として1つのパーティションを作成する必要がある。ほぼ、Windowsuと同じように実行すれば大丈夫だけれど、パーティションのフォーマット形式は、FAT16のままにしておいた。ここでFAT16になっているけれど、実際はファイル名は主ファイル名8文字+拡張子3文字の制限を越えて利用できるので、Linux環境ではFAT16でもWindows環境ではFAT32である。

# wget http://goebelmeier.de/bootstick/bootstick.zip
asking libproxy about url 'http://goebelmeier.de/bootstick/bootstick.zip'
libproxy suggest to use 'direct://'
--2011-10-22 16:36:45--  http://goebelmeier.de/bootstick/bootstick.zip
goebelmeier.de をDNSに問いあわせています... 81.169.133.72
goebelmeier.de|81.169.133.72|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 1607529 (1.5M) [application/zip]
`bootstick.zip' に保存中
100%[============================================================================>] 1,607,529   38.1K/s 時間 31s     
2011-10-22 16:37:16 (50.6 KB/s) - `bootstick.zip' へ保存完了 [1607529/1607529]

# unzip bootstick.zip
Archive:  bootstick.zip
  inflating: BootStick/howto.txt
....     
  inflating: BootStick/usb-root/syslinux.cfg  

# cd BootStick/
# fdisk /dev/sdd
コマンド (m でヘルプ): p
ディスク /dev/sdd: 1017 MB, 1017117696 バイト
ヘッド 33, セクタ 63, シリンダ 955, 合計 1986558 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000
デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdd1              63     1985444      992691    6  FAT16

コマンド (m でヘルプ): a
パーティション番号 (1-4): 1

コマンド (m でヘルプ): p
ディスク /dev/sdd: 1017 MB, 1017117696 バイト
ヘッド 33, セクタ 63, シリンダ 955, 合計 1986558 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00000000
デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdd1   *          63     1985444      992691    6  FAT16

コマンド (m でヘルプ): w
パーティションテーブルは変更されました!

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
# syslinux /dev/sdd1
# mount /dev/sdd1 /mnt/sdd1
# cp -a usb-root/* /mnt/sdd1
# sync
# umount /mnt/sdd1

これで、最後の4つのおまじないをする。

  1. 再起動
  2. SYSLINUXのプロンプトboot:が表示されたら[Enter]
  3. 日時の変更を確認するので、(必要に応じてそれぞれ)[Enter]
  4. そして楽しむ!

最後がいちばん大事かな。久しぶりのDOS体験なので、しっかりコマンドを忘れている自分にちょっとショック。僕の環境では、USBメモリは/dev/sddだったけど、それぞれ違うから適宜/dev/sddなどは変更して、素敵なFreeDOS環境をひとつ持っておこう!