外付け USB HDD を spin down する
外付け USB HDD を spin down する
今回、Linux box に接続されているバックアップ領域用外付け USB HDD を交換1したんですが、もともとの HDD が一定期間アクセスがないと自動的に spin down (HDD の回転を停止) してくれる省エネタイプのものだったのに対して、今度のものは放っておくとずっと回り続けているタイプのようでした。本体には一定時間アイドルが続くと spin down するユーティリティが添付されているのですが、なぜか Windows 専用。
そこでちょっとググって見たところ、こちらのページなどで、外付け USB HDD でも sdparm というコマンドを使うことで spin down 出来ることが書かれていました。sdparm はすでに debianize されているようでしたので、早速 apt-get で入れてみて、手始めに
# sdparm --command=stop /dev/sda
としてみると、おお、ちゃんと止まる。止まっている状態でその HDD 上のパーティションにアクセスしてみると、自動的に spin up してくれるみたい。なかなかいい感じ。
さらにちょっと調べて、同じ方のこちらのページからそのものズバリなページに飛び、そのページに書かれた「Shell-only scsi-idle without kernel patch」な shell script を sdparm を利用するように少し書き換えて root ユーザで実行することで、idle 監視、自動 spin down させることにしました。
#!/bin/sh
if [ $# -lt 2 ]; then
echo "$0: $0 [DISK] [INTERVAL]"
echo "ex: $0 sda 900"
exit 0
fi
disk=$1
interval=$2
state=`grep " $disk " /proc/diskstats`
count=$interval
up=1
while [ true ]; do
sleep 10
count=$(($count-10))
newstate=`grep " $disk " /proc/diskstats`
if [ "$state" = "$newstate" ]; then
if [ $count -lt 0 ]; then
count=$interval
if [ $up = 1 ]; then
echo -e "spin-down: /dev/$disk"
sync
state=`grep " $disk " /proc/diskstats`
sdparm --command=stop /dev/$disk
up=0
fi
fi
else
echo -e "drive is up: /dev/$disk"
count=$interval
state="$newstate"
up=1
fi
done
実際には上記スクリプトを下記のようにして実行しています。
# bin/usbhdd_spindown sda 900 2>&1 | logger -t usbhdd_spindown &
いつものように完全に無保証ですのでお気をつけください。HDD はずっと回転させておくほうが長持ちする、という話もありますし…。
コメント
- akchan (Mon, 20 Dec 2010 13:38:26)
-
sdparmでスピンダウンしても一瞬のうちにまた回転を始める場合は以下のようにするといいようです。
・sdparm 1.05以上を入れる。
・#sdparm --command=stop --readonly [device] を使う。
参考
http://suzume.nemuly.net/Entry/59/
http://sg.danny.cz/sg/sdparm.html#mozTocId592219
- digitune (Tue, 21 Dec 2010 06:25:58)
-
おお、情報ありがとうございます>akchanさん。
-
IODATA の HDC-U250 からメルコの HD-CS320U2 へ。 ↩︎