Raspberry Pi No.14 HDDケースの省電力対応
前回、未使用時にスピンダウンすることには成功しましたが、その後消費電力をチェックしていると、スピンダウン後30分で、ケース自体の消費電力があがることが判明。
「/var/log/syslog」の内容を確認すると、「raspberrypi kernel: [ 1862.318658] usb 1-1.2: reset high-speed USB device number 7 using dwc_otg」のような感じで30分毎に何らかの処理をしているようです。[ 1862.318658]の部分は毎回違う値。
スピンダウンはしたままなので、使用しているケースが何らかの電源を使っているのかな?。
30分毎の処理を止める方法は分からなかったため、根本的な解決方法はわかりませんが、スピンダウン後定期的に再度スピンダウン命令を発行するように改善します。(手動でスピンダウン命令を発行すると、消費電力が落ちたため、この方法で対応出来そう)
最初のスピンダウン後、30分毎に必ず命令が出ているので、これらを打ち消すような消極的方法で対応します。
今回も私の環境(sda2)で記載しています。
ケースの電力を抑えるように改善
sudo nano /usr/local/bin/nas_spindown.sh
内容は以下の通り
#!/bin/sh
disk=$1
interval=$2
interval2=$3
state=`grep " $disk " /proc/diskstats`
count=$interval
count2=$interval2
up=1
while [ true ]; do
sleep 60
count=$(($count-60))
count2=$(($count2-60))
newstate=`grep " $disk " /proc/diskstats`
if [ "$state" = "$newstate" ]; then
if [ $count -lt 0 ]; then
count=$interval
if [ $up = 1 ]; then
echo "spin-down"
sync
state=`grep " $disk " /proc/diskstats`
sudo hdparm -y /dev/$disk > /dev/null 2>&1
up=0
count2=$interval2
fi
fi
#未使用時はケース自体の電力を抑えるために停止命令を定期的に送る
if [ $count2 -lt 0 ]; then
count2=$interval2
if [ $up = 0 ]; then
echo "spin-down2"
sudo hdparm -y /dev/$disk > /dev/null 2>&1
fi
fi
else
count=$interval
state="$newstate"
if [ $up = 0 ]; then
echo "drive is up"
up=1
fi
fi
done
このスクリプトのミソは、本当のスピンダウン時に「count2=$interval2」でカウンタをリセットし、本当にスピンダウンしている時($up = 0)にcount2が0になる都度、スピンダウン命令を発行しているところです。
「/etc/rc.local」の内容を修正
sudo nano /etc/rc.local
以下の内容を「exit 0」の直前に登録
/usr/local/bin/nas_spindown.sh sda2 3600 300 2>&1 | logger -t nas_spindown &
第3引数でスピンダウン後に定期的にスピンダウン命令を発行する時間(余裕を見て5分=300秒)を指定。
これで最大でも30分毎に5分間だけ無駄に消費電力のみがあがる程度にまで押さえ込めます。
5分ではなく、1分でもいいのかもしれませんが、スピンダウン状態のHDDにスピンダウン命令を頻繁に発行することの影響が不明なため、現状はこれで様子見です。
スピンダウン、スピンアップの状況は以下の内容で確認します。
tail /var/log/user.log
いい感じで機能しているようです。
スピンダウン後も定期的に命令を発行して、消費電力を4W~5Wで維持できているようです。
動作確認できたら、「echo "spin-down2"」の部分はコメントアウトしてログ消費は抑えた方がよいかもしれません。
スピンダウンしても省電力になっているとはかぎらないので、ワットチェッカーでの監視も必要ですね。