これでカーネルと圧縮形式のルートファイルシステムができました.1枚のブー ト/ルートディスクを作るならば,両方のサイズを合わせても1枚のディスクに 収まることを確認します.ブート+ルートを2枚組で作るならば,ルートファイ ルシステムが1枚のフロッピーに収まることを確認します.
次にブートディスクのカーネルを LILO で起動するかどうかを決めます.別の
方法としては,カーネルを直接フロッピーに書き込んで LILO 無しで起
動させることもできます.LILO を使う利点は,システム上のハードウェアの
初期化に必要なパラメータを指定できる点です.(システムの
/etc/lilo.conf を見てください.このファイルがあって,
``append=...
'' といった記述があれば,たぶんこの機能が必要です.)
LILO を使う欠点はブートディスクを作るのが面倒な点と,ディスクの使用量
が少し増えてしまう点です.また,小さな別のファイルシステム(いわば
カーネルファイルシステム)も設定しなければならないでしょう.ここに
LILO が必要とする他のファイルとカーネルを転送することになります.
LILO を使うことにした人はこのまま読み続けてください.カーネル を直接転送することにした人は, LILO を使わない場合の節へ進んでください.
最初にすべきことは,LILO のための簡単な設定ファイルを作ることです.こ れは次のようになります:
boot =/dev/fd0 install =/boot/boot.b map =/boot/map read-write backup =/dev/null compact image = KERNEL label = Bootdisk root =/dev/fd0
パラメータの詳細については LILO のユーザ文書をご覧ください.
このファイルにはハードディスクの /etc/lilo.conf ファイル
から抜き出した append=...
の行を追加しておくべきかもしれません.
このファイルは bdlilo.conf
として保存します.
ここで小さいファイルシステムを作らなければなりません.ルートファイルシ ステムと区別するため,このファイルシステムは カーネルファイルシステムと呼びます.
まず,このファイルシステムの大きさを決めます.カーネルのサイズをブロッ
ク数で求め(``ls -l KERNEL
'' で得られるサイズを 1024 で割り,
端数を切り上げます),これに 50 ブロックを加えます.50 ブロックというの
は,i-ノードや他のファイルの分のおよそのサイズです.この数値を正確に求
めてもかまいませんが,単に50を使ってもかまいません.2枚組のディスクを
作る場合には,このサイズはもっと大きく見積もっても大丈夫でしょう.どう
せ最初のディスクにはカーネルしか入れないのですから.この数字を
KERNEL_BLOCKS
とします.
ドライブにフロッピーを入れて,このフロッピーに ext2 カーネルファイルシ ステムを作成します(表記を簡単にするため,ドライブは /dev/fd0 であるものとします):
mke2fs -i 8192 -m 0 /dev/fd0 KERNEL_BLOCKS
``-i 8192
'' オプションは,1つのi-ノードで8192バイトを使うことを指
定します.次にファイルシステムをマウントし,lost+found
ディレクト
リを消し,LILO 用に dev
ディレクトリと boot
ディレクトリを作
ります.
mount /dev/fd0 /mnt rm -rf /mnt/lost+found mkdir /mnt/{boot,dev}
次に /dev/nullデバイスと /dev/fd0デバイスを
作ります.デバイス番号を調べなくても,-R
オプションを使えばハード
ディスクからそのままコピーできます.
cp -R /dev/{null,fd0} /mnt/dev
LILO にはブートローダのコピー(boot.b
)が必要です.これはハード
ディスクから持ってくることができます.通常これは /boot
ディレ
クトリに置かれます.
cp /boot/boot.b /mnt/boot
最後に,先程の節で用意した LILO の設定ファイルをカーネルと一緒にコピー します.両方ともルートディレクトリに置くことができます.
cp bdlilo.conf KERNEL /mnt
以上の手順で,LILO が必要とするものは全てカーネルファイルシステムに準
備できましたので,LILO を実行します.LILO の -r
オプションを使う
と,ブートローダは他の場所をルートにしてインストールされます.
lilo -v -C bdlilo.conf -r /mnt
LILO はエラーを起こさないはずです.そして LILO の実行後には,カーネル ファイルシステムは以下のようになっているはずです:
total 361 1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf 1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/ 1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/ 358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz boot: total 8 4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b 4 -rw------- 1 root root 3584 Jan 10 07:23 map dev: total 0 0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0 0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null
ファイルサイズが少しくらい違っていても気にする必要はありません.
ドライブからディスクを抜き, ramdisk 変数の設定の節に進みましょう.
LILO を使わない場合には,dd
コマンドを使ってカーネルをブート
ディスクに転送します.
% dd if=KERNEL of=/dev/fd0 bs=1k 353+1 records in 353+1 records out
この例では,dd
は 353 レコード(の全体)と1レコード(の一部)を書き込
んでいます.したがって,カーネルはディスク先頭の 354 ブロックを使って
います.この数字を KERNEL_BLOCKS
とします.これは次のセク
ションで使うので,覚えておいてください.
最後に,ルートデバイスをフロッピーに設定し,ルートを読み書き可能でロー ドできるように設定します.
rdev /dev/fd0 /dev/fd0 rdev -R /dev/fd0 0
後の方の rdev
では必ず -R
を大文字にしましょう.
カーネルイメージの ramdisk 変数にはルートファイルシステ
ムの位置に関係するオプション等が指定されています.この変数には
rdev
コマンドでアクセスすることができ,変数の内容は以下のようになっ
ています:
第 0-10ビット: RAM ディスク先頭位置へのオフセットアドレス. 1024 バイトのブロックが単位になります. 第11-13ビット: 未使用です. 第 14ビット: RAM ディスクをロードするかどうかのフラグです. 第 15 ビット: ルートファイルシステムをロードする前にフロッピー 交換のプロンプトを出すかどうかのフラグです.
第 15 ビットがセットされていると,ブート時に 2 枚目のフロッピーをドライブに 入れるようにというプロンプトが出ます.ディスク 2 枚からなるブートシス テムではこのフラグが必要になります.
1枚のブート/ルートディスクを作るか,2枚組の「ブート+ルート」ディスクを 作るかによって,手順は2つに分かれます.
KERNEL_BLOCKS
に等しいはずです).第14ビットに1を,第15ビッ
トに0をセットします.
例えば,1 枚組のディスクを構築しようとしていて,ルートファイルシステムを
ブロック 253 (10 進値)から始めようとしているとします.ramdisk 変数の値は
253 (10 進値)のはずであり,ビット 14 に 1 がセットされ,ビット 15 に 0
がセットされています.この値を計算するには,単に 10 進値を足し合わせて
ください.すなわち「253 + (2^14) = 253 + 16384 = 16637」です.
この数値の由来が良く分からなければ,この値を関数電卓に入れて 2 進値に
変換してみてください.
ramdisk 変数がしっかりと計算できたら,rdev -r
コマンドを使って設
定します.設定の際には 10 進数を使ってください.LILO を使っている
場合には,rdev
に渡す引き数はマウントされるカーネルのパス(例:
/mnt/vmlinuz
)でなければなりません.カーネルを dd
でコピー
した場合は,この代わりにフロッピーのデバイス名(例: /dev/fd0
)
を使います.
rdev -r KERNEL_OR_FLOPPY_DRIVE VALUE
LILO を使っている場合には,フロッピーをアンマウントします.
最後のステップはルートファイルシステムの転送です.
dd
コマンドに seek
オプションを付けてファイルシステムを転送
します.このオプションは先頭からスキップするブロック数を指定するもので
す.
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS
dd if=rootfs.gz of=/dev/fd0 bs=1k
お疲れさま,これで作業終了です! 緊急用のディスクとして保管する前に は必ずテストをしましょう.このディスクで起動できなければ,トラブ ルシューティングがあるので,この先を読んでみましょう.