PXEを使ってPCもディスクレスにしよう

YAMAMORI Takenori ●yamamori

●Windows 95をネットワークブートする

前述のように,DOSはディスクレス状態 にすることができました. したがって,DOSの上に乗って動作するWindows 3.1なら, ディスクレスにできると思われますが,Windows 95となると無理でしょう.

そこで,Windows 95についてはディスクレスはあきらめ, ローカルハードディスクをキャッシュ的に用い, ネットワークブートのみを目指すことにします. ローカルハードディスクを使用するとはいえ, ブートそのものにはハードディスクもフロッピーディスクも使用せず, 完全にネットワークから立ち上がることには変わりありません.

Windows 95をネットワークブートするには, そのOSまるごとのブートイメージを作成しなければなりません. そのためには,クライアントマシンに付いているハードディスクを利用し, まずはこれに普通にWindows 95をインストールします. OS本体のインストール後, Sambaサーバ上のネットワークドライブをマウントするようにします. あとからインストールするアプリケーションは, なるべくネットワークドライブ上に置き, ローカルディスク(C:)の使用を極力抑えて下さい. Windows 95の場合,C:は約150Mバイト程度で済ませることができると思います.

このローカルディスクの内容をもとに, ブートイメージファイルを作成します. これにはBpBatchに付属のmrzip.exeコマンドを使います.

mrzipコマンドは,Windows 95のDOS窓上で,以下のように実行します. mrzipコマンド内ではディレクトリの区切りに“/”が使えます. 動作中のOSのディスク内容をそのままイメージにするのは少々不安な感じもしますが, 常駐モノのアプリケーションがなければ特に問題はないようです. なお,mrzipをDOS窓ではなくDOSモードで実行すると, ロングファイル名の情報が失われてしまうので注意して下さい.

●mrzipコマンドでWindows 95ブートイメージの作成
----
C:\>tmp\mrzip
> set FragmentSize="10 MB"    ← 標準のTFTPでも転送できるようにサイズを小さめに
> filter -"tmp/*"             ← tmpディレクトリはイメージ作成対象から除外する
> fullzip "c:/" "c:/tmp/win.imz"  ← イメージファイル作成
----

イメージファイルのサイズが大きい場合, win.imzの他にwin.im1, win.im2,... のようにファイルが分割されてセーブされます. 分割ファイルのサイズはBpBatchの環境変数FragmentSizeで指定できます. 分割されたイメージファイルからブートする際には, BpBatchのfullunzipコマンドの引数に"win.imz"を指定すれば, 順次"win.im1","win.im2"も自動的読み込まれて展開されます. なお,イメージファイルは一種の圧縮アーカイブで, その合計サイズは,筆者環境では100Mバイト強となりました.

イメージファイルが作成できたら, win.imz, win.im1, win.im2,...のすべてのファイルを サーバの/tftpbootディレクトリに配置しておきます.

このファイル分割は,TFTPで転送できるファイルサイズの上限を考慮したものです. 標準のTFTPの仕様では,512バイト×65535(実装によっては32767)までしか ファイルを転送することができません.※注 そこでここでは,さらに余裕をみてFragmentSizeを"10 MB"に設定しているのです.

BpBatchでのFragmentSizeのデフォルトは"87 MB"なのですが, これは1パケットのデータサイズを1408バイトに増やした, 特別なtftpdを使用することを想定したものです. 興味がある方はこちらを使用するのもよいでしょう. しかし,筆者自身は標準のtftpdを用いても, 少々時間はかかるもののイメージファイルのダウンロードが 問題なく行なえることを確認しています.

※注
そもそもTFTPは, OSが立ち上がる前のROMモニタのような環境でも実装できるように設計された 簡易的なプロトコルであり, ひとつのUDPパケットで送られるデータは512バイトと小さくなっています. OSにもよりますが,TFTPで転送される通常のブートファイルのサイズも, 数10Kバイトのものから,大きくても1〜2Mバイト程度でしょう. このようなTFTPを用いて100Mバイト程度もあるOSまるごとの ファイルシステムイメージを転送するということは, 実はかなり無理なことをしていると言えます.

クライアントマシンのブートは, BpBatchのプロンプトに対して以下のように入力して行ないます.

●BpBatpchでWindows 95をブート
----
> setpartitions "bigdos:500"  ← 500Mバイトの基本パーティションをひとつ作成
> setbootpart 1               ← それをアクティブパーティションにする
> fullunzip "win.imz" 1       ← ディスクアーカイブを展開
  … 画面中央にダイアログが現れ,ファイル転送の進行状況が表示される …
> hidebootprom                ← ブートROMを除去してメモリを解放する
> hdboot :1                   ← 第1パーティションからブート
  … Windows 95が起動 …
----

BpBatchのコマンドで,ローカルハードディスクのfdiskパーティションを 改めて切り直していることに注意して下さい. このパーティションに,TFTPで取得したイメージファイルを展開し, 最後にローカルディスクからブートしています. なお,一連のイメージファイルには, パーティションのブートセクタの情報も含まれています.

Windows 95のブート場合は,BpBatchの環境変数CacheNeverの値を"ON"に設定していません. したがって,fullunzipコマンドは, TFTPで取得したファイルの内容を,いったんハードディスクのパーティション外に, キャッシュとして書き込みます. そのあとで,このキャッシュの内容をsetpartitions "bigdos:500"で確保した fdiskパーティションに展開するという動作になります. このため,setpartitionsコマンドでは, ハードディスクの全容量を確保してはいけないことにも注意して下さい.


To『PXEを使ってPCもディスクレスにしよう』[index]


このページは、技術評論社 「パワーアップFreeBSD」および SoftwareDesign 2000年10月号、11月号『PXEによるネットワークブート設定術』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 [Home]
yamamori