停電から自宅サーバーを自動復帰させる:BIOSのAC電源復帰設定とサービス自動起動の確認

Photo: Brett Sayles / Pexels
先に結論です。停電のあと自宅サーバーが自分で戻ってくる状態にするには、次の3つを順に確認します。
- 電源が戻ったら本体が起動する:BIOS の AC 電源復帰の設定を「Power On」にする
- 起動したらサービスが立ち上がる:systemd・Docker・Proxmox の自動起動を有効にする
- 立ち上がる順番が合っている:NAS やルーターより先に、それに依存するサービスが起動して失敗しない
どれか1つ抜けると、「電源ランプは点いているのに、家族の写真バックアップだけ止まっている」という状態になります。最後に、実際に電源ケーブルを抜いて確かめるところまでやって完成です。
BIOS の AC 電源復帰を「Power On」にする
停電で電気が完全に途切れた状態から電源が戻ったとき、本体を起動するかどうかは BIOS(UEFI)の設定で決まります。項目名はメーカーによって違い、代表的なものは次のとおりです。
- ASUS などのマザーボード:Restore AC Power Loss
- Beelink などの N100 ミニPC:Chipset → PCH-IO Configuration → State After G3
- Lenovo ThinkCentre:Power → After Power Loss
選択肢はおおむね「Power Off(起動しない)」「Power On(必ず起動する)」「Last State(停電直前の状態に戻す)」の3つです。State After G3 の場合は「S0 State」が起動する、「S5 State」が起動しない、に当たります。G3 は電気がまったく来ていない状態を指す用語です。
自宅サーバーなら「Power On」をおすすめします。Last State でも動いていれば戻りそうに見えますが、次の章で触れる UPS 連携で OS を先に正常終了させた場合、直前の状態は「電源オフ」として扱われるのが一般的で、電源が戻っても起動しません。ThinkCentre Tiny は既定値が Last State とされているので、中古で買った場合は一度確認しておくと安心です。
NAS とラズパイも見ておきます。Synology は DSM の「コントロールパネル」→「ハードウェアと電源」にある電源の回復の項目で、電源復旧時に自動で再起動する設定を有効にします。Raspberry Pi は電源が入ると起動する設計なので、設定は不要です。
UPS を使っているなら「電気が早く戻った場合」に注意
UPS と自動シャットダウンを連携させている場合、見落としやすいケースがあります。停電で OS がシャットダウンしたあと、UPS のバッテリーが切れる前に電気が戻るケースです。
このとき UPS は出力を続けているので、サーバーから見ると AC 電源が一度も途切れていません。BIOS の AC 電源復帰は「電気が途切れて、また来た」ときに働く設定なので、サーバーは電源オフのまま止まり続けます。
これを避けるには、シャットダウンの最後に UPS 自身の出力をいったん止めます。NUT(Network UPS Tools)では、upsmon がシャットダウン時に /etc/killpower という目印のファイルを作り、停止処理の終盤で UPS に「少し待ってから出力を切る」命令を送る仕組みになっています。出力が一度切れれば、電気が戻ったときに UPS が給電を再開し、サーバーは AC 電源の復帰として起動できます。Synology の「システムがセーフモードになったら UPS を停止します」も同じ役割です。
NUT のパッケージを入れただけで、この部分まで動いているとは限りません。後述のテストで一緒に確認してください。UPS をこれから選ぶなら、正弦波出力の オムロン POWLI BW55T のような機種が候補です。使う OS や NAS の対応リストに載っているかは、購入前に確認しておきます。
サービスの自動起動を3か所で確認する
本体が起動しても、サービスが自動で立ち上がらなければ意味がありません。自宅サーバーでよく使う3つの仕組みで確認します。
systemd(OS のサービス):Docker 本体や Samba、Tailscale などは systemd のサービスとして動いています。enabled と表示されれば起動時に立ち上がります。
systemctl is-enabled docker tailscaled smbd
sudo systemctl enable --now docker # disabled だった場合
Docker のコンテナ:再起動ポリシーの既定値は no(自動で起動しない)です。Compose ファイルの各サービスに restart: unless-stopped を書いておけば、Docker 本体の起動と一緒にコンテナも戻ります。いまの設定は次のコマンドで一覧できます。
docker ps -aq | xargs docker inspect -f '{{.Name}} {{.HostConfig.RestartPolicy.Name}}'
unless-stopped は、docker stop で手動停止したコンテナを再起動後も止めたままにします。メンテナンスで止めていたものが勝手に戻らないので、自宅用途では always より扱いやすいと思います。
Proxmox の VM・LXC:各ゲストの「オプション」にある Start at boot(ホスト起動時に自動で起動する設定)は既定でオフです。画面で有効にするか、コマンドで設定します。
qm set 100 --onboot 1 # VM
pct set 101 --onboot 1 # LXC
起動の順番を合わせて、電源を抜いて試す
電気が戻ると、すべての機器が一斉に起動します。ミニPCは数十秒で立ち上がりますが、HDD を積んだ NAS やルーター・ONU はそれより時間がかかることが多く、NAS の共有フォルダを使うサービスが「相手がまだいない」状態で起動して失敗しがちです。対策は2つです。
Proxmox は起動順と待ち時間を指定する:NAS 役の VM を先に起動させ、次のゲストまで待ち時間を置けます。ホスト全体の自動起動を遅らせたいときは、ノードの「システム」→「オプション」にある Start on boot delay も使えます。
qm set 100 --startup order=1,up=120 # 1番目に起動し、次まで120秒待つ
Linux の fstab は起動を止めない書き方にする:NAS の共有を /etc/fstab でマウントしている場合、nofail を付けると、NAS が見つからなくても起動処理が止まりません。x-systemd.automount を足すと、起動時ではなく初回アクセス時にマウントされます。
192.168.1.20:/volume1/share /mnt/nas nfs _netdev,nofail,x-systemd.automount 0 0
設定が終わったら実際に試します。動作中にいきなり抜くとデータを傷める可能性があるので、次の順番がおすすめです。
sudo shutdown -h nowで正常終了させる- サーバーの電源ケーブルを抜き、30秒以上待つ(完全に電気が抜けた状態にするため、メーカーの案内でも30秒以上とされています)
- 挿し直し、手を触れずに起動するかを見る
- 起動したら
systemctl --failed、docker ps、Proxmox のゲスト一覧、NAS のマウントを確認する
UPS 連携まで確かめるなら、UPS の入力側のプラグを抜き、自動シャットダウン → UPS の出力停止 → プラグを戻して自動起動、まで一通り見ます。死活監視を入れているなら、すべて正常に戻ったかを監視画面でも確認できます。
まとめ
- BIOS の AC 電源復帰(Restore AC Power Loss / State After G3 / After Power Loss)は「Power On」にする。Last State は UPS 連携と相性が悪い
- UPS 連携では、シャットダウン後に UPS の出力をいったん止める設定(NUT の killpower、Synology の UPS 停止)を入れる
- systemd の enabled、Docker の
restart: unless-stopped、Proxmox の Start at boot の3か所を確認する - NAS やルーターに依存するサービスは、起動順・待ち時間・fstab の
nofailで、遅れて来る相手に備える - 設定したら、正常終了 → 電源を抜く → 挿し直す、の順で一度は実際に試す
停電はめったに起きないぶん、設定の抜けに気づくのはいつも本番です。年に1回、UPS のテストと一緒に確認しておくと安心です。
運営者が作った Excel テンプレートを BOOTH で配布しています。IT 資産管理台帳(無料 Lite 版あり) / IT 資格の学習管理シート


