USL-5P で USB-HDD にできるだけシステムを入れる

[戻る]

こちら に書いたように, とある実験のため IO-DATA の USL-5P を Linux Box として使えないか入手したのですが, 流石にカーネルコンパイルその他を CF メモリから行うのは無理があります.

っと言うわけで外付け HDD を購入したのですが, せっかくならば外付け HDD を繋いだ時 (開発モードの時) は 一時ファイルの生成やバイナリロードなどにおいて, 高速な HDD にできるだけアクセスするシステムにしたいと思います.

始めは HDD を適当にフォーマットしてシステムを置いて, 前回の lilo.cross (lilo.conf) を適当に いじれば出来るだろうと目論んだのですが, カーネルロード時 USB をまだ認識していないため出来ませんでした. まぁあとから考えるとあたりまえなんですが...

っという訳で, 最低限必要なファイルは CF に入れ, 残りを USB HDD に置く ことにしました. その手順を書いておきます. 思い出しながら書いているので忘れた何かがあるかもしれませんが... 要は 「USL-5P での作業」中の 4,5 がミソだと思います.

Linux-PC での作業

  1. 適当な Linux マシンに USB-HDD を繋いで swap 領域と ext2 領域を 作成, フォーマットする.

    この手順はいままで散々書いているので割愛します. ここでは /dev/sda1 を swap 領域, /dev/sda2 を ext2 領域とします.

  2. 前回のように /dev/sda2 領域に システムファイルを置く.

    多少無駄なファイルが混じりますがまぁ HDD は広大なので問題ないでしょう.

  3. CF メモリカードを三つの領域に分け, フォーマットする

    例えば以下のような感じ (/dev/hde にマウントされた場合)

    デバイス始点終点ID注釈
    /dev/hde1178083 (linux)残り
    /dev/hde278191082 (swap)64MB
    /dev/hde391199383 (swap)40MB くらい

  4. 2. と同じように /dev/hde1 にもシステムファイルを置く.

    # mount -t ext2 /dev/hde1 /mnt
    # cd ~hoge
    # zcat base26-sh4-20051112.tgz | tar xvf -
    # cd debian26
    # zcat ../landisk-tools-20051110.tgz | tar xvf -
    # mv * /mnt
    # umount /mnt
    
    ちなみに CF メモリは書き込みが遅いため, このままでは umount にかなり時間がかかります. バックグランドで書き込みを行っている間に手順 7 を先にやっていた方がいいかもしれません.

  5. 同様に /dev/hde3 に置くためのシステムファイルを展開する.

    # cd ~hoge
    # zcat base26-sh4-20051112.tgz | tar xvf -
    # cd debian26
    # zcat ../landisk-tools-20051110.tgz | tar xvf -
    

  6. 不要なファイルを消去した後コピーする

    # rm -rf home initrd media opt srv sys tmp usr var root
    # mv * /mnt
    # umount /mnt
    

  7. hde1 側でネットワーク等の設定を行う

    こちらの「設定」 1〜7 を参考にしてください

  8. hde3 側でも同様に設定を行う

    ただし, fstab の設定だけは以下のように変更します

    /dev/hda3     /            ext2    defaults        0 0
    /dev/sda2     /usbhdd      ext2    defaults        0 0
    proc          /proc        proc    defaults        0 0
    /dev/sda1     swap         swap    defaults        0 0
    
  9. もう一度 hde1 をマウントし, こちら の 「LILO の書き込み」を参考にブートできるようにする.

  10. CF を抜いて USL-5P に繋ぐ

USL-5P での作業

  1. 新しい CF で USL-5P を起動, ログイン後 root になる

  2. hda3 領域をマウント, 移動

    # mount -t ext2 /dev/hda3 /mnt
    # cd /mnt
    
  3. 上記 6 で消したディレクトリをシンボリックリンクで作成

    # mkdir usbhdd
    # ln -s /usbhdd/home home
    # ln -s /usbhdd/initrd initrd
    # ln -s /usbhdd/media media
    # ln -s /usbhdd/opt opt
    # ln -s /usbhdd/srv srv
    # ln -s /usbhdd/sys sys
    # ln -s /usbhdd/tmp tmp
    # ln -s /usbhdd/usr usr
    # ln -s /usbhdd/var var
    # ln -s /usbhdd/root root
    
  4. /mnt/etc/modules に usb_storage という行を追加

  5. /mnt/etc/rcS.d/S20module-init-tools の echo "All modules loaded." 直後に以下のフレーズを追加

    while [ -z "`/bin/grep Direct /proc/scsi/scsi`" ]
    do
      sleep 1
    done
    
  6. /mnt/etc/network/ifstate を削除した後, 以下のようなファイルを新規に作成

    lo=lo
    eth0=eth0
    

    原因はよく分からないんですが, こうしないとネットワークが動きませんでした.

  7. /etc/lilo.conf を以下のように編集

    linear
    boot=/dev/hda
    disk=/dev/hda
    bios=0x80
    timeout=50
    install=/boot/boot.b-selk
    default=debian26
    image=/boot/vmlinuz-2.6.14-sh
            label=debian26
            root=/dev/hda1
            read-only
            append="mem=64M console=ttySC1,9600"
    
    image=/boot/vmlinuz-2.6.14-sh
            label=debian-usb
            root=/dev/hda3
            read-only
            append="mem=64M console=ttySC1,9600"
    
  8. lilo を実行

これでおしまいです. 電源ボタンを押して USL-5P をシャットダウンした後, 先ほど作った USB HDD を繋ぎ, 今度はコピーボタンを押しながら電源ボタンを 押し, 10 秒程その状態を保ってみてください. 無事に HDD からシステムが起動すれば成功です.

すなわち, HDD なしで単独で起動するときは「電源ボタン」のみ USB の HDD から起動するときは「コピーボタン」+「電源ボタン」ということです.


2006.4