カテゴリ
リンク

当サイトは、玄箱PRO (KURO-BOX/Pro)を中心とした組み込み、Linuxと電子工作を扱っています。
会社案内

情報セキュリティおよび個人情報の取り扱いについて


コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。コメントはそれぞれ投稿した人のものです。

■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 を選択します。

am-utils-1.png
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 が実行されます。

<光永 法明>

 カテゴリ 

 

トラックバック(0)

このブログ記事を参照しているブログ一覧: USBフラッシュで起動してHDDを止める

このブログ記事に対するトラックバックURL: http://www.eleki-jack.com/mt/mt-tb.cgi/878

コメントする

おすすめ書籍
Powered by
Movable Type 4.1