ファイル共有用途等でUSBHDDの電源を長期的に入れておく場合、静かな所だと動作音が気になったりします。
ここでは、「hdparm」や「sdparm」を用いて、定期的にUSBHDDをスピンダウンし、動作音を抑える方法について説明します。
8.1.「hdparm」・「sdparm」のインストール
USBHDDによって、「hdparm」・「sdparm」のどちらが動作するかはわからないようです。
チェックのため両方インストールして動作する方を利用しましょう。
「hdparm」と「sdparm」をインストールするには、以下のコマンドでインストールできます。
sudo apt-get install hdparm sdparm
8.2.「hdparm」・「sdparm」の動作チェック
以下のコマンドで「hdparm」・「sdparm」のどちらが正しく動作するのか確認します。
#hdparmによるHDDスピンダウン sudo hdparm -y /dev/(デバイス名) #sdparmによるHDDスピンダウン sdparm -r --command=stop /dev/(デバイス名)
(動作しなかった方はremoveしてもらってもOK)
8.3.「hdparm」・「sdparm」の常駐化
- 以下のような内容のスクリプトを「hdd_spindown.sh」として「/root」に「root権限」で保存します。
このスクリプトは、NSLU2-Linux - FAQ / SpinDownUSBHarddisksから引っ張ってきて、findfsを利用してUUIDを引数にできるようにいじったり、出力を吐かないようにしてます。#!/bin/sh if [ $# -lt 2 ]; then echo "not enough arguments supplied." echo "hdd_spindown.sh [UUID] [INTERVAL]" exit 0 fi disk=`findfs UUID="$1"` interval=$2 count=$interval up=1 if [ -z $disk ]; then #echo "findfs error" exit 1 fi disk=`echo "$disk" |sed -e "s@/dev/@@"` state=`grep " $disk " /proc/diskstats` 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" sync state=`grep " $disk " /proc/diskstats` #hdparmを利用するとき hdparm -y /dev/$disk > /dev/null 2>&1 #sdparmを利用するとき sdparm --command=stop -r /dev/$disk > /dev/null 2>&1 up=0 fi fi else #echo -e "drive is up" count=$interval state="$newstate" up=1 fi done
- 「/root/hdd_spindown.sh」のパーミッションを変更する。
sudo chmod 700 /root/hdd_spindown.sh
- 「/etc/inittab」を以下のように編集して、スクリプトが起動時に実行されるようにする。
「「/etc/init.d/rc.local」に記述したら?」と言われそうですが、(追加) #auto hdd spindown hd:2345:once:/bin/sh /root/hdd_spindown.sh (USBHDDのUUID) (直近のアクセスからスピンダウンまでの時間(秒)) > /dev/null 2>&1
一度やってみたところ「rc.local」が「hdd_spindown.sh」の終了を待ってゾンビ化したので、
「これ放っておくと、他の起動スクリプトに影響出るかも・・・」+「なんか気持ち悪い」と思い以上のようにしました。
元をたどれば「rc.local」は「inittab」に記載され、起動時に動作しているので、「hdd_spindown.sh」もそちらに記載しています。
(一応書いておくと、「rc.local」は、
「/etc/inittab」→「/etc/init.d/rcS」→「/etc/init.d/rc」→「/etc/rc2.d/S05rc.local」→「/etc/init.d/rc.local」
という順に呼び出されています。) - 動作確認
再起動して正しくスピンダウンされるか確認する。
8.参考サイト
以下のページを参考にさせていただきました。
製品紹介(Amazonアフィリエイト)
2014/11/24 注釈追加・参考サイトの入れ忘れ修正