Synology DS118 の USB UPS サポート(DSM 7.2)
2024年5月26日(日曜日) - 12:38
以前に Synology の NAS(DS118)を導入したとき、停電時に UPS を停止させるために NUT(Network UPS Tools)の master にしようとして諦めた経緯があった。理由は当時の DSM7.0 だと、シャットダウンできる UPS はオムロン製に限られていたから。
で、何気なく DSM7.2 になってからナレッジセンターを見てみたらオムロン製限定の記述は消えていた。
【DSM7.2 の記述】
USB UPS サポートを有効にする:
- システムがスタンドバイ モードに入ったら、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
参考にしたサイト
- Network UPS Tools
- Proxmox Forums(Can't get NUT to shutdown Proxmox)
- Hiroaki's blog(Synology NASとLinux(Debian Buster)を1台のUPSに連動させる その2)