HDDスタンバイ(スピンダウン)するために。その2。
前回の設定だけでは、うまい具合にスタンバイ(スピンダウン)してくれません。
cron から定期的にHDDの温度測定用シェルスクリプトとhddtempを実行するということは、そのたびにディスクからプログラムが読み込まれる可能性があるわけで、やはり無理なのかと思いつつも試行錯誤してみました。
ramdisk にプログラムをおいてみる。
/etc/ramdisk という箇所に ramdisk を作り、そこにcronから呼び出されるhddtempやそれを起動するシェルスクリプト等々を置きます。
/sbin/mke2fs /dev/ram $SIZE /bin/mount -t ext2 /dev/ram /etc/ramdisk cp -p /sbin/hddtemp /etc/ramdisk cp -p シェルスクリプトとか /etc/ramdisk
cron からはそこを呼び出します。
ダメです。スピンダウンしているHDDが復帰してしまいます。
hddtemp の hddtemp.db も置く必要があるのか??
そもそも、/bin/sh(=/bin/bash)もramdisk に置いておかないとならないような気がする??
等々、色々とやろうとしていた矢先に、次のことに気づいたので中止。
hddtemp を daemon モードにしてみる。
hddtemp には、-d オプションをつけることによって、デーモンとして常駐するモードがあります。
デーモンとして起動すると、ポート 7634 で待ち受けはじめ、そこにつなぐと、情報をはき出します。
# telnet kuro-box 7634 Trying kuro-box... Connected to kuro-box. Escape character is '^]'. |/dev/hda|ST3200822A|35|C| Connection closed by foreign host. #
という感じです。これなら常駐しているわけなので、ディスクアクセスはなさそうです。玄箱自体の cron にも登録しなくていいし。
値の読み取りは、syslog サーバになっているサーバ側で取得すればいいだけです。
telnet の出力結果を awk で整形して syslog に出力させるシェルスクリプトを作成しました。
しばらく動かしてみると…。HDD はスピンダウンしたままです。
telnet を netcat に変更する。
telnet の出力結果を取ろうとすると、時々取得に失敗して何も出力が得られない時があります。そこで、netcat を使ってみることにしました。
これは、玄箱ではなくて、syslog サーバになっている、RedHat の方の話…。
netcat を取得してきて展開し、
make linux
を実行すると、リンク時に、
undefined reference to 'res_init'
というエラーになります。ネット上を探すと、netcat.c に、
#include <resolv.h>
を追加したら解決するという話があったので、早速追加してOK。
早速使ってみると….。
# nc kuro-box 7634 |/dev/hda|ST3200822A|35|C|
ということで、非常に具合がよい結果が得られました。
ということで
温度を計測して閾値をオーバーしたらメールが飛んできつつ、でもHDDは一定時間利用しないとスピンダウンするという環境ができあがりました。
監視サーバ側で以下のようなシェルスクリプトを cron で定期的に実行し、温度閾値を超えた時に、syslog に記録される Hot!Hot! というキーワードを swatch で引っかけています。
#/bin/sh TEMPLIMIT=45 TEMPSTR=`nc kuro-box 7634` echo $TEMPSTR | logger -t kurohddtemp if [ -z "`echo $TEMPSTR | grep "/dev/hda"`" ] then echo "can't get hddtemp." | logger -t kurohddtemp exit 0 fi TEMP=`echo $TEMPSTR | grep /dev/hda | awk -F\| '{print$4}'` if [ -z "`echo $TEMP | grep "SLP"`" ] then if [ "$TEMP" -ge $TEMPLIMIT ] then echo "Hot!Hot!($TEMP)" | logger -t kurohddtemp fi fi
そして
結局、HDDをスピンダウンさせるのであれば、温度の監視をしても意味がないような気もします…。
まぁ、夏場にどんな具合になるのかを見てみるためということで。