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

YAMAMORI Takenori ●yamamori

■コラム■「BpBatchでのLinuxのブート方法はほかにもある」

BpBatchでのディスクレスブートの方法は, 基本的にはブート可能なフロッピーディスクのイメージをTFTPで読み込み, これをフロッピーディスクとしてエミュレーションした状態でOSをブートする というものです.

ただしブートするOSがLinuxの場合は, LinuxBootというLinuxカーネルをブートするためのBpBatchの専用コマンドを 使うことができます.

しかし,そもそもBpBatchはフロッピーイメージからのブートができるため, ブートするOSがLinuxであってもあえてLinuxBootコマンドを使わずに, フロッピーディスクイメージを用いたディスクレスブートが可能です. この方法を簡単に紹介しておきましょう.


○rdevによる方法

LILOがなくても,vmlinuzファイルは自分自身でブートコードを持っていて, rdev方式でブートできます. つまり,vmlinuzファイルをそのままフロッピーディスクイメージとして使用し, BpBatchに読み込ませることができます. ファイルサイズが1.44Mバイトより小さい半端な値のままですが, 少なくともBpBatchへのロードには問題ありません.

この方式の場合,LILOとは違ってカーネルオプションを渡すことができませんので, あらかじめrdevコマンドによって, カーネルがマウントすべきrootデバイスを指定しておきます.

●rdev方式のカーネルの準備

(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をディスクレスでブート したときと同じ手順になります.

●rdev方式のカーネルのブート

> set cachenever = "on"
> loadramdisk "vmlinuz-rdev"  
> floppyboot
  … Linuxがブートする …

なお,このvmlinuz-rdevを BpBatchのlinuxbootコマンドを使ってブートすることももちろんできます. その場合,rdevのお蔭で"root=/dev/nfs"のコマンドオプションを省略できます.


○LILOまたはsyslinuxによる Linux起動フロッピーディスクイメージを使う方法

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によるブート

loadlin.exeによるブートも可能です. この場合は,いったんDOSをディスクレスブートして, その中にあるvmlinuzをloadlin.exeでロードするという形になります.

DOSのシステムが入ったフロッピーディスクからは, config.sysや,そのほか不要なファイルを削除し, そこにvmlinuzと,loadlin.exeをコピーします. ファイル名は,いわゆる8.3形式の制限を受けます. そしてautoexec.batに,以下の1行を書いておきます. autoexec.batをUNIX上でエディットする場合は, 改行コードが[CR][LF]になるように注意して下さい.

●autoexec.batの中身

loadlin vmlinuz root=/dev/nfs 

このフロッピーディスクのイメージをddで吸い出し,/tftpboot以下に置きます. このあとのブート手順は 同じ になります.


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


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