〜ときどきメモる備忘録〜
以前に 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 関係の記事があるけど、改めてこちらにメモを残しておく。
UPS と USB 接続するノードの PVE に、apt で nut-server と net-client をインストールする。
apt install -y nut-server nut-client
/etc/nut/ に nut.conf、ups.conf、upsd.conf、upsd.users、upsmon.conf、upssched.conf が作成されるので修正する。
以下はコメント行を除いたもの。
MODE=netservermaxretry = 3
[ups]
driver = usbhid-ups
port = auto
desc = "APC RS 550VA(BR550S-JP)"
offdelay = 60
ondelay = 70 LISTEN 127.0.0.1 3493
# masterのノード(自身)のアドレス
LISTEN 192.168.1.3 3493[monadmin]
password = secret
upsmon master
# 以下の行だけでも良さげ
# DS118のUSER,PW(/etc/ups/upsd.users)に合わせる
[monuser]
password = secret
upsmon slaveRUN_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 5CMDSCRIPT /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
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 nut-server restart
service nut-client-restart
オプション -t を忘れずに。
upsdrvctl -t shutdownNetwork 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
nut-client だけインストールして、/etc/nut/ の nut.conf、upsmon.conf、upssched.conf の3つを編集、upssched-cmd を追加する。
MODE=netclientRUN_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# 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
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 nut-client restart