玄箱HG - ファン自動制御!

Updated:


今日はうちの玄箱HGのファン回転スピードを ハードディスクの温度にあわせて 高速回転・低速回転させることをしてみました。

というのも、 玄箱のファンは確か回転スピードを制御できるはず。 なのに、夏でも冬でもうちの玄箱はいつも高速回転っぽい。 と思ったからです。

玄箱は、デフォルトで ・1.0 Gbps 環境では高速回転 ・100 Mbps 環境では低速回転 のようです。

うちは 1.0Gbps 環境なので、 今のところ、常に高速回転のようです。

そこで、うちのFedora サーバでも利用している ハードディスク温度測定ツール「 hddtemp 」を 玄箱HGにも導入して、 温度によってファン回転スピードを コントロールしてみようと考えました。

作業記録

1.「 hddtemp 」インストール

KURO-BOX:~# aptitude install hddtemp

途中の質問は以下のように回答しました。 ・Do you want /usr/sbin/hddtemp to be installed SUID root? → 「 Yes 」 Interval between two checks: → 「 0 」 ・Do you want to start the hddtemp daemon on startup? → 「 Yes 」 ・Interface to listen on: → 「 127.0.0.1 」 ・Port to listen on: → 「 7634 」

2.「 hddtemp 」動作確認

KURO-BOX:~# hddtemp /dev/hda
/dev/hda: WDC WD3200JB-22KFA0: 32 C
KURO-BOX:~# hddtemp -n /dev/hda  # <-「 -n 」で数字だけ取得
32

3.手動でファン制御確認

以下のコマンドでファン回転の変化を確認する。

KURO-BOX:~# echo -n '\\\\' > /dev/ttyS1  # <- 低速回転
KURO-BOX:~# echo -n ']]]]' > /dev/ttyS1  # <- 高速回転

※現時点の当方の玄箱HGのカーネルバージョンは [ 2.6.25.1 ] です。 カーネルバージョンが [ 2.6.28 ] 以降なら、 「 /dev/ttyS1 」ではなく「 /dev/ttyS0 」です。 また、「 /dev/AVR00 」とかのケースもあるようです。

4.自動制御スクリプト作成

自動制御スクリプト[ fan_control.sh ](ファイル名は任意)を [ /etc/init.d ]( 玄箱起動時に自動実行するためにこのフォルダ )に作成する。

KURO-BOX:~# vi /etc/init.d/fan_control.sh
#!/bin/sh
TEMPLIMIT=43  # <- 適当に変更
HDDTEMP=`/usr/sbin/hddtemp -n /dev/hda`

if [ 4 -le ${#HDDTEMP} ]; then
  exit 0
fi

if [ "$HDDTEMP" -le $TEMPLIMIT ];
 then
  /usr/bin/logger -t hddtemp "Temperature is Low.  Setting Fan Low  "`/bin/echo $HDDTEMP C`
  /bin/echo -n '\\\\' > /dev/ttyS1
  /bin/echo -n 'ffff' > /dev/ttyS1  # <- DIALOGランプ消灯
 else
  /usr/bin/logger -t hddtemp "Temperature is High. Setting Fan High "`/bin/echo $HDDTEMP C`
  /bin/echo -n ']]]]' > /dev/ttyS1
  /bin/echo -n 'gggg' > /dev/ttyS1  # <- DIALOGランプ点滅
fi
exit 0

5.実行権限付与

作成s他スクリプトに実行権限を付与する。

KURO-BOX:~# chmod 700 /etc/init.d/fan_control.sh

6.手動での動作確認

とりあえず、作成したスクリプトを手動で実行してみる。 [ TEMPLIMIT ]の値を変更しながら、ファンの動作を確認。

KURO-BOX:~# /etc/init.d/fan_control.sh

7.自動化

作成したスクリプトを定期的に実行させるためにcronに登録する。

KURO-BOX:~# crontab -e
*/15 * * * * /etc/init.d/fan_control.sh > /dev/null 2>&1  # <- 追加(15分毎に実行)

8.起動時実行化

このままだと、[ /etc/init.d ]フォルダに起動スクリプトがあっても、 玄箱HG起動時に自動実行されないので、以下のようにする。

KURO-BOX:~# update-rc.d fan_control.sh defaults 21 1  # <-【 注釈1 】参照
 Adding system startup for /etc/init.d/fan_control.sh ...
   /etc/rc0.d/K01fan_control.sh -> ../init.d/fan_control.sh
   /etc/rc1.d/K01fan_control.sh -> ../init.d/fan_control.sh
   /etc/rc6.d/K01fan_control.sh -> ../init.d/fan_control.sh
   /etc/rc2.d/S21fan_control.sh -> ../init.d/fan_control.sh
   /etc/rc3.d/S21fan_control.sh -> ../init.d/fan_control.sh
   /etc/rc4.d/S21fan_control.sh -> ../init.d/fan_control.sh
   /etc/rc5.d/S21fan_control.sh -> ../init.d/fan_control.sh

【 注釈1 】 書式は → [ update-rc.d スクリプト名 defaults 開始順 停止順 ] 開始順について、 Debianはデフォルトではランレベル2で起動します。 各ランレベルについては以下を参照。

Debian系Linuxの場合
 run level	configuration as default
 0       システム停止
 1       シングル・ユーザ・モード
 2       マルチユーザ設定
 3       ランレベル2と同じ
 4       ランレベル2と同じ
 5       ランレベル2と同じ
 6       リブート

RedHat系Linuxの場合
 run level	configuration as default
 0       システム停止
 1       シングル・ユーザ・モード
 2       マルチユーザ設定(NFSなし)
 3       マルチユーザ設定(テキスト・ログイン)
 4       --- (未使用)
 5       マルチユーザ設定(グラフィカル・ログイン)
 6       リブート

今回作成したスクリプト[ fan_control.sh ]は当然「 hddtemp 」起動後に実行させないと動きません。 ランレベル2で「 hddtemp 」が何番目に実行されるかを確認するには、[ /etc/rc2.d ]フォルダを確認します。 [ S20hddtemp ]となっていたので、「 hddtemp 」は20番目に起動するということです。 なので、[ fan_control.sh ]は21番目に実行させることにします。 また、停止順は[ /etc/rc0.d ]フォルダですが、 別に1番目に停止してもよいと思ったので、1番目としました。 自動実行を解除する場合は → [ update-rc.d -f スクリプト名 remove ]

9.自動動作の確認

玄箱HGを一旦リブートし、 目標としていた動作をしているかを確認する。 ログ[ /var/log/messages ]も確認してみる。


今日の作業は以上です。

それではまた。





 

Sponsored Link

 

Comments