bird外付け 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さん。

  1. IODATA の HDC-U250 からメルコの HD-CS320U2 へ。