GLAN TANKファン&HDD停止のまとめ
HDDへのアクセスが一定時間以上発生していないときにHDDとファンを停止し、アクセスが発生したときにまた回転を始める、という方法です。
この方法のほかにも、カーネルにファン停止用のドライバを組み込んで、HDDが一定の温度以下になったらファンを停止するという方法もあるようです。こちらの方が合理的な気がしますね…。
私は毎日の自動バックアップ用というゆるい使い方をしていますが、ヘビーに使う方はファンなぞ停止しない方が良いかもしれません。
お好みで。ということで、まとめ開始。
usbhdmngを入手
IO DATAから公開されているHDL-GXシリーズのファームウェアアップデートから、ファン&HDD制御用のプログラム(usbhdmng)を取り出し、/usr/local/binにコピーします。
wget http://www.iodata.jp/lib/soft/h/hdlgx_f108.zip unzip x hdlgx_f108.zip tar zxvf update.tgz tar zxvf update-files.tar.gz cp usr/local/bin/usbhdmng /usr/local/bin/ chmod 755 /usr/local/bin/usbhmng
hdparmをインストール
/sbin/hdparmが無いと、ファンが止まってもHDDが停止しません。
どうにかして/sbin/hdparmをインストールしてください。
apt-get install hdparm
spindownd.confを書いてテスト
とりあえず動作確認をしてみます。
/tmp/spindownd.confが設定ファイルになります。
IDE: hda /dev/hda /dev/hda 30 IDE: hdb /dev/hdb /dev/hdb 30
区切りはタブで。スペースは不可。最後の数字は、ファンとHDDを止めるまでの時間。単位は秒のようです。(前のusbhdmngのバージョンでは分だったような…)
しばらく放っておくとファンとHDDが停止することを確認。(アクセスを確認する間隔が30秒くらいの様で、1秒に設定してもすぐには止まりません)
USB外付けHDDを制御することもできるようですが、使っていないので調べていません。(ファームウェアアップデートの中に入っているusr/local/bin/HDLdisk.pmなどを解析すればわかるはず)
起動スクリプトを書く
Debian流儀に従って起動スクリプトを書きます。
/etc/init.d/usbhdmng
コピー&ペーストだと、タブがスペースになっているので注意。create_conf()の中のecho注意。
#! /bin/sh # # /etc/init.d/ubhdmng Control userland daemon to spin down idle disks and stop fans. # PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/local/bin/usbhdmng CONF=/tmp/spindownd.conf NAME=usbhdmng DESC="HDD Spindown Daemon" test -x $DAEMON || exit 0 TIMEOUT="600" IDE_DISKS="" # Include usbhdmng defaults if available if [ -f /etc/default/usbhdmng ] ; then . /etc/default/usbhdmng fi set -e create_conf() { echo -n "" > $CONF chmod 600 $CONF for DISK in $IDE_DISKS; do echo "IDE: $DISK /dev/$DISK /dev/$DISK $TIMEOUT" >> $CONF # ↑区切りはタブ(\t)。スペース不可 done echo "" >> $CONF } case "$1" in start) echo -n "Starting $DESC: " create_conf start-stop-daemon --start --quiet -m --pidfile /var/run/$NAME.pid \ --exec $DAEMON -- $DAEMON_OPTS 2>/dev/null echo "$NAME." ;; stop) echo -n "Stopping $DESC: " start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \ --signal 2 --exec $DAEMON --oknodo echo "$NAME." ;; reload|force-reload) echo "Reloading $DESC configuration files." start-stop-daemon --stop --signal 1 --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON ;; restart|force-reload) echo -n "Restarting $DESC: " start-stop-daemon --stop --quiet --exec $DAEMON --pidfile \ /var/run/$NAME.pid --oknodo sleep 1 create_conf start-stop-daemon --start --quiet --pidfile \ /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2 exit 1 ;; esac exit 0
設定ファイル
/etc/default/usbhdmng
# This is a configuration file for /etc/init.d/usbhdmng # Time in seconds before a disk and fan are spun down. TIMEOUT="600" # Disks to be watched. usbhdmng currently only works with ide hard disks; IDE_DISKS="hda hdb" #DAEMON="/usr/local/bin/usbhdmng"
仕上げ
chmod 755 /etc/init.d/usbhdmng update-rc.d usbhdmng start 80 2 3 4 5 . stop 80 0 1 6 .
ディスクアクセスを抑制する
このままでは、ファン&HDDが止まっても、すぐにまた回転し始めてしまいます。
静かにしたければ、thttpdのログ出力を抑制する(むしろいらなければアンインストール)、syslogの出力をバッファリングする、/etc/cron.hourlyをcron.dailyに格下げする、/のマウントオプションにcommit=600,noatimeを付加する(commit=600はどうかな)などなどの対策が必要です。
たとえば
syslog
apt-get remove --purge syslogd klogd apt-get install syslog-ng
で/etc/syslog-ng/syslog-ng.confに
options { .... .... sync(10) # 10行バッファリング stats(86400); # 状態出力は一日一回 .... .... }
cron
mv /etc/cron.weekly/man-db /etc/cron.monthly mv /etc/cron.daily/{netkit-inetd,ntpdate,bsdmainutils,find,modutils} /etc/cron.monthly/ mv /etc/cron.daily/{standard,logrotate,man-db} /etc/cron.weekly/ mv /etc/cron.hourly/chkraid1 /etc/cron.weekly/
/etc/crontabでhourlyとdailyをコメントアウト
#17 * * * * root run-parts --report /etc/cron.hourly #25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
などなど。
このせいで何が起こるかはわかりません。