こちら に書いたように, とある実験のため IO-DATA の USL-5P を Linux Box として使えないか入手したのですが, 流石にカーネルコンパイルその他を CF メモリから行うのは無理があります.
っと言うわけで外付け HDD を購入したのですが, せっかくならば外付け HDD を繋いだ時 (開発モードの時) は 一時ファイルの生成やバイナリロードなどにおいて, 高速な HDD にできるだけアクセスするシステムにしたいと思います.
始めは HDD を適当にフォーマットしてシステムを置いて, 前回の lilo.cross (lilo.conf) を適当に いじれば出来るだろうと目論んだのですが, カーネルロード時 USB をまだ認識していないため出来ませんでした. まぁあとから考えるとあたりまえなんですが...
っという訳で, 最低限必要なファイルは CF に入れ, 残りを USB HDD に置く ことにしました. その手順を書いておきます. 思い出しながら書いているので忘れた何かがあるかもしれませんが... 要は 「USL-5P での作業」中の 4,5 がミソだと思います.
適当な Linux マシンに USB-HDD を繋いで swap 領域と ext2 領域を 作成, フォーマットする.
この手順はいままで散々書いているので割愛します. ここでは /dev/sda1 を swap 領域, /dev/sda2 を ext2 領域とします.
前回のように /dev/sda2 領域に システムファイルを置く.
多少無駄なファイルが混じりますがまぁ HDD は広大なので問題ないでしょう.
CF メモリカードを三つの領域に分け, フォーマットする
例えば以下のような感じ (/dev/hde にマウントされた場合)
デバイス | 始点 | 終点 | ID | 注釈 |
/dev/hde1 | 1 | 780 | 83 (linux) | 残り |
/dev/hde2 | 781 | 910 | 82 (swap) | 64MB |
/dev/hde3 | 911 | 993 | 83 (swap) | 40MB くらい |
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 |
同様に /dev/hde3 に置くためのシステムファイルを展開する.
# cd ~hoge # zcat base26-sh4-20051112.tgz | tar xvf - # cd debian26 # zcat ../landisk-tools-20051110.tgz | tar xvf - |
不要なファイルを消去した後コピーする
# rm -rf home initrd media opt srv sys tmp usr var root # mv * /mnt # umount /mnt |
hde1 側でネットワーク等の設定を行う
こちらの「設定」 1〜7 を参考にしてください
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 |
もう一度 hde1 をマウントし, こちら の 「LILO の書き込み」を参考にブートできるようにする.
CF を抜いて USL-5P に繋ぐ
新しい CF で USL-5P を起動, ログイン後 root になる
hda3 領域をマウント, 移動
# mount -t ext2 /dev/hda3 /mnt # cd /mnt |
上記 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 |
/mnt/etc/modules に usb_storage という行を追加
/mnt/etc/rcS.d/S20module-init-tools の echo "All modules loaded." 直後に以下のフレーズを追加
while [ -z "`/bin/grep Direct /proc/scsi/scsi`" ] do sleep 1 done |
/mnt/etc/network/ifstate を削除した後, 以下のようなファイルを新規に作成
lo=lo eth0=eth0 |
原因はよく分からないんですが, こうしないとネットワークが動きませんでした.
/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" |
lilo を実行
これでおしまいです. 電源ボタンを押して USL-5P をシャットダウンした後, 先ほど作った USB HDD を繋ぎ, 今度はコピーボタンを押しながら電源ボタンを 押し, 10 秒程その状態を保ってみてください. 無事に HDD からシステムが起動すれば成功です.
すなわち, HDD なしで単独で起動するときは「電源ボタン」のみ USB の HDD から起動するときは「コピーボタン」+「電源ボタン」ということです.