【2026年11月8日時点の情報です】
自宅サーバー(KVM のホスト)と NAS(Synology DS224+)、メインPC を、UPS(無停電電源装置)につなぎました。停電したら、電池で動いているあいだに3台を順にきちんと止めるのがねらいです。
きっかけは、自宅サーバーの BIOS の更新でした。書き換えの途中で電気が切れると起動できなくなるおそれがあるので、UPS を入れるまで見送っていました。
この記事では、UPS を選んでつなぎ、NAS・自宅サーバー・メインPC を設定し、実際にコンセントを抜いて試したところまでを書きます。試してみると、Synology の NAS は「止まって」の合図(FSD)を送らないことが分かり、メインPC の止め方を変えました。
停電のあとに自動で起こす設定(BIOS の電源の設定、Wake-on-LAN)は、「停電のあと、自動で起きるようにする」にまとめています。
登場するホスト名、ユーザー名、IP アドレスなどは、セキュリティのため実際とは異なる架空のものに置き換えています。
| No. | 機械 | この記事での名前 | IP アドレス |
|---|---|---|---|
| 1 | NAS(Synology DS224+) | NAS | 192.168.0.30 |
| 2 | 自宅サーバー(KVM のホスト、AlmaLinux 9) | kvmhost | 192.168.0.20 |
| 3 | ブログを動かしている仮想マシン | myserver | ― |
| 4 | メインPC(Windows 11) | メインPC | 192.168.0.40 |
場面1:UPS を選んで、つなぐ
選んだのは CyberPower の CPJ500(500VA/300W、コンセント6口)です。停電のときも正弦波で電気を出し、USB ケーブルで NAS につなげます。
買う前に、Synology の互換性リストで、DS224+ の UPS の一覧に CPJ500 が載っているのを確かめました(印は「Vendor Recommended」。UPS のメーカーの側がつながることを確かめたもの)。
つなぐもの
| No. | つなぐもの | 理由 |
|---|---|---|
| 1 | NAS(DS224+) | UPS と USB でつなぎ、UPS を見張る親になる |
| 2 | 自宅サーバー(kvmhost) | NAS の知らせで止まる |
| 3 | スイッチングハブ | 停電のあいだも、3台を LAN でつないでおく |
| 4 | メインPC | NAS の知らせで止まる |
| 5 | メインPC のモニター | 停電のとき、画面で様子を見られる |
ルーターは、置き場所が離れているのでつないでいません。NAS からの知らせは、3台をつないでいるスイッチングハブを通るので、ルーターが止まっても届きます。
親と子
UPS と USB でつながるのは1台だけなので、NAS を親にしました。NAS の「ネットワーク UPS サーバー」が、LAN の中のほかの機械に UPS の様子を知らせます。この知らせ方は、Linux の UPS の道具 NUT(Network UPS Tools)と同じなので、自宅サーバーには NUT、メインPC には NUT と話せる Windows のソフトを入れます。
| No. | 機械 | 役目 | 入れるもの |
|---|---|---|---|
| 1 | NAS | 親(UPS を見張って知らせる) | DSM の UPS の設定 |
| 2 | 自宅サーバー | 子(知らせを受けて止まる) | nut-client |
| 3 | メインPC | 子(知らせを受けて止まる) | WinNUT-Client |
場面2:NAS(DSM)で UPS を見張り、ほかの機械に知らせる
UPS と NAS を USB でつなぎ、DSM の「コントロールパネル」→「ハードウェアと電源」→「UPS」のタブを開きます。「UPS サポートを有効にする」に印を付け、種類は「USB UPS」にしました。
「デバイス情報」を開くと、製造元 CPS、モデル CPJ500、ステータス「接続完了」、バッテリー充電 100% と出ました。NAS が USB で UPS を見分けられています。

