mipselなLinkStation Debianサーバー 〜HDDの停止で省電力〜

noflushdでHDDの停止


SAMSUNG SP1604N LinkStationのHDDは3.5インチなので、電力を食い、煩く、発熱も大きい。
使っていないときはなるべく止めておきたい。

hdparmで hdparm -S60 /dev/hda として、HDDに5分アクセスがない場合にHDDを止めることができるが、noflushdというプログラムの方がよく止まる。
noflushdは微弱なHDDのアクセスを抑制してくれるようだ。

noflushdをaptでインストール。

$ sudo apt-get install noflushd

次に、noflushdを設定。

$ sudo vi /etc/default/noflushd

TIMEOUT="5"
DISKS="/dev/hda"

TIMEOUTで最終アクセスからスピンダウンするまでの時間(分)を指定。
DISKSでHDDデバイスを指定。

HDDをなるべく長い時間停止


noflushdでHDDを停止するとうに設定しただけでは、数分毎にHDDがスピンアップしてしまう。
そこで、なるべく長い時間停止しているようにLinkStationに変更を加える。

noatimeでhdaをマウント

ファイルへのタイムスタンプを記憶させなくすることで、無駄なファイルアクセスがなくなり、高速化にもなる。
/etc/fstab のオプションにnoatimeを追加する。

不要なcronを停止

不要なcronを抑制する。
/etc/cron.d/ 以下にある不要なものを削除、若しくはその実行される頻度を調節する。
eximやphpなどたくさんある。

また、hourlyを使用するプログラムがない場合は/etc/crontabにあるhourlyをコメントアウトする。

どうしても実行したいcronがある場合は、その実行時間をなるべくまとめることで、HDDが回る回数を減らすことができる。

syslogの -- MARK --

30分に一度くらいの頻度でsyslogに -- MARK -- というものが書かれる。
これは全く必要ない。むしろログが見にくくなる。
syslogdの場合は、/etc/init.d/syslogd に SYSLOGD="-m 0" と追記すれば良いが、私はsyslog-ngを使っている。
syslog-ngの場合は、以下のようにすることで -- MARK -- とおさらばすることができる。

$ sudo vi /etc/syslog-ng/syslog-ng.conf

options {
mark_freq(0);
}

このように、optionsに mark_freq(0)を追記する。

USBメモリーにログを書き出す

LinkStation USB Memory

このままでも、半日くらいはHDDが止まっているが、sambaでファイル共有をする時以外は完全にHDDを止めておきたい。
ログやlogrotateによりスピンアップしてしまうことが多い。
そこで、/var/以下をUSBメモリーに書き出すことにした。

使用したUSBメモリーは1,300円で買った、SONYのポケットビットミニ(USB-H) 512MB。

USBメモリーをパーティション分けして、/var をがつんとマウントしても良い。
しかし、USBメモリーのパーティション分けは面倒なので、ファイルの実態を /mnt/usbmem/ に置き、次のようにシンボリックリンクを張ることにした。

$ sudo cp -a -p /var /mnt/usbmem/
$ ls -la /mnt/usbmem
# 一応確認
$ sudo rm -rf /var
$ sudo ln -s /mnt/usbmem/var /var

他にも、.viminfo や .bashrc など頻繁にアクセスするファイルをUSBメモリーに置き、シンボリックリンクを張っておくと良い。
これで、LinkStation内のsambaの共有ファイルにアクセスする時以外は、HDDが止まるようになった。

HDDをスピンアップたらしめるプログラムの特定

どのプログラムやDaemonがHDDをスピンアップさせてしまったかを特定するスクリプトを見つけた。

$ vi detect_hdd_spinup.sh

#!/bin/bash
LOGFILE='/var/log/hdd_spinup.log'
CMD2=''
while true; do
CMD=`ps -eo stat,pid,user,command | egrep '^[^ ]*D'`
if [ "$CMD" ]; then
if [ -z "$CMD2" ]; then
date '+%F %T %Z' >> $LOGFILE
fi
echo "$CMD" >> $LOGFILE
fi
CMD2="$CMD"
sleep 1
done

I/O を 1秒以上ブロッキングするプロセスを表示するスクリプトだ。
[usb-storage-0] と [kjournald] がよく引っかかる。
しかし、これらを抑制するやり方はよく分からない。
noflushdがこれらを抑制してくれているらしく、HDDが回ることはない。

現在の悩みの種は iTunes の不思議だ。
Windows PC で iTunes を起動させると、ブィーンとLinkStationのHDDが回転を始める。
ん〜よく分からん。sambaのnmbdが足掻くのだろうか…。

AppleCare Protection Plan Mac Book Air iMac

RSS MarkRSS Mark 2
   
 


        ※このHPにより生じたトラブルについて、一切責任を負いません。