テクノロジー遊び

WindowsをUSBメモリーからブート

ことの発端は、ThinkPad X23の無線LANカードのfarmwareのアップデートがWindowsでしかできないことから始まっている。
Windows2000の正規のCD-ROMはもっているので、USB接続のCD-ROMドライブから導入しようとした。しかし、途中でブルースクリーンになってしまう。これは問題としてあがっており、KB883114として知られている。しかし、この問題に対処するにはCD-ROM中にあるsisiport.sysを変更しなければならない。これは私としてはメンドーに過ぎる。

最小のWindowsを求めて

「なんでもいいからSYSLINUX+Linuxカーネルくらいのサイズでブートできないの?」と思っていろいろ探した。例えば次のような起動ディスクの作り方があっちこっちに掲載されている。

  1. コマンドプロンプトで、USBメモリを2000上で
    format g: /FS:FAT (G:だとしましょう。)
  2. モジュールを見えるようにする
    attrib -s -h -r c:nt*
  3. モジュールを見えるようにする
    attrib -s -h -r c:boot*
  4. モジュールをコピー
    copy c:ntldr G:
  5. モジュールをコピー
    copy c:ntdetect.com G:
  6. 定義をコピー
    ; copy c:boot.ini G:

このboot.iniがブートメニューをコントロールする。

MSのBoot.iniの説明はここ

このとおり試してもDisk ErrorとBIOSが返すこともよくあって、安定しない。SYSLINUXだと100%ブートできるにもかかわらず。
もっと大事なことは、Windowsはこれくらいのモジュールではデバイスドライバもなにもなく、ほとんど動作しない。WINNTフォルダーがどこかに存在(例えば障害を起こしたディスク)し、NTDETECT.EXEに続くモジュールがあることが前提なのだ。つまり、この手順で作ったUSBメモリは単独で起動できない。誰も試さないから、特定の状況でしか通用しない話が一般化している。

そうこうしているうちに、MSが緊急ブート用に提供しているWindows PEというものがあることを知ったが、個人が入手できないようだ。かわりにBart’s PE BuilderというフリーでWindows PEのようなものをUSBメモリーに作成してくれるツールがあることを発見した。

Bart’s PE Builder(Bart PE)

Pebuilder3110aを入手した。ファイル(ディレクトリ除く)は次のとおりだった。

2004/12/15  14:03  960,056 bartpe.bmp
2004/12/03  13:17   22,016 bartpe.exe
2005/01/03  12:46    7,356 bartpe.txt
2004/09/10  02:01  198,399 cdrecord.exe
2006/02/17  13:28   46,207 changes.txt
2004/11/11  14:04   18,701 gnugpl.txt
2004/09/10  02:01  220,508 mkisofs.exe
2005/02/10  12:36      512 pe2usb.bin
2005/04/01  07:32    4,253 pe2usb.cmd
2005/03/02  09:50    7,774 pe2usb.txt
2004/12/15  12:23  179,256 pebuilder.bmp
2006/02/17  12:44  197,632 pebuilder.exe
2006/01/23  13:06   73,279 pebuilder.inf
2006/02/10  12:44    6,681 pebuilder.txt
2005/11/29  08:55  411,648 StarBurn.dll
2006/02/10  12:42      232 translations.txt
2007/08/06  13:24   20,275 unins000.dat
2007/08/06  13:24  673,610 unins000.exe

pe2USBというUSBメモリーにPEを作るキットも入っている。この中のpe2usb.txtに基づいて作業を行っていく。
windows server2003 sp1をダウンロードしてくる。(ありかは、pe2usb.txtに書いてある。)
解凍したディレクトリ下にsrsp1というフォルダーを作る。server2003sp1i386setupldr.binをsrsp1に取り出す。server2003sp1i386ramdisk.sy_を取り出し、expand -r ramdisk.sy_コマンドでramdisk.sysをつくりsrsp1に取り出す。

このダウンロードしたexeファイルを、フォルダーserver2003sp1をつくって置き、sr1sp.exeとリネームする。(ドキュメントと作業をあわせるため)
そして、ようやくpe2usb.cmdを実行できる。やってみると、それなりの時間をかけてi386フォルダーからUSBメモリーへ書き込んでいる。
「そうだよな。こんだけファイルないと立ち上がるわけないよな。。」と深くうなずくのであった。

ただし、このやり方で作るWindowsは当然、WindowsXP以降(2003sp1使うのでわかるでしょ。ってオレもやってみて気づいたけど)。古いWindowsは作れない。それから、私が作ったPEイメージは400MB近かった。Windows PE Builderはメモリー上にRAM DISKをつくり、このPEイメージを入れる。したがって、メモリーは400MB以上ないと動作しない。決して、万能の解決策ではないのであった。

(USBPE.EXEという作業を簡単にするツールがあるが、個人的にはこういうことでストーリの見えないプログラムは避けたほうがいいと思う)

関連記事

  1. ntpdate

  2. リモートデスクトップ

  3. VirtualPC

  4. Windows VistaとXP

  5. USBメモリについて

  6. デバッグとコード強化

  7. FAT32の扱い

  8. isolinux翻訳