PXEを使ってPCもディスクレスにしよう |
YAMAMORI Takenori ●yamamori |
BpBatchでのディスクレスブートの方法は, 基本的にはブート可能なフロッピーディスクのイメージをTFTPで読み込み, これをフロッピーディスクとしてエミュレーションした状態でOSをブートする というものです.
ただしブートするOSがLinuxの場合は, LinuxBootというLinuxカーネルをブートするためのBpBatchの専用コマンドを 使うことができます.
しかし,そもそもBpBatchはフロッピーイメージからのブートができるため, ブートするOSがLinuxであってもあえてLinuxBootコマンドを使わずに, フロッピーディスクイメージを用いたディスクレスブートが可能です. この方法を簡単に紹介しておきましょう.
LILOがなくても,vmlinuzファイルは自分自身でブートコードを持っていて, rdev方式でブートできます. つまり,vmlinuzファイルをそのままフロッピーディスクイメージとして使用し, BpBatchに読み込ませることができます. ファイルサイズが1.44Mバイトより小さい半端な値のままですが, 少なくともBpBatchへのロードには問題ありません.
この方式の場合,LILOとは違ってカーネルオプションを渡すことができませんので, あらかじめrdevコマンドによって, カーネルがマウントすべきrootデバイスを指定しておきます.
(NFS root機能を組み込んだvmlinuz-rdevという名前のカーネルが, カレントディレクトリにあるものとします) # mknod /dev/nfsroot c 0 255 ← rdevにmajor/minor番号を知らせるために必要 # rdev vmlinuz-rdev /dev/nfsroot ← rdevでカーネルのrootデバイスを指定 # rdev vmlinuz-rdev ← 念のため,rootデバイスを表示してみる Root device 0x00ff ← NFS rootを示す0x00ffならOK # rm /dev/nfsroot ← デバイスファイルはもう必要ないので消しておく |
このvmlinuz-rdevを/tftpboot以下に置きます. クライアントマシン側では, BpBatchのプロンプトに対して以下のように入力します. 結局 フロッピーディスク1枚のDOSをディスクレスでブート したときと同じ手順になります.
> set cachenever = "on" > loadramdisk "vmlinuz-rdev" > floppyboot … Linuxがブートする … |
なお,このvmlinuz-rdevを BpBatchのlinuxbootコマンドを使ってブートすることももちろんできます. その場合,rdevのお蔭で"root=/dev/nfs"のコマンドオプションを省略できます.
LILOとvmlinuzを組み込んだLinuxの起動フロッピーディスク,または,syslinux によって作成した FAT フォーマットの起動フロッピーディスクのイメージからも,もちろんブートできます. Linux カーネル 2.4.x系では,BpBatch の LinuxBootコマンドがうまく動作せず, この,起動ディスクイメージを使う方法でないとブートしないことがあります.
このイメージの作成手順は少々繁雑になるため, いったん/sbin/mkbootdiskスクリプトを使って通常の起動ディスクを作成し, それに修正を加えるという方法をとるとやりやすいでしょう.
mkbootdiskはフロッピーディスク上に通常のカーネルをコピーするため, この上にNFS rootを組み込んだカーネルを上書きします. カーネルオプションは,NFS root を使うように root=/dev/nfs を指定する必要があります. LILOを使う場合,フロッピーディスク内のlilo.confに root=/dev/nfsと記述するとliloコマンドが文句を言うため, root=0xffとするとよいでしょう. この場合,最後に“lilo -r /mnt/floppy”を実行し, フロッピーディスクにLILOをインストールします. この時,liloコマンドの実行に失敗する場合は, フロッピーディスクがnodevオプションを付けずにマウントされていることを 確認して下さい. デフォルトの/etc/fstabを使ってマウントした場合は, ownerオプションの記述によってnodevオプションが付いてしまう場合があります.
起動ディスクが作成できたら,あとはフロッピーディスクを umountしてからそのイメージを dd コマンドで吸い出して /tftpboot以下に置けばOKです. このあとのブート手順はrdev方式やDOSの場合と同じです.
loadlin.exeによるブートも可能です. この場合は,いったんDOSをディスクレスブートして, その中にあるvmlinuzをloadlin.exeでロードするという形になります.
DOSのシステムが入ったフロッピーディスクからは, config.sysや,そのほか不要なファイルを削除し, そこにvmlinuzと,loadlin.exeをコピーします. ファイル名は,いわゆる8.3形式の制限を受けます. そしてautoexec.batに,以下の1行を書いておきます. autoexec.batをUNIX上でエディットする場合は, 改行コードが[CR][LF]になるように注意して下さい.
loadlin vmlinuz root=/dev/nfs |
このフロッピーディスクのイメージをddで吸い出し,/tftpboot以下に置きます. このあとのブート手順は 同じ になります.