短時間の瞬停が招く大きな代償
ある火曜日の午前2時、わずか3秒の電圧降下によって私のHomeLab全体がオフラインになりました。ハードウェアは無事でしたが、その後の処理は悲惨なものでした。TrueNAS上のZFSプールは6時間に及ぶスクラブ(整合性チェック)を余儀なくされ、2つのMariaDBコンテナでは修復不可能なテーブル破損が発生しました。その夜、私は痛烈な教訓を学びました。サーバーがバッテリー駆動に切り替わったことを検知できなければ、無停電電源装置(UPS)はただの「重い箱」に過ぎないということです。
Network UPS Tools (NUT) を設定することで、状況は一変します。これにより、あなたのラボは壊れやすい趣味の機材の集まりから、耐障害性の高いプロダクション級の環境へと進化します。もしUPSをただ壁のコンセントに繋いだだけの「知能のないバッテリー」として使っているなら、保護は半分しかできていません。NUTを導入すれば、サーバーはバッテリーの状態を監視し、消費電力を追跡し、そして最も重要なこととして、電圧が低下しすぎる前に安全なシャットダウン(グレースフル・シャットダウン)を実行できるようになります。
NUTはサーバー・クライアント構成を採用しています。1台のサーバーがプライマリ(マスター)となり、USB経由でUPSに直接接続されます。他のサーバーはセカンダリ(スレーブ)としてネットワーク経由で情報を待ち受けます。バッテリー残量がしきい値(例:残り15%)に達すると、プライマリはすべてのセカンダリに即時シャットダウンの合図を送ります。クライアントが安全に停止した後、最後にプライマリ自身がシャットダウンします。
LinuxへのNUTのインストール
多くのHomeLabユーザーはUbuntu、Debian、またはProxmoxを使用しているでしょう。NUTは標準リポジトリで提供されているため、インストールは非常に簡単です。プライマリサーバーには、24時間稼働している最も安定したマシン(低電力のRaspberry Pi 4やメインのProxmoxノードなど)を使用することをお勧めします。
まず、パッケージリストを更新して必要なコンポーネントをインストールします。
sudo apt update
sudo apt install nut nut-client nut-server
次に、使用しているハードウェアに必要なドライバを特定します。UPSをUSBでサーバーに接続し、スキャンユーティリティを実行します。
nut-scanner -U
このツールが正しいドライバを識別します。最近のCyberPower、APC、Eaton製品の多くでは usbhid-ups と表示されるはずです。出力に含まれる vendorid と productid をメモしておいてください。次のステップで使用します。
NUTプライマリサーバーの設定
主に /etc/nut/ 内の4つのファイルを編集します。これらでドライバ、データサーバー、監視デーモンを管理します。
1. UPSドライバの定義
/etc/nut/ups.conf を開きます。このファイルは、NUTが物理ハードウェアと通信する方法を定義します。スキャナーで取得した値を使用してください。
[myups]
driver = usbhid-ups
port = auto
desc = "CyberPower CP1500PFCLCD"
vendorid = 0764
productid = 0501
2. データサーバーの設定
/etc/nut/upsd.conf を編集します。デフォルトではNUTはローカルマシンのみをリッスンします。ラック内の他のサーバーからもバッテリーを監視できるように、サーバーの固定IPアドレスを追加します。
LISTEN 127.0.0.1 3493
LISTEN 192.168.1.50 3493 # サーバーの実際のIPアドレスを使用してください
3. セキュアなユーザーの作成
NUTはネットワーククライアントの認証を必要とします。/etc/nut/upsd.users を編集します。ローカルマシン用の管理アカウントと、リモートクライアント用の制限付きアカウントを作成します。
[upsmon_primary]
password = your_strong_password
upsmon master
[upsmon_secondary]
password = secondary_password
upsmon slave
4. 動作モードと監視の設定
/etc/nut/nut.conf のシステムモードを netserver に設定します。最後に、/etc/nut/upsmon.conf に以下の行を追加して、サーバー自身を監視するように設定します。
MONITOR myups@localhost 1 upsmon_primary your_strong_password master
設定を適用するためにサービスを再起動します。
sudo systemctl restart nut-server nut-client
sudo upsdrvctl stop
sudo upsdrvctl start
検証とテスト
upsc コマンドを使用してUPSの状態を確認します。バッテリー残量、入力電圧、現在の負荷(ワット数)などの詳細なメトリクスが返されるはずです。
upsc myups@localhost
ups.status の行を確認してください。OL はオンライン(商用電源)であることを意味します。コンセントを抜くと、2秒以内に OB (On Battery:バッテリー駆動) に切り替わるはずです。1500VAのUPSで150Wの負荷がある場合、約25〜30分の稼働時間が表示されるでしょう。
運命の瞬間:シャットダウンのテスト
実際に動作することを確認するまでは、設定が正しいと思い込まないでください。実際の停電中にバッテリー残量が2%になってから設定ミスに気づくのは避けたいものです。強制シャットダウン(FSD)をシミュレートして、シーケンスを検証します。
sudo upsmon -c fsd
警告: このコマンドは、接続されているすべてのシステムのシャットダウンを即座に開始します。Enterキーを押す前に、作業内容を保存してください。
セカンダリクライアントの追加
Plexサーバーやバックアップノードなど、ラボ内の他のすべてのマシンには nut-client のみをインストールします。/etc/nut/nut.conf で MODE=netclient と設定し、/etc/nut/upsmon.conf に以下を追加します。
MONITOR [email protected] 1 upsmon_secondary secondary_password slave
これらのクライアントは、プライマリからの電力異常信号を待機するようになります。信号を受け取ると、自動的に shutdown -h now コマンドを実行します。
電力状況の可視化
Grafanaなどの監視スタックを使用している場合、TelegrafのNUTプラグインを使用してこれらのメトリクスを収集できます。リアルタイムの電力消費量やバッテリーの健康状態をダッシュボードで確認できるのは非常に満足感があります。これはキャパシティプランニングにも役立ち、ラックに機材を追加する際にUPSに過負荷がかかっていないかを確認できます。
NUTを導入することは、単なるハードウェア保護以上の意味を持ちます。数時間に及ぶデータ復旧作業からあなたを救う、自動化されたオーケストレーションシステムを構築したことになります。次に停電が発生したとき、あなたのHomeLabはプロフェッショナルな優雅さでそれに対処するでしょう。

