ReadyNAS RN10200のファン制御スクリプト
サーバやNASに厳しい季節になってきました
まだ梅雨は明けていないのですが、晴れの日の気温は30度を超えるようになってきました。エアコンがなければ、室温は40度近くに達していることでしょう。24時間運転のサーバやNASにとっては厳しい季節です。
ReadyNAS RN10200は実家で24時間運転させているので、当然ながらエアコンなどの空調など何もない部屋で稼働しています。そこで温度をモニタしてみたら、デフォルトのファン制御では殆ど無負荷状態でも日中はCPU温度が65〜70度、HDD温度が45〜50度くらいになってしまうようです。RN10200は、このくらいの温度ではあまりファンの回転数を上げてくれないようですね。
そこでCPU温度は60度前後に、HDD温度は40度くらいになるよう、もっと積極的にファンの回転数を上げてやろうと思い、NETGEARのフォーラムの記事などを参考にして、こんなスクリプトを作成してみました。
#!/bin/bash
INTERVAL=180
DEVICE="/dev/sda"
TEMP_KEYWORD="Temperature_Celsius"
PWM="/sys/devices/platform/mv64xxx_i2c.0/i2c-0/0-003e/pwm1"
CPU="/sys/devices/platform/axp-temp.0/temp1_input"
FAN_SPEED="/sys/devices/platform/mv64xxx_i2c.0/i2c-0/0-003e/fan1_input"
FAN_MIN=75 #
FAN_SLOW=95 # 780 RPM
FAN_NORMAL=128 # 960 RPM
FAN_FAST=186 # 1,780 RPM
FAN_FASTER=208 # 2,600 RPM
FAN_FULL=255 # 3,600 RPM
HDDTEMP_MIN=36
HDDTEMP_SLOW=38
HDDTEMP_NORMAL=40
HDDTEMP_FAST=42
HDDTEMP_FASTER=44
HDDTEMP_MAX=46
CPUTEMP_MIN=52
CPUTEMP_SLOW=56
CPUTEMP_NORMAL=58
CPUTEMP_FAST=61
CPUTEMP_FASTER=63
CPUTEMP_MAX=66
function CalcFanPER {
TEMP_CPU_RANGE=$(expr $CPUTEMP_MAX - $CPUTEMP_MIN)
TEMP_CPU_REL=$(expr $CPU_TEMP - $CPUTEMP_MIN)
TEMP_CPU_REL=$(expr $TEMP_CPU_REL * 100)
TEMP_CPU_PER=$(expr $TEMP_CPU_REL / $TEMP_CPU_RANGE)
if [ $TEMP_CPU_PER -lt 0 ]; then
TEMP_CPU_PER=0
fi
if [ $TEMP_CPU_PER -gt 100 ]; then
TEMP_CPU_PER=100
fi
TEMP_HDD_RANGE=$(expr $HDDTEMP_MAX - $HDDTEMP_MIN)
TEMP_HDD_REL=$(expr $HDD_TEMP - $HDDTEMP_MIN)
TEMP_HDD_REL=$(expr $TEMP_HDD_REL * 100)
TEMP_HDD_PER=$(expr $TEMP_HDD_REL / $TEMP_HDD_RANGE)
if [ $TEMP_HDD_PER -lt 0 ]; then
TEMP_HDD_PER=0
fi
if [ $TEMP_HDD_PER -gt 100 ]; then
TEMP_HDD_PER=100
fi
}
function CalcSpeed {
if [ $TEMP_CPU_PER -gt $TEMP_HDD_PER ]; then
NEW_PER=$TEMP_CPU_PER
else
NEW_PER=$TEMP_HDD_PER
fi
NEWPWM=$(expr $FAN_FULL - $FAN_MIN)
NEWPWM=$(expr $NEWPWM * $NEW_PER)
NEWPWM=$(expr $NEWPWM / 100)
NEWPWM=$(expr $NEWPWM + $FAN_MIN)
}
while true; do
CPU_TEMP=`cat $CPU`
HDD_TEMP=`smartctl -A $DEVICE | grep $TEMP_KEYWORD | awk '{ print $10 }'`
SPEED=`cat $FAN_SPEED`
CalcFanPER
CalcSpeed
echo $NEWPWM > $PWM
echo `date`, CPU:${CPU_TEMP}(${TEMP_CPU_PER}%), HDD:${HDD_TEMP} (${TEMP_HDD_PER}%), PWM:${NEWPWM}, FanSpeed:${SPEED}rpm
sleep $INTERVAL
done
|
注)¥マークは実際には半角のバックスラッシュ(\)
まだ実験段階なので、システムにインストールするのではなく、
という具合に動かしておいて、CPUやHDDの温度の変動がどの程度になるか調べてみました。その結果が以下です。
RN10200のデフォルトのファン回転数制御では、せいぜい700〜900rpm程度だったのが 1,000rpm以上になってしまいましたが、何とか狙った温度付近で、変動も少なくできているようです。夜間はファンの回転数はあまり上がりませんが、さすがに日中はファンの回転数が高くなります。最も室温が高くなっていると思われる午後2時から4時頃は1,600rpm程にまで上がってしまっていますね。
まぁ、まだ実験段階ですから、色々と調整の余地があるでしょう。HDDの温度はもう少し下げたいように思いますし、ファンの回転数も緩やかに上げ下げできたら良いかも。
|