HDD温度とファン

熱暴走対策ということも兼ねて、HDDの温度でファンをコントロールするようにしました。
まずはHDDの温度取得。
今回は hddtemp というソフトを利用することにします。

# apt-get install hddtemp

質問がグダグダきますが、適当にスルー。
とりあえずデーモンで起動させるように設定しておきます。
で、早速温度取得。

# hddtemp /dev/hda
WARNING: Drive /dev/hda doesn't appear in the database of supported drives
WARNING: But using a common value, it reports something.
WARNING: Note that the temperature shown could be wrong.
WARNING: See --help, --debug and --drivebase options.
WARNING: And don't forget you can add your drive to hddtemp.db
/dev/hda: HDT722516DLAT80:  40°C or °F

なにやらデータベースに僕が使ってるHDDが登録されてないということだそうで。
調べて探したら /etc/hddtemp.db を参照してるらしいので、最新のヤツをDL。
http://www.guzu.net/linux/hddtemp.db
コレにも載ってなかったので、行の追加。

"HDT722516DLAT80"		194  C	"Hitachi Deskstar T7K250 160GB"

で、もう一度温度取得。

# hddtemp /dev/hda
/dev/hda: HDT722516DLAT80: 39°C

ばっちり成功です♪


で、次にHDD温度を取得して、ファンのコントロールをするためのスクリプトを設定します。
スクリプトは、玄箱ハックの大御所「LinkStation/玄箱をハックしよう」さんの所から利用させていただきました。
http://www.yamasita.jp/linkstation/index.html
若干AVR出力先などを書き直して、以下のスクリプトに変更。
45度を境にして、高速回転or低速回転を決めます。

#!/bin/sh

TEMPLIMIT=45

LOCKFILE=/tmp/HDDtemp
if [ -f $LOCKFILE ]
then
        echo $0 already running
        exit 1
fi

TEMP=`/usr/sbin/hddtemp -n /dev/hda`
date
echo $TEMP C

SLP=`echo $TEMP | sed -e 's/^[0-9][0-9]*$//'`
if [ "$SLP" != "" ]
then
        echo sleep
        exit 0
fi

if [ "$TEMP" -le $TEMPLIMIT ]
then
        /bin/echo -n '\\\\' > /dev/AVR00
        exit 0
fi

/bin/echo -n ']]]]' > /dev/AVR00

touch $LOCKFILE
while [ 1 ]
do
        TEMP=`/usr/sbin/hddtemp -n /dev/hda`
        date
        echo $TEMP C

        SLP=`echo $TEMP | sed -e 's/^[0-9][0-9]*$//'`
        if [ "$SLP" != "" ]
        then
                echo sleep
                exit 0
        fi

        if [ "$TEMP" -le $TEMPLIMIT ]
        then
                break
        fi
        sleep 60
done

/bin/echo -n '\\\\' > /dev/AVR00
rm $LOCKFILE
exit 0

でシェルの実行。

# sh hddtemp.sh
2006年  6月  4日 日曜日 19:45:29 JST
41 C

動いてくれたのでOK。
このシェルスクリプトを移動。

# cp /mnt/share/hddtemp.sh /usr/sbin/

で、自動実行してもらえるように cron に登録。

# crontab -e

で登録作業。
10分間隔で動くように設定してみました。
登録した結果はこんな感じ

# crontab -l
00,10,20,30,40,50       *       *       *       *       nice /bin/sh /usr/sbin/hddtemp.sh >> /tmp/HDDtemp.log

ログファイルをチェックしてみると、ちゃんと動いてくれてたのでOK