2021年1月2日土曜日

CentOS7(Raspberry Pi 3)に接続したHDDを自動停止する

Raspberry PiをNAS化して2TBのHDDで無停止運転を実現できたが、HDDを24時間365日無停止で作動させるのは、電気代や機器の劣化・障害が気になる。
無停止運転とは言え、実際に使うのは1日当たり1時間も満たないし。
そこで、今回は使用していない時間帯はHDDを動作停止することで、無駄な電気代を減らした上で、HDDを少しでも長持ちさせてみようと思う。

■本日の目標

Raspberry Pi 3に接続したHDDを未使用時間帯は自動停止する

■主な作業環境

・HW:Raspberry Pi 3 Model B
・OS:CentOS Linux release 7.9.2009 (AltArch)
・HDD:I-O DATA 2.0TB (HDC-LA2.0)

■参考サイト

・自動停止用のシェルスクリプトは下記サイトを参考にしました。
外付け USB HDD を spin down する

■スクリプト用意

・参考サイトより拝借

■スクリプトを格納する

・格納した後、実行権限を付与しておく。
$ ll /usr/local/bin/usbhdd_spindown.sh
-rwxr-xr-x. 1 root root 637 10月 28 21:50 /usr/local/bin/usbhdd_spindown.sh

■HDDのUnit名を確認する

・後ほどServiceの起動順序を指定するため、マウント中のHDDのユニット名を確認する。
 ※HDDは /mnt/usb-m2 と /mnt/usb-m3 の2ヶ所
$ 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-nas.mount loaded active mounted /mnt/nas
mnt-usb\x2dm1.mount loaded active mounted /mnt/usb-m1
mnt-usb\x2dm2.mount loaded active mounted /mnt/usb-m2
mnt-usb\x2dm3.mount loaded active mounted /mnt/usb-m3
run-user-0.mount loaded active mounted /run/user/0
sys-kernel-config.mount loaded active mounted Configuration File System
sys-kernel-debug.mount loaded active mounted Debug File System

■Serviceファイルを作成する

・ポイントは2つ。
 →実行コマンド(ExecStart):
  スクリプトに引数(HDDを停止するまでの時間[s])を渡す
 →実行順序(After):
  /mnt/usb-m2 と /mnt/usb-m3 のマウント完了後に起動する
$ touch /etc/systemd/system/usbhdd_spindown.service
$ chmod 755 /etc/systemd/system/usbhdd_spindown.service
$ cat /etc/systemd/system/usbhdd_spindown.service
[Unit]
Description=hdd spindown by sdparm
After=mnt-usb\x2dm2.mount mnt-usb\x2dm3.mount

[Service]
ExecStart=/usr/local/bin/usbhdd_spindown.sh sdb 900 2>&1 | logger -t usbhdd_spindown &
KillMode=process
Type=simple
Restart=no

[Install]
WantedBy=multi-user.target

■Serviceを有効化&開始する

・ここからはServiceの有効化&起動のお作法。
$ systemctl enable usbhdd_spindown
$ systemctl start usbhdd_spindown
$ systemctl status usbhdd_spindown
● usbhdd_spindown.service - hdd spindown by sdparm
  Loaded: loaded (/etc/systemd/system/usbhdd_spindown.service; enabled; vendor preset: disabled)
  Active: active (running) since 日 2017-10-29 08:35:34 JST; 2min 12s ago
 Main PID: 10585 (usbhdd_spindown)
  CGroup: /system.slice/usbhdd_spindown.service
  tq10585 /bin/sh /usr/local/bin/usbhdd_spindown.sh sdb 900 2>&1 | logger -t usbhdd_spindown &
  mq10618 sleep 10

10月 29 08:35:34 WSTD-RPI3 systemd[1]: Started hdd spindown by sdparm.
10月 29 08:35:34 WSTD-RPI3 systemd[1]: Starting hdd spindown by sdparm...
10月 29 08:35:44 WSTD-RPI3 usbhdd_spindown.sh[10585]: drive is up: /dev/sdb
10月 29 08:37:04 WSTD-RPI3 usbhdd_spindown.sh[10585]: drive is up: /dev/sdb

■自動停止の状況を確認する

・今回は「900秒=15分」で設定したが、実際の処理状況を確認してみる。
$ systemctl status usbhdd_spindown
● usbhdd_spindown.service - hdd spindown by sdparm
   Loaded: loaded (/etc/systemd/system/usbhdd_spindown.service; enabled; vendor preset: disabled)
   Active: active (running) since 木 1970-01-01 09:00:15 JST; 51 years 0 months ago
Main PID: 276 (usbhdd_spindown)
   CGroup: /system.slice/usbhdd_spindown.service
           tq  276 /bin/sh /usr/local/bin/usbhdd_spindown.sh sdb 900 2>&1 | logger -t usbhdd_spindown &
           mq20375 sleep 10

1月 02 12:27:57 WSTD-RPI3 usbhdd_spindown.sh[276]: drive is up: /dev/sdb
1月 02 12:43:09 WSTD-RPI3 usbhdd_spindown.sh[276]: spin-down: /dev/sdb
1月 02 12:43:09 WSTD-RPI3 usbhdd_spindown.sh[276]: /dev/sdb: I-O DATA  HDCL-UT  5112
1月 02 12:45:09 WSTD-RPI3 usbhdd_spindown.sh[276]: drive is up: /dev/sdb
1月 02 13:00:21 WSTD-RPI3 usbhdd_spindown.sh[276]: spin-down: /dev/sdb
1月 02 13:00:22 WSTD-RPI3 usbhdd_spindown.sh[276]: /dev/sdb: I-O DATA  HDCL-UT  5112
1月 02 14:03:39 WSTD-RPI3 usbhdd_spindown.sh[276]: drive is up: /dev/sdb
ログには、
 停止:spin-down
 再開:drive is up
で出力される。
NAS(HDD)にアクセスすると再開し、アクセスが無いと15分後に停止している。
実際にHDD本体を見てみると、ランプが点灯→消灯していたため、うまく導入できたようだ。
Previous Post
Next Post

post written by: