次のページ 前のページ 目次へ

6. 全部をまとめる: フロッピーの作成

これでカーネルと圧縮形式のルートファイルシステムができました.1枚のブー ト/ルートディスクを作るならば,両方のサイズを合わせても1枚のディスクに 収まることを確認します.ブート+ルートを2枚組で作るならば,ルートファイ ルシステムが1枚のフロッピーに収まることを確認します.

次にブートディスクのカーネルを LILO で起動するかどうかを決めます.別の 方法としては,カーネルを直接フロッピーに書き込んで LILO 無しで起 動させることもできます.LILO を使う利点は,システム上のハードウェアの 初期化に必要なパラメータを指定できる点です.(システムの /etc/lilo.conf を見てください.このファイルがあって, ``append=...'' といった記述があれば,たぶんこの機能が必要です.) LILO を使う欠点はブートディスクを作るのが面倒な点と,ディスクの使用量 が少し増えてしまう点です.また,小さな別のファイルシステム(いわば カーネルファイルシステム)も設定しなければならないでしょう.ここに LILO が必要とする他のファイルとカーネルを転送することになります.

LILO を使うことにした人はこのまま読み続けてください.カーネル を直接転送することにした人は, LILO を使わない場合の節へ進んでください.

6.1 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 変数の設定の節に進みましょう.

6.2 LILO を使わないカーネルの転送

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 を大文字にしましょう.

6.3 ramdisk 変数の設定

カーネルイメージの ramdisk 変数にはルートファイルシステ ムの位置に関係するオプション等が指定されています.この変数には rdev コマンドでアクセスすることができ,変数の内容は以下のようになっ ています:

        第 0-10ビット:  RAM ディスク先頭位置へのオフセットアドレス.
                        1024 バイトのブロックが単位になります.
        第11-13ビット:  未使用です.
        第   14ビット:  RAM ディスクをロードするかどうかのフラグです.
        第   15 ビット: ルートファイルシステムをロードする前にフロッピー
                        交換のプロンプトを出すかどうかのフラグです.

第 15 ビットがセットされていると,ブート時に 2 枚目のフロッピーをドライブに 入れるようにというプロンプトが出ます.ディスク 2 枚からなるブートシス テムではこのフラグが必要になります.

1枚のブート/ルートディスクを作るか,2枚組の「ブート+ルート」ディスクを 作るかによって,手順は2つに分かれます.

  1. 1 枚のディスクで作る場合,圧縮形式のルートファイルシステムをカーネルの 直後に置きます.つまり,オフセット位置は最初の空きブロックです(これは KERNEL_BLOCKS に等しいはずです).第14ビットに1を,第15ビッ トに0をセットします. 例えば,1 枚組のディスクを構築しようとしていて,ルートファイルシステムを ブロック 253 (10 進値)から始めようとしているとします.ramdisk 変数の値は 253 (10 進値)のはずであり,ビット 14 に 1 がセットされ,ビット 15 に 0 がセットされています.この値を計算するには,単に 10 進値を足し合わせて ください.すなわち「253 + (2^14) = 253 + 16384 = 16637」です. この数値の由来が良く分からなければ,この値を関数電卓に入れて 2 進値に 変換してみてください.
  2. 2 枚組のディスクを作る場合,ルートファイルシステムは 2 枚目のディスク の第 0 ブロックから始まります.つまり,オフセット位置は 0 です.第 14, 15 ビットにはそれぞれ 1 をセットします.この場合,10 進値は 2^14 + 2^15 = 49152 となります.

ramdisk 変数がしっかりと計算できたら,rdev -r コマンドを使って設 定します.設定の際には 10 進数を使ってください.LILO を使っている 場合には,rdev に渡す引き数はマウントされるカーネルのパス(例: /mnt/vmlinuz)でなければなりません.カーネルを dd でコピー した場合は,この代わりにフロッピーのデバイス名(例: /dev/fd0) を使います.

        rdev -r KERNEL_OR_FLOPPY_DRIVE  VALUE

LILO を使っている場合には,フロッピーをアンマウントします.

6.4 ルートファイルシステムの転送

最後のステップはルートファイルシステムの転送です.

お疲れさま,これで作業終了です! 緊急用のディスクとして保管する前に は必ずテストをしましょう.このディスクで起動できなければ,トラブ ルシューティングがあるので,この先を読んでみましょう.


次のページ 前のページ 目次へ