レスキューディスクの作成(3)

 前回、Liloに対応したので今回は、FD一枚でレスキューディスクを作成しようと思います。
但し、問題があります。それはFDの容量についてです。前回までは2枚にしていた為、ルートファイルシステムだけでFD1枚分の容量を使えたましたが、今回は、カーネルとルートファイルシステム合わせてFD一枚に納めないといけません。
前回のサイズでは、カーネルが396k、ルートファイルシステムは1402Kです。合計1798Kなので400K程度容量をオーバー。
しかし、FDを圧縮して使用した場合(/dev/fd0u1722)容量は1722kになるので、ルートファイルシステムを少しだけ小さくするだけで何とかなりそうです。

前回までの内容

今回も利用した環境は Turbolinux 7 Server(カーネルバージョン 2.4.9 glibバージョンは2.2.4-6です。)

  1. FD1枚への対応
    カーネルはレスキューディスクの作成(1)で作成したカーネルと同様の物を使います。ただし、よけいなオプションを1個減らした為、5kほど小さくなり、391kです。(前回気づかないところで関係ない余計なオプションを指定していました。(^^;))

    事前準備として、使用するFDは次の通り一度フォーマットしておきます。
    [root kernel]# fdformat /dev/fd0u1722

    カーネルディスク作成は次の用になります。
    レスキューディスクの作成(2)
    と同様ですが、FDへのアクセスが全て/dev/fd0から/dev/fd0u1722になっている事に注意して下さい。この様にアクセスするだけで、FDは圧縮して使用できます。
    また、前回補足した説明については割愛しているので必要に応じて前回までの内容を参照してください。
    1. FDのフォーマット(カーネル配置用ファイルシステム作成)
      カーネル配置用に作成したファイルシステムサイズ(ここでは430k)は後で使用するので忘れない事。
      ※ 430=カーネルサイズ+必須ファイル分(約40Kバイト必要)
      [root kernel]# ls -lh /usr/src/linux/arch/i386/boot/bzImage
      -rw-r--r-- 1 root root 391k May 30 01:11 bzImage
      [
      root kernel]# mke2fs -i 8192 -m 0 /dev/fd0u1722 -b 1024 430
      [root kernel]# mount /dev/fd0u1722 /mnt/floppy
       
    2. 必須ディレクトリ・ファイルの作成、コピー
      [root kernel]# cd /mnt/floppy/
      [
      root floppy]# rmdir lost+found
      [
      root floppy]# mkdir boot dev
      [
      root floppy]# cd dev
      [
      root dev]# mknod null c 1 3
      [
      root dev]# mknod fd0 b 2 0
      [root dev]# mknod fd0u1722 b 2 60
      [
      root dev]# cd ../boot/
      [
      root boot]# cp /boot/boot-text.b boot.b
      [
      root boot]# cd ..
      [
      root floppy]# vi bdlilo.conf <--内容については下記を参照。
      [
      root floppy]# cp /usr/src/linux/arch/i386/boot/bzImage .
      bdlilo.confの内容は次の通り。
      boot=/dev/fd0u1722
      install=/boot/boot.b
      map=/boot/map
      read-write
      backup=/dev/null
      prompt
      timeout=100
      image=bzImage
          label=Bootdisk
          root=/dev/fd0u1722
      ※前回と異なり、compact オプションを外しています。
      boot=/dev/fd0u1722の場合にcompactオプションを指定すると、lilo起動時にError 0x04が発生しました。
      /dev/fd0と指定している場合には、同現象は発生しません。原因は分かりませんが、セクターが見つからないらしい。

       
    3. liloの実行(インストール)
      [root floppy]# lilo -v -C bdlilo.conf -r /mnt/floppy
        
    4. カーネルのRAM変数の書き換え。
      前回までと異なり、2枚目のFDがないので、15ビット目は使用せず、14ビット目とカーネルサイズを足した数になる。430K(カーネル配置用に作成したファイルシステムのサイズ)+16384(2^14:RAMディスクの指定)=16820
      [root floppy]# rdev -r /mnt/floppy/bzImage 16814
      [root floppy]# rdev /mnt/floppy/bzImage /dev/fd0u1722
       
    5. ルートファイルシステムの書き込み
      ルートファイルシステム作成については後述する。ここでは、FDへの書き込み方法についてのみ述べます。
      FDのマウントを解除し、ルートファイルシステムを書き込みます。
      書き込み位置はカーネル配置用に作成したファイルシステム直後、したがってサイズ分(以下の例では430k)シークしてから書き込む必要があります。
      [root floppy]# cd ..
      [root /mnt]# umount /dev/fd0u1722

      [root /mnt]# dd if=rootfs.gz of=/dev/fd0u1722 bs=1k seek=430

  2. ルートファイルシステムの作成
    FD一枚に納める為、内容を検討し直す必要があります。
    検討し直しといっても、最も使用しないと思われるものから削除していくだけですが...。
    目標は1722K(FDのサイズ)-430K(カーネルファイルシステムサイズ)=1292Kです。
    現状のルートファイルシステムは、1402Kあるので、100Kくらいの削減です。ここで言う100kは圧縮後のサイズなので、実質は300~400K程度の削減が必要になります。
    ここで、削除するものは私の都合なので、これを読んでいる人は好きにして下さい。
    結局、レスキューディスクの作成(1)で作成したものより/bin/tar(119k)などの比較的ファイルサイズの大きいファイルを削除しました。
    削除した結果、ルートファイルシステムのサイズは1243kに縮小でき、目標達成です。
    今回の内容でルートファイルシステム作成用スクリプト(mkrootfs-small.sh)を作成したので参考にして下さい。
    (ルートファイルシステムを作成するたびに微妙に出来上がるサイズが異なりました???)
     
  3. ダウンロード
    今回作成したFDのイメージを置いておくので興味があったら使ってください。(ユーザーはrootのみでパスワード無しです。)
    ryocho.bin.gz
    使い方はダウンロード後、ddコマンドでFDに書き込みます。
    fdformat /dev/fd0u1722         <--FDのフォーマット
    gzip -d ryocho.bin.gz              <--gzipの解凍
    dd if=ryocho.bin of=/dev/fd0u1722 bs=1k
      <--FDへのコピー

    その他、今回作成したイメージ・ファイルです。
    menuconfigのバックアップファイル・・・small2-config
    今回使ったカーネルイメージ(391k)・・・bzImage-3.tar.gz
    ルートファイルシステム作成用スクリプト・・・mkrootfs-small.sh

  

お問い合わせはwebmaster@ryouto.jpまで。
Copyright (C)2003 ryouto.jp. All Rights Reserved.