残りの項目は、次のようにしました。
| No. | 項目 | 設定 | 理由 |
|---|---|---|---|
| 1 | スタンバイ モードに入るまで | 時間のカスタマイズ:5分 | 5分より短い停電は、電池で乗り切る。5分を超えたら止め始める |
| 2 | システムがスタンバイ モードに入ったときに UPS をシャットダウンする | 印を付ける | 全部が止まったあと、UPS の電気も止める |
| 3 | ネットワーク UPS サーバーを有効にする | 印を付ける | 自宅サーバーとメインPC に、LAN で UPS の様子を知らせる |
| 4 | 許可された Synology NAS デバイス | 192.168.0.20(kvmhost)、192.168.0.40(メインPC) | 知らせを聞きに来てよい相手。ブログの仮想マシンは kvmhost の中にあるので、登録しない |

Synology のネットワーク UPS サーバーにつなぐときは、UPS の名前は ups、ユーザー名は monuser、パスワードは secret と決まっています。変えられないので、許可するデバイスを LAN の中の2台だけにしておきます。
場面3:自宅サーバーに NUT を入れて、NAS の知らせを受ける
自宅サーバー(kvmhost、AlmaLinux 9)には、NUT の「知らせを受け取る側」の nut-client を入れます。EPEL にあります。設定のファイルを書き換えるので、先に控えを取りました。
sudo dnf install -y nut-client
rpm -q nut-client
sudo cp -p /etc/ups/upsmon.conf /etc/ups/upsmon.conf.20261104
echo 'MONITOR ups@192.168.0.30 1 monuser secret secondary' | sudo tee -a /etc/ups/upsmon.conf
sudo grep -vE "^\s*#|^\s*$" /etc/ups/upsmon.conf
upsc ups@192.168.0.30 2>&1 | grep -E "^(device.model|ups.status|battery.charge|battery.runtime|ups.load)"- sudo dnf install -y nut-client:
NUT の知らせを受け取る側を入れる - rpm -q nut-client:
入った版を出す - sudo cp -p /etc/ups/upsmon.conf /etc/ups/upsmon.conf.20261104:
設定のファイルの控えを、日付つきで取る - MONITOR ups@192.168.0.30 1 monuser secret secondary:
NAS の UPS(名前ups)を見張る。1はこの UPS から電気が来ている電源の数、monuser・secretは Synology の決まりのユーザー名とパスワード、secondaryは知らせを受け取る側という意味 - sudo tee -a /etc/ups/upsmon.conf:
その1行を、設定のファイルの最後に足す sudo grep -vE "^\s*#|^\s*$" /etc/ups/upsmon.conf:
説明の行(#)と空の行を除いて、効いている設定だけを出す- upsc ups@192.168.0.30 2>&1 | grep -E “…”:
NAS に、UPS の型番・状態・電池・持つ時間・使っている割合を聞く
nut-client-2.8.2-2.el9.x86_64
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG "/etc/killpower"
OFFDURATION 30
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
MONITOR ups@192.168.0.30 1 monuser secret secondary
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 20
battery.runtime: 3875
battery.runtime.low: 300
device.model: CPJ500
ups.load: 17
ups.status: OLups.status: OL は、UPS に壁から電気が来ている(オンライン)という意味です。電池は 100%、今の使い方は UPS の力の17%で、電池だけで約65分(3875秒)持つ見込みと出ました。
止まれと言われたときのコマンド SHUTDOWNCMD "/sbin/shutdown -h +0" は、もとから設定のファイルに入っていました。私は最初、これも一緒に足してしまい、同じ行が2つになったので、足したほうを消しました。
起動のたびに動くようにする
見張り役 nut-monitor は、NUT のまとまり nut.target の下に登録されます。nut-monitor だけを有効にしても、nut.target が有効でないと、起動のときに動きません。両方を有効にしました。
sudo systemctl enable --now nut-monitor
sudo systemctl enable nut.target
systemctl is-enabled nut.target nut-monitor
systemctl is-active nut-monitor
sudo journalctl -u nut-monitor --since "1 min ago" --no-pager | grep "UPS:"- sudo systemctl enable –now nut-monitor:
見張り役を今すぐ動かし、起動のたびに動くようにする - sudo systemctl enable nut.target:
NUT のまとまりを、起動のたびに動くようにする - systemctl is-enabled nut.target nut-monitor:
2つともenabledか - systemctl is-active nut-monitor:
見張り役が今動いているか - sudo journalctl -u nut-monitor –since “1 min ago” –no-pager | grep “UPS:”:
見張り役が NAS の UPS を見張り始めた記録を出す
enabled
enabled
active
11月 04 09:41:08 kvmhost nut-monitor[3113]: UPS: ups@192.168.0.30 (secondary) (power value 1)止まるときは、libvirt-guests が先にブログの仮想マシン(myserver)をきちんと止めてから、kvmhost の電源が切れます。
場面4:メインPC に WinNUT-Client を入れる
Windows には、NUT と話せる無料のソフト WinNUT-Client を入れました。GitHub の nutdotnet/WinNUT-Client の「Releases」から、入れるファイル(.msi)を落として入れます。
設定は、上のメニューの「Settings」で開く窓にまとまっています。タブが横に並びきらないので、右の「▶」「◀」で切り替えます。
つなぎ先
| No. | 項目 | 入れた値 |
|---|---|---|
| 1 | NUT Host | 192.168.0.30(NAS) |
| 2 | NUT Port | 3493 |
| 3 | UPS Name | ups |
| 4 | Login | monuser |
| 5 | Password | secret |
| 6 | Re-establish connection | 印を付ける(NAS を起こし直したとき、つなぎ直す) |
いつも動いているようにする(Miscellaneous)
| No. | 項目 | 設定 | 理由 |
|---|---|---|---|
| 1 | Minimize to Systray | 印を付ける | 小さくすると、画面の右下に入る |
| 2 | Start Minimized | 印を付ける | 起動したとき、窓を出さずに右下に入る |
| 3 | Close to Systray | 印を付ける | 窓の × を押しても終わらず、見張りを続ける |
| 4 | Start with Windows | 印を付ける | サインインしたら、自動で動く |
| 5 | Create LogFile | 印を付ける | うまく動いたかを、あとで記録で見られる |
止め方(Shutdown Options)の最初の設定
最初は、NAS の合図(FSD)で止まるのを主にして、電池の条件は念のための形にしました(あとの試しで、ここを変えることになります)。
| No. | 項目 | 最初の設定 |
|---|---|---|
| 1 | Shutdown if battery lower than | 30% |
| 2 | Shutdown if runtime lower than (sec) | 300 |
| 3 | Type of Stop | Shutdown |
| 4 | Delay to Shutdown (sec) | 15 |
| 5 | Shutdown on Nut’s FSD Signal | 印を付ける |
上のメニューの「Connection」→「Connect」でつなぐと、下の行に「Connection to Nut Host 192.168.0.30:3493 Established」と出て、UPS の様子が見えるようになりました。

| No. | 見たところ | 読み方 |
|---|---|---|
| 1 | UPS On Line(緑) | UPS に壁から電気が来ている |
| 2 | Manufacturer:CPS、Name:CPJ500 | NAS を通して、UPS の様子が見えている |
| 3 | Battery Charge 100% | 電池は満タン |
| 4 | UPS Load 23%(69W) | メインPC も動いている今、全部で 69W ほど |
| 5 | Remaining Time 0:39:35 | 今の使い方で、電池だけで約40分持つ |
場面5:コンセントを抜いて、3回試す
設定ができたら、UPS のコンセントを壁から抜いて、本当に止まるかを試しました。ブログも10分ほど止まりますが、見る人の少ない時間なので、そのまま進めました。
抜く前に、kvmhost で UPS と見張り役の様子を見ておきます。
date +%T
upsc ups@192.168.0.30 2>&1 | grep -E "^(ups.status|battery.charge|battery.runtime)"
systemctl is-active nut-monitor libvirt-guests- date +%T:
今の時刻(あとで記録を見るときの目印) - upsc ups@192.168.0.30 2>&1 | grep -E “…”:
UPS がOL(壁から電気が来ている)で、電池が満タンか - systemctl is-active nut-monitor libvirt-guests:
見張り役と、仮想マシンを先に止める役が、2つともactiveか
1回目:止まったが、止まる前の記録が残っていなかった
3台とも止まりました。ところが、起こし直してから止まる前の記録を見ようとすると、kvmhost には前の起動の記録がありませんでした。
Specifying boot ID or boot offset has no effect, no persistent journal was found.AlmaLinux 9 の初期の設定では、記録(journal)はメモリの中にだけあり、再起動で消えます。止まったときに何が起きたかを調べられないので、記録をディスクに残す形にしました(kvmhost と myserver の両方)。
ls -ld /var/log/journal
sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald
sudo journalctl --disk-usage- ls -ld /var/log/journal:
記録をディスクに残す置き場所があるか(なければメモリの中だけ) - sudo mkdir -p /var/log/journal:
置き場所を作る。これがあると、記録がディスクに残る - sudo systemd-tmpfiles –create –prefix /var/log/journal:
置き場所の持ち主と権限を、決まりどおりに整える - sudo systemctl restart systemd-journald:
記録の係を立ち上げ直して、ディスクに書き始める - sudo journalctl –disk-usage:
記録がどれだけディスクを使っているか
ls: '/var/log/journal' にアクセスできません: そのようなファイルやディレクトリはありません
Archived and active journals take up 16.0M in the file system.2回目:メインPC が「ぶつっ」と切れた
2回目は、自宅サーバーと NAS はきちんと止まりましたが、メインPC は Windows のシャットダウンの画面が出ないまま、突然電源が切れました。止まる前に、画面の右下に WinNUT-Client の「つながった」「切れた」の知らせが何度か出ていました。
今度は記録が残っていたので、kvmhost の見張り役の記録を見ると、次の流れでした。
| No. | 時刻 | 記録 | 読み方 |
|---|---|---|---|
| 1 | 11:26:08 | on battery | 電池に切り替わった(コンセントを抜いた) |
| 2 | 11:31:08 | Poll UPS … failed – Server disconnected | 5分たって NAS が止まり始め、知らせの係ごと止まった |
| 3 | 11:31:08 | … currently is not communicating, assuming dead | 電池で動いていたのに話せなくなったので、UPS はもうだめと見なした |
| 4 | 11:31:08 | Executing automatic power-fail shutdown | それで止まり始めた |
NAS からは、止まってという合図(FSD)は来ていませんでした。kvmhost は NUT の決まりで止まれましたが、WinNUT-Client はつなぎ直そうとくり返すだけで、合図を待っているうちに電気が切れました(場面6)。
そこで WinNUT-Client を、NAS の合図を待たずに、電池の様子を見て自分から止まる形に変えました(電池 90%、残り 1500秒)。電池が減ったまま試すと早く止まってしまうので、100% に戻ってから3回目を試しました。
3回目:NAS と自宅サーバーはねらいどおり、メインPC は間に合わなかった
15:06 にコンセントを抜き、起こし直してから kvmhost で記録を見ました。
sudo journalctl -b -1 -u nut-monitor --no-pager | grep -vE "upsmon 2\.8\.2$" | tail -6
sudo journalctl -b -1 --no-pager | grep -E "myserver のシャットダウンが完了|Shutting down\." | tail -2- journalctl -b -1 -u nut-monitor:
1つ前の起動のあいだの、見張り役の記録 grep -vE "upsmon 2\.8\.2$":
起動のたびに出る版の行を外すjournalctl -b -1 … grep -E "myserver のシャットダウンが完了|Shutting down\.":
仮想マシンを止め終わった時刻と、kvmhostが電源を切り始めた時刻- 記録をディスクに残す:
AlmaLinux 9 の初期の設定では、再起動で記録が消える。止まったときに何が起きたかを見るには、先に/var/log/journalを作っておく - 電池が満タンに戻ってから試す:
試しのあとは電池が減っているので、電池の条件で止める設定は、すぐに試すと本当の停電より早く止まる - WinNUT-Client の runtime の上限:
「Shutdown if runtime lower than」は 2999秒まで。9999 はエラーになった - メインPC の数えは取り消せる:
止め始めるまでの待ち時間のあいだに電気が戻ると、止めるのを取り消す。短い停電では止まらない
11月 04 15:11:26 kvmhost nut-monitor[975]: Communications with UPS ups@192.168.0.30 lost
11月 04 15:11:26 kvmhost nut-monitor[975]: UPS [ups@192.168.0.30] was last known to be not fully online and currently is not communicating, assuming dead
11月 04 15:11:26 kvmhost nut-monitor[975]: Executing automatic power-fail shutdown
11月 04 15:11:26 kvmhost nut-monitor[975]: Auto logout and shutdown proceeding
11月 04 15:11:31 kvmhost shutdown[3095]: Shutdown scheduled for Wed 2026-11-04 15:11:31 JST, use 'shutdown -c' to cancel.
11月 04 15:11:31 kvmhost systemd[1]: nut-monitor.service: Deactivated successfully.
11月 04 15:11:39 kvmhost libvirt-guests.sh[3243]: ゲスト myserver のシャットダウンが完了しました。
11月 04 15:11:39 kvmhost systemd[1]: Shutting down.抜いてから約5分で NAS が止まり始め、kvmhost は話せなくなってから13秒で仮想マシンを止め終わり、電源を切り始めました。
メインPC は、また5分ほどで突然切れました。WinNUT-Client の記録を見ると、電池が 90% を切ったのが停電の約4分後(15:10:32)で、そこから止め始めるまでの待ち時間(このときは180秒)を数えている途中で、電気が切れていました。

メインPC の止め方を早める
90% では遅かったので、電気が電池に切り替わったらすぐに数え始める形にしました。
| No. | 項目 | 変えたあと | 理由 |
|---|---|---|---|
| 1 | Shutdown if battery lower than | 99% | 電池に切り替わると、すぐに条件に届く |
| 2 | Shutdown if runtime lower than (sec) | 2999 | 入れられるいちばん大きい値(9999 はエラーになった) |
| 3 | Delay to Shutdown (sec) | 120 | 2分より短い停電なら、止めずに乗り切る |
| 4 | Shutdown on Nut’s FSD Signal | 印のまま | 合図が来たときのため |
短い試しで、コンセントを抜いて数秒で数えが始まり、2分のうちに戻すとすぐに取り消されるのを確かめました。これで、停電から2分半ほどでメインPC が止まり始め、NAS が止まる5分より前に止まり終わります。
場面6:分かったこと
いちばん大きかったのは、Synology の NAS は、止まり始めるときに「止まって」の合図(FSD)を送らず、知らせの係ごと止まってしまうことです。子の側は、合図ではなく「話せなくなった」ことで止まるかどうかが分かれます。
| No. | 機械 | 止まり方 | 結果 |
|---|---|---|---|
| 1 | NAS | 電池で5分たったら、スタンバイ モードに入って止まる | ねらいどおり |
| 2 | 自宅サーバー(nut-client) | 電池で動いていたのに話せなくなったら「assuming dead」で止まる(NUT の決まり) | 合図がなくても止まれた。仮想マシンを先に止めた |
| 3 | メインPC(WinNUT-Client) | 話せなくなっても止まらず、つなぎ直しをくり返す | 合図を待つ設定では間に合わず、電気が切れた。電池の条件(99%)と待ち時間(120秒)で、自分から止まる形にした |
ほかに分かったことです。
まとめ
UPS(CPJ500)を NAS に USB でつなぎ、NAS のネットワーク UPS サーバーから、自宅サーバーとメインPC に知らせる形にしました。
| No. | 機械 | 停電したとき |
|---|---|---|
| 1 | メインPC | 電池に切り替わって2分たつと止まり始める(2分より短い停電なら取り消す) |
| 2 | NAS | 電池で5分たつと止まる |
| 3 | 自宅サーバー | NAS が止まって話せなくなると、仮想マシンを先に止めてから止まる |
本番の試しで分かった「Synology は FSD を送らない」ことは、試さなければ気づけませんでした。設定したら、一度は本当にコンセントを抜いて、記録まで見ておくのがおすすめです。
NAS(DS224+)を入れたときの記録は「Synology DS224+ の記事」に、自宅サーバーの記事の一覧は「自宅サーバー構築メモ」にまとめています。ブログが外から開けるかは「UptimeRobot で自宅サーバーのブログを外から見張る」で見張っています。



コメント