目的:
USB HDD に一定期間アクセスが無いときに スピンダウンさせる。手順:
- スピンダウン用のソフトウェアをインストールする。(2種)
$ sudo apt install sdparm
$ sudo apt install hdparm - どちらのコマンドでスピンダウンするか確認する。
$ sudo sdparm -r --command=stop /dev/sda1
$ sudo hdparm -y /dev/sda1
のどちらでスピンダウンするか確認する。
sdparm : スピンダウンし、LED 消灯。
ただし、しばらくすると LED点灯。スピンアップは無し。
hdparm : スピンダウンするが、LED点灯。
当初、どちらもスピンダウンせず、何回か試したりしている内、スピンダウンする様になっていた。 原因は不明。 - スピンダウンのコマンドを常駐化させる。
(1) スクリプトファイルを作成する。
下記の内容のスクリプトファイルを /root/hdd_spindown.sh で作成し、
/root/hdd_spindown.shのパーミッションを700に変更する。
$ sudo vi /root/hdd_spindown.sh
#!/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
$ sudo chmod 700 /root/hdd_spindown.sh
(2) マウントされている対象のデバイスのUnit名を確認する
$ systemctl list-units| grep -F .mount
実行例
~ $ systemctl list-units| grep -F .mount -.mount loaded active mounted / boot.mount loaded active mounted /boot dev-mqueue.mount loaded active mounted POSIX Message Queue File System mnt-hdd1.mount loaded active mounted /mnt/hdd1 run-rpc_pipefs.mount loaded active mounted RPC Pipe File System run-user-1001.mount loaded active mounted /run/user/1001 sys-kernel-config.mount loaded active mounted Kernel Configuration File System sys-kernel-debug.mount loaded active mounted Kernel Debug File System
対象デバイスのUnit名は mnt-hdd1.mount
(3) /etc/systemd/system/user_hdd1_spindown.service を下記の内容で作成
( Unit名, UUID, スピンダウンまでの時間 を 変更すること。)
$ sudo vi /etc/systemd/system/user_hdd1_spindown.service
[Unit] Description=hdd spindown by sdparm After=(先ほど、確認したUnit名) [Service] ExecStart=/root/hdd_spindown.sh (USBHDDのUUID) (直近のアクセスからスピンダウンまでの時間(秒)) > /dev/null 2>&1 KillMode=process Type=simple Restart=no [Install] WantedBy=multi-user.target
記述例
[Unit] Description=hdd spindown by sdparm After=mnt-hdd1.mount [Service] ExecStart=/root/hdd_spindown.sh d67444b3-b379-42ce-9c41-d97d60b698db 300 > /dev/null 2>&1 KillMode=process Type=simple Restart=no [Install] WantedBy=multi-user.target
(4) スクリプトが起動時に動作するように設定
$ sudo systemctl enable user_hdd1_spindown.service
- リブート後、スクリプト(サービス) の状態を確認する。
$ sudo reboot
$ sudo systemctl status user_hdd1_spindown.service
8.USBHDDの定期的なスピンダウン方法 – RaspberryPiで各種サーバー作り! – ある阪大生の物置小屋
0 件のコメント:
コメントを投稿