LinuxのPXEサーバからディスクレスWindows XPを
LinuxのPXEサーバからディスクレスWindows XPを立ち上げる検証をした。紆余曲折して、Windows XPのカーネルを起動することに成功した。これでマシンのトラブル時など修復作業が大幅に楽になる。しかし、その方法の詳細は残念ながらブログでメモしておくことはできない。
概要は以下のとおり:
- PCのメモリ量やネットワーク経由でローダが読めるファイルの大きさの制限から、fullのXPをロード&ブートすることはできない。そこで、XPのCDから必要最小限のブートイメージを作成する。「Bart's PE Builder」というキットを使って丁度256MB程度のISOイメージを作成する。(BartPEの詳細は「自分好みの緊急用ブートCDをつくろう! 〜Bart's PE Builder〜」が詳しい。なお、最近では「PEへのアプリ組み込みプラグイン」にBartPEのプラグインがまとまっている。)
- BartPEを作成する際に、ネットワーク経由のブートイメージを作成するためにはRAMDISKに工夫が必要。詳しくは「Bart Pe On Pxe Bootable Sdi Ramdisk, Network Boot Bart PE」を参照のこと。ここではSDI(System Deployment Image)イメージを使った例が出ているが、ISOイメージでも手順は同じ。SDIの方がファイルがコンパクトになるが、Windows XP Embeded環境が必要になったりするのでオプションで。(Windows XP Embededは120日の利用が可能な評価版がある。)
- このイメージファイル(ISO)をPXEサーバからtftpを使ってダウンロードできるようにPXEサーバを設定する。PXEの基本設定については「PXEによるディスクレス・クライアント(総集編)」、「Linux&PXEでDOSをネットワークブートする」を参照のこと。ただし、XPのブートイメージをダウンロード&実行するためには、NBP(Network Bootstrap Program)としてpxelinuxやBpBatchではNG。この設定も先ほどの「Bart Pe On Pxe Bootable Sdi Ramdisk, Network Boot Bart PE」を参照のこと。
参考までに /etc/dhcpd.conf の該当部分と /tftpboot/ の様子について載せておく。(シンボリックリンクの大文字、小文字、ファイル名には意味があるので注意。)
[root@pxeserver ~]# cat /etc/dhcpd.conf : host disklesswin { hardware ethernet 01:23:45:67:89:AB; fixed-address disklesswin; next-server 192.168.0.7; filename "/win/startrom.n12"; default-lease-time 1296000; # 2 weeks max-lease-time 2592000; # 4 weeks } : [root@pxeserver ~]# ls -l /tftpboot/win/ total 258652 -rw-r--r-- 1 root root 000398 2008-06-10 01:51 BOOTFONT.BIN -rw-r--r-- 1 root root 00564 2008-06-10 03:13 NTDETECT.COM -rw-r--r-- 1 root root 261599232 2008-06-10 05:49 pebuilder.iso -rw-r--r-- 1 root root 000064 2008-06-10 07:50 setupldr.exe -rw-r--r-- 1 root root 00454 2008-06-10 09:42 startrom.n12 -rw-r--r-- 1 root root 242 2008-06-10 11:35 winnt.sif [root@pxeserver ~]# ls -l /tftpboot/ total 64 lrwxrwxrwx 1 root root 16 2008-06-10 13:57 BOOTFONT.BIN -> win/BOOTFONT.BIN lrwxrwxrwx 1 root root 16 2008-06-10 13:57 ntdetect.com -> win/NTDETECT.COM lrwxrwxrwx 1 root root 16 2008-06-10 13:57 ntldr -> win/setupldr.exe lrwxrwxrwx 1 root root 17 2008-06-10 13:57 PEBUILDER.ISO -> win/pebuilder.iso lrwxrwxrwx 1 root root 13 2008-06-10 13:57 winnt.sif -> win/winnt.sif drwxr-xr-x 2 root root 4096 2008-06-10 01:03 win [root@pxeserver ~]# cat /tftpboot/win/winnt.sif [SetupData] BootDevice = "ramdisk(0)" BootPath = "\i386\System32\" OsLoadOptions = "/noguiboot /fastdetect /minint /rdexportascd /rdpath=pebuilder.iso"
以上の手順でXPをネットワークからDiskless Bootできる。ちなみに今回はLinuxのPXEサーバを利用したが、"Windows XP等+フリーウェアのPXEサーバ"でも同様のことはできる筈だ。(Windows Serverがあればこんな苦労なしに、もっと簡単にできるかもしれないが。)
しかし、マイクロソフトさんも、トラブル時のディスク管理やネットワークからのリストアのためにLinuxのようなLive CDを用意したり、もしくはネットワーク経由のディスクレスブートができるようにしてほしい。Windows PEやWindows XP EmbededはOEMや企業向け製品で一般ユーザ(コンシューマ)では利用できない。一般ユーザでも適切なツールさえあればトラブル対応できる人は多いのに。(貧乏人なのでVistaはまだ使っていないが、Vistaでは可能なのかな?)
追記(2008/06/16)
Windows PEは無償でWindows製品の正規ユーザであれば誰でも使えました。詳しくは「Windows PE」を参照のこと。
追記(2008/06/17)
Windows PEをPXEを使ってネットワークブートしてみた。「PXEを使ってWindows PEをネットワークブート」を参照のこと。