Synology DS118 の USB UPS サポート(DSM 7.2)

その他

以前に Synology の NAS(DS118)を導入したとき、停電時に UPS を停止させるために NUT(Network UPS Tools)の master にしようとして諦めた経緯があった。理由は当時の DSM7.0 だと、シャットダウンできる UPS はオムロン製に限られていたから。
で、何気なく DSM7.2 になってからナレッジセンターを見てみたらオムロン製限定の記述は消えていた。

 

【DSM7.2 の記述】

USB UPS サポートを有効にする:

  1. システムがスタンドバイ モードに入ったら、UPS をシャットダウンする場合、[システムがスタンバイ モードに入ったときに UPS をシャットダウン] にチェックを入れます。
    • このオプションを有効にした場合、Synology NAS は電源の損失により直ちにシャットダウンされます。
    • このオプションを有効にした場合は、[コントローラ パネル] > [ハードウェアと電源] > [全般][停電後自動的に再起動する] チェックボックスにマークを付けて、電源回復時に Synology NAS が自動的に再起動されるようにしてください。
    • UPS 電源オフ機能はブランドとモデルによって変わります。一部の UPS デバイス は DSM によるシャットダウンをサポートしません。生産環境で UPS を使用する前に、UPS が予想通りに機能するかどうかを判断するために停電シミュレーション テストを行なってください。テストを行うには、[システムがスタンバイ モードに入ったときに UPS をシャットダウン] にチェックを入れ、[適用] をクリックして手動で UPS の電源ケーブルを取り外します。

 

【DSM7.0】の記述

スクリーンショット

 

DS118 も内部的には NUT を使っているから、DS118 を NUT の master にして、Proxmox VE の各ノードを slave にすることも可能かとは思う。
とはいえ、今の状態で何も問題ないから引き続き PVE のノードを NUT の master として運用していこう。

旧サイトに NUT 関係の記事があるけど、改めてこちらにメモを残しておく。

 

master にする PVE ノードの設定

NUT のインストール

UPS と USB 接続するノードの PVE に、apt で nut-server と net-client をインストールする。

apt install -y nut-server nut-client

 

NUT の設定

/etc/nut/ に nut.conf、ups.conf、upsd.conf、upsd.users、upsmon.conf、upssched.conf が作成されるので修正する。
以下はコメント行を除いたもの。

nut.conf

MODE=netserver

ups.conf

maxretry = 3

[ups]
  driver = usbhid-ups
  port = auto
  desc = "APC RS 550VA(BR550S-JP)"
  offdelay = 60 
  ondelay = 70 

upsd.conf

LISTEN 127.0.0.1 3493
# masterのノード(自身)のアドレス
LISTEN 192.168.1.3 3493

upsd.users

[monadmin]
        password  = secret
        upsmon master

# 以下の行だけでも良さげ
# DS118のUSER,PW(/etc/ups/upsd.users)に合わせる
[monuser]
        password  = secret
        upsmon slave

upsmon.conf

RUN_AS_USER root
MONITOR ups@localhost 1 monadmin secret master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /usr/sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYMSG ONLINE        "UPS %s on line power"
NOTIFYMSG ONBATT        "UPS %s on battery"
NOTIFYMSG LOWBATT       "UPS %s battery is low"
NOTIFYFLAG ONLINE       SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT       SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT      SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

upssched.conf

CMDSCRIPT /etc/nut/upssched-cmd
PIPEFN /etc/nut/upssched.pipe
LOCKFN /etc/nut/upssched.lock
AT ONBATT * START-TIMER upsgone 120
AT ONLINE * CANCEL-TIMER upsgone
AT LOWBATT * START-TIMER upsgone 5

 

upssched.conf で設定するスクリプトファイルの作成

vi /etc/nut/upssched-cmd
#!/bin/sh
 case $1 in
        upsgone)
                logger -t upssched-cmd "The UPS has been gone for awhile"
                upsmon -c fsd
                ;;
        lowbatt)
                logger -t upssched-cmd "The UPS became lowbattery"
                upsmon -c fsd
                ;;
        *)
                logger -t upssched-cmd "Unrecognized command: $1"
                ;;
 esac
# 実行権の付与
chmod +x /etc/nut/upssched-cmd

 

service のリスタート

service nut-server restart
service nut-client-restart

 

UPS 停止のテスト

オプション -t を忘れずに。

upsdrvctl -t shutdown
Network UPS Tools - UPS driver controller 2.7.4
*** Testing mode: not calling exec/kill
   0.000000
If you're not a NUT core developer, chances are that you're told to enable debugging
to see why a driver isn't working for you. We're sorry for the confusion, but this is
the 'upsdrvctl' wrapper, not the driver you're interested in.

Below you'll find one or more lines starting with 'exec:' followed by an absolute
path to the driver binary and some command line option. This is what the driver
starts and you need to copy and paste that line and append the debug flags to that
line (less the 'exec:' prefix).

   0.000096     Shutdown UPS: ups
   0.000113     exec:  /lib/nut/usbhid-ups -a ups -k

 

slave にするノードの設定

nut-client だけインストールして、/etc/nut/ の nut.conf、upsmon.conf、upssched.conf の3つを編集、upssched-cmd を追加する。

 

NUT の設定

nut.conf

MODE=netclient

upsmon.conf

RUN_AS_USER root
MONITOR ups@192.168.1.3 1 monuser secret slave

# 以下masterと同じ
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /usr/sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYMSG ONLINE        "UPS %s on line power"
NOTIFYMSG ONBATT        "UPS %s on battery"
NOTIFYMSG LOWBATT       "UPS %s battery is low"
NOTIFYFLAG ONLINE       SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT       SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT      SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

upssched.conf

# masterと同じ
CMDSCRIPT /etc/nut/upssched-cmd
PIPEFN /etc/nut/upssched.pipe
LOCKFN /etc/nut/upssched.lock
AT ONBATT * START-TIMER upsgone 120
AT ONLINE * CANCEL-TIMER upsgone
AT LOWBATT * START-TIMER upsgone 5

 

upssched.conf で設定するスクリプトファイルの作成

master と同じ内容で作成する。

vi /etc/nut/upssched-cmd
#!/bin/sh
 case $1 in
        upsgone)
                logger -t upssched-cmd "The UPS has been gone for awhile"
                upsmon -c fsd
                ;;
        lowbatt)
                logger -t upssched-cmd "The UPS became lowbattery"
                upsmon -c fsd
                ;;
        *)
                logger -t upssched-cmd "Unrecognized command: $1"
                ;;
 esac
# 実行権の付与
chmod +x /etc/nut/upssched-cmd

 

service のリスタート

service nut-client-restart

 

参考にしたサイト

 

タグ