■HDD の電源を切る
USB フラッシュで起動すれば、HDDを止めることができます。でも、HDD 並みの容量が欲しい場合もあります。それならば USB フラッシュで起動し、必要なときに HDD の電源を入れて、/home をマウントすることにしては、どうでしょうか。amd (auto mount daemon) を使ってチャレンジしてみました。
■USBフラッシュを用意する
「USB フラッシュを rootfs にしてみる」と同様に USB フラッシュ・メモリを用意します。CF, SD などと、カード・リーダでもかまいません。今回は miconapl コマンドを利用するので、「nvram, miconapl を使えるようにする」に書いたような方法で、フラッシュメモリ上にも miconapl が使えるように用意します。
フラッシュ・メモリに十分な空きがあるなら、 / ファイル・システムをコピーしてしまうことで、環境をそのまま引き継げます。筆者の場合 680Mバイトほど使用しているので 1Gバイト のメモリを用意しました。tar などを使って root でコピーします。
mount /dev/sdb1 /mnt
cd /
tar cf - bin boot dev lib media mnt mtd opt root sbin srv tmp usr var | (cd /mnt; tar xpf -)
cd /mnt
mkdir proc sys
/home はコピーしません。上記のようにコピーした場合には「
USB フラッシュを rootfs にしてみる」と同様に、 fstab を編集することを忘れないようにします。
■USB フラッシュから起動する uBoot が、<<system_bootend>> を出した次の Hit any key to stop autoboot: で、何か文字を入力して起動を中断します:
hit any key to switch tftp boot.
Hit any key to stop autoboot: 0
<<system_bootend>>
Hit any key to stop autoboot: 0
以下を打ち込んで、起動します。
setenv bootargs console=ttyS0,115200 root=/dev/sdb1 rootdelay=15 rw panic=5 BOOTVER=1.09
boot
■HDDを止めてみる Debian が起動したらログインして、HDD の回転と停止を確かめてみます。root でログインして、
miconapl -a hdd_power off
を実行すると HDD が止まります。
miconapl -a hdd_power hdd12
を実行すると HDD の電源が入り、回転を開始します。
■amd (auto mount daemon) を使って自動マウント amd (auto mount daemon)を使うと、ディスクにアクセスがあったときに自動的にマウントし、しばらく使用しないとマウントを外すということが実現できます。amd を利用して、HDD の起動、マウントと、アンマウント、停止をしてみます。まず、amd が含まれている am-untils をインストールします。
apt-get install am-utils
途中で、 NIS によるマップファイル (ファイル・システムのマウントに関するファイル)を利用するか聞かれるので、No を選択します。

NIS 経由のマップファイルは利用しないので NO とする
■amd の仕組み amd は、起動すると特定のディレクトリを見張っており、そこにアクセスがあるとマウント・コマンドを、一定時間アクセスがなくなるとアンマウント・コマンドを実行します。アクセスを見張るディレクトリと、マウントするディレクトリは別に用意します。ここではアクセスを見張るディレクトリを /mnt に、実際にマウントするディレクトリを /amd/home とします。root でマウントポイントを作成しておきます。
mkdir -p /amd/home
■マウントとアンマウントのコマンド HDDの電源を入れてマウントするスクリプトと、アンマウントして電源を切るスクリプトを用意します。/usr/local/sbin/
mount.homeとして、
#!/bin/sh
/usr/local/sbin/miconapl -a hdd_set_power hdd12
sleep 10
/bin/mount /dev/sda4 "$1"
が書かれたスクリプトを用意します。電源を入れてから10秒待ってマウントします。/usr/local/sbin/
umount.homeという名前で、
#!/bin/sh
/bin/umount "$1"
sleep 5
/usr/local/sbin/miconapl -a hdd_set_power off
が書かれたスクリプトを用意します。アンマウントして5秒待ってから電源を切ります。
chmod 755 /usr/local/sbin/mount.home
chmod 755 /usr/local/sbin/umount.home
とパーミッションを変えておきます。
/usr/local/sbin/mount.home /mnt
を実行して、電源が入ってマウントされること、
/usr/local/sbin/umount.home /mnt
を実行して、マウントが外されて電源が切れることを確認します。
■amd の設定 /etc/am-utils/
amd.home を以下の内容で作ります。
/defaults type:=host;fs=/amd/${key}
* opts:=rw,grpid,resvport
#
home type:=program;\
mount:="/usr/local/sbin/mount.home mount.home ${fs}";\
unmount:="/usr/local/sbin/umount.home umount.home ${fs}"
マウント・ポイントに /amd/${key} (key の部分に home が入る)を、マウントする時のコマンドに /usr/local/sbin/mount.home を、アンマウント時のコマンドに /usr/local/sbin/umount.home を指定しています。
つぎに、/etc/default/
am-utils を書き換えます。 AM_UTILS_MAP_NET の行を false に、AM_UTILS_MAP_OTHERS の行を以下のように書き換えます。/mnt を見張って、マウントファイルを /etc/am-utils/amd.home とするよう指定しています。
AM_UTILS_USE_NIS='false'
AM_UTILS_NIS_MASTER_MAP='amd.master'
AM_UTILS_NIS_MASTER_MAP_KEY_STYLE='onekey'
AM_UTILS_NIS_KEY='default'
AM_UTILS_NIS_CUSTOM='echo "/amd-is-misconfigured /usr/share/am-utils/amd.net"'
AM_UTILS_MAP_NET='false'
AM_UTILS_MAP_HOME='false'
AM_UTILS_MAP_OTHERS='/mnt /etc/am-utils/amd.home'
AM_UTILS_CLUSTERNAME=''
設定が終わったら、amd を再起動します。
/etc/init.d/am-utils stop
/etc/init.d/am-utils start
つぎに、
ls /mnt/home
などのコマンドを実行して、自動的にHDDの電源が入り、しばらくするとマウントされファイルが見えることを確認します。最後に、/home をアクセスしたときに /mnt/home をアクセスするようにシンボリック・リンクを張っておきます。USB メモリ上に /home があるなら、適当にコピー、移動、削除などしてから、次のように実行します。
cd /
ln -s mnt/home .
これで、必要に応じて、HDD の電源ON/OFF とmount/umount が実行されます。
<光永 法明>
コメントする