如何設置家用威聯通 NAS UPS 斷電后自動關機并通知其他設備?

場景

??備注:

求輕噴, 求放過. ??

我真的是個理線方面的白癡. 這已經是我的極限了. ??

我的家庭實驗室 Homelab 服務器集群配置如下.

HomeLab 上半部分
HomeLab 下半部分

上半部分之前已經介紹過了, 這里就不再贅述了. 今天重點介紹介紹 UPS 和 NAS 部分.

  • 1臺 UPS, 型號為 APC Back-UPS 650. 插座插著: NAS 和 插線板(插線板上連了4個 N100小主機和其他; 通過數據端口和 NAS 連接). 如下圖: (求輕噴, 求放過. ??)

    UPS
  • 1 臺威聯通 QNAP TS-453Bmini NAS. 如下圖: (求輕噴, 求放過. ??)

現在的需求是:

  1. UPS 斷電后一段時間(如 5min 后), NAS 自動斷電;
  2. NAS 作為 UPS Server 運行, UPS 斷電后, 通知其他 4 臺 N100 小主機
  3. 4 臺 N100 小主機收到通知后, 也過一段時間(如 5min 后)自動斷電.

具體實現概述如下:

  1. 物理層面: UPS 通過數據線連接到 NAS USB
  2. 軟件層面:
    1. NAS: 通過 UI 配置斷電后操作;
    2. NAS: 通過 UI 啟用 UPS Server 配置;
    3. N100 小主機: UPS Client 配置.

細節(jié)步驟如下:

實戰(zhàn)

1. 物理層面: UPS 通過數據線連接到 NAS USB

這里我就不放圖了, 因為就在上面那一堆線里面... 這個機柜在墻角, 我左跪右跪看了一圈也沒找到能拍清楚的角度... ??

APC UPS 自帶一根數據線, 具體操作如下:

使用 USB 纜線將 Back-UPS 連接到 NAS。將一端插到 Back-UPS 后面板上的 POWERCHUTE 端口,另一端插到計算機上的 USB 端口。

就是下圖的 ⑥:

APC 示意圖

完成.

驗證

完成后, 我們可以訪問 威聯通 QNAP QTS 界面, 會看到 UPS 的相關信息, 具體如下:

QTS 外部設備

接下來進入軟件層面操作.

2. NAS: 通過 UI 配置斷電后的操作

具體如下:

QNAP QTS UPS 設置界面
  1. 進入 威聯通 QNAP QTS 界面;
  2. 訪問 控制臺 -> 系統(tǒng) -> 外界設備 -> UPS
  3. 選擇 USB 連接 -> 當電源失效時, 10 分鐘后進入自動保護模式. (當然, 你可以選擇另一選項, 即: 關閉 NAS)

如果你只需要 UPS 和 NAS 聯動, 那么到這里就配置完成了.

3. NAS: 通過 UI 啟用 UPS Server 配置

如果你還需要和其他主機/服務器聯動, 那么需要通過 UI 啟用 UPS Server 配置, 具體如上圖 ⑥:

  1. 啟用 網絡不間斷電源服務器(即 UPS Server)
  2. 并添加 4 臺 N100 小主機的 IP 地址. 如: 192.168.3.154

完成.

額外說明

威聯通 QNAP QTS 在后臺, 實際上運行的是: upsd 服務, 監(jiān)聽了 3493 端口. 如下:

[admin@NAS33657A ups]# netstat -tuln | grep 3493
tcp        0      0 0.0.0.0:3493            0.0.0.0:*               LISTEN      
[admin@NAS33657A ups]# ps -ef|grep ups
 6960 admin       996 S   grep ups
14369 admin      1764 R   /usr/local/ups/bin/usbhid-ups -a qnapups -u admin
15999 admin      1536 S   /usr/sbin/upsd -u admin
23676 admin      8548 S   /usr/sbin/upsutil

這里我們需要知道的是:

  1. QNAP UPS Server 的 名稱是:qnapups

威聯通 QNAP QTS 的 UPS 配置, 具體位于 /etc/config/ups/ 目錄下, 如下:

[admin@NAS33657A ups]# ls
ups.conf  upsd.conf  upsdrv.map  upsd.users  upsmon.conf

[admin@NAS33657A ups]# cat upsd.users
[admin]
                password = 123456
                allowfrom = localhost
                actions = SET
                instcmds = ALL
                upsmon master           # or upsmon slave

這里我們需要知道的是:

  1. QNAP UPS Server 的用戶是:admin
  2. 密碼是: 123456

總結一下, 威聯通 QNAP QTS Server 信息:

  1. 實際上運行的是: upsd 服務
  2. 監(jiān)聽了 3493 端口
  3. UPS Server 的 名稱是:qnapups (?? 注意: 在威聯通所有 NAS 上, 這個名字都是固定的)
  4. 用戶是:admin
  5. 密碼是: 123456

后面 N100 配置 UPS Client 需要用到這些信息.

4. N100 小主機: UPS Client 配置

我的 N100 小主機是 Ubuntu 24.04, 要在 Linux 系統(tǒng)上實現與 UPS(不間斷電源)服務器的交互,并在斷電 5 分鐘后自動關機,通常需要使用 UPS 監(jiān)控軟件。常見的工具是 NUT(Network UPS Tools),它是一個開源的 UPS 監(jiān)控和管理工具。

既然已經在 NAS 上運行了 upsd,并且 UPS 是 APC Back-UPS 650 通過 USB 連接到 NAS,那么在小主機上,可以通過配置 NUT 客戶端(upsmon)來與 NAS 上的 upsd 交互,并實現斷電 5 分鐘后關機。

以下是詳細的步驟:

4.1. 在 Linux 設備上安裝 NUT 客戶端

在需要監(jiān)控 UPS 的 Linux 設備上,安裝 NUT 客戶端工具:

  • 對于基于 Debian/Ubuntu 的系統(tǒng):

    sudo apt-get update
    sudo apt-get install nut-client
    
  • 如果你是基于 Red Hat/CentOS 的系統(tǒng):

    sudo yum install nut-client
    

4.2. 配置 NUT 客戶端

在 Linux 設備上,編輯 NUT 客戶端的配置文件 /etc/nut/upsmon.conf,添加以下內容:

MONITOR qnapups@nas_ip 1 admin 123456 slave
  • qnapups:這是 QNAP NAS 上 UPS 的名稱(?? 注意: 在威聯通所有 NAS 上, 這個名字都是固定的)。
  • nas_ip:NAS 的 IP 地址。
  • admin:NAS 上定義的用戶名。
  • 123456:NAS 上定義的密碼。
  • slave:表示這臺設備是客戶端,不是主控設備。

4.3. 設置斷電后關機

/etc/nut/upsmon.conf 中,添加以下行以設置斷電 5 分鐘后關機:

SHUTDOWNCMD "/sbin/shutdown -h +5"

4.4. 設置 NUT 運行模式

/etc/nut/nut.conf 中, 有 4 種運行模式, 分別為:

  1. none: NUT 沒有配置,或者使用集成電源管理,或者使用一些外部系統(tǒng)來啟動 NUT 組件. 因此,不需要由 NUT 軟件包捆綁的腳本或服務啟動任何內容。
  2. standalone: 這種模式只針對本地配置,由 1 個 UPS 保護本地系統(tǒng)。這意味著要啟動 3 個 NUT 層(驅動程序、upsdupsmon)及相應的配置文件。這種模式還可以處理 UPS 冗余。
  3. netserver: 與獨立配置相同,但還需要一些額外的網絡訪問控制(防火墻、tcp包裝器)以及在 upsd.conf中可能需要一個特定的 LISTEN 指令。由于此模式對網絡開放,因此應特別關注安全問題。 -- 很明顯, NAS UPS Server 是這種模式.
  4. netclient: 這種模式只要求upsmon(以及它可能使用的工具,如upssched或自定義腳本)來監(jiān)視遠程NUT服務器,并可能關閉此系統(tǒng)(在這種情況下,upsmon的一部分必須以root身份運行)。-- 很明顯, 我們需要設置 Linux 設備為此模式.

調整 mode 配置為:

MODE=netclient

4.4. 啟動 NUT 客戶端服務

啟動 upsmon 服務并設置為開機自啟:

  • 對于基于 systemd 的系統(tǒng):

    sudo systemctl start nut-client
    sudo systemctl enable nut-client
    
  • 對于基于 SysVinit 的系統(tǒng):

    sudo service nut-client start
    sudo update-rc.d nut-client defaults
    

查看啟動狀態(tài):

4.4.1 報錯修復

這里第一次啟動后報了1個錯誤, 具體如下:

  1. Failed to open '/usr/lib/tmpfiles.d/nut-common-tmpfiles.conf': No such file or directory
? sudo systemctl status nut-client.service
○ nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller
     Loaded: loaded (/usr/lib/systemd/system/nut-monitor.service; enabled; preset: enabled)
     Active: inactive (dead) since Sat 2025-03-22 17:12:20 CST; 8s ago
   Duration: 5ms
    Process: 347996 ExecStartPre=/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/nut-common-tmpfiles.conf (code=exited, status=1/FAILURE)
    Process: 347998 ExecStart=/sbin/upsmon -F (code=exited, status=0/SUCCESS)
   Main PID: 347998 (code=exited, status=0/SUCCESS)
        CPU: 15ms

Mar 22 17:12:20 n100-jumper-2 systemd[1]: Starting nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller...
Mar 22 17:12:20 n100-jumper-2 systemd-tmpfiles[347996]: Failed to open '/usr/lib/tmpfiles.d/nut-common-tmpfiles.conf': No such file or directory
Mar 22 17:12:20 n100-jumper-2 systemd[1]: Started nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller.
Mar 22 17:12:20 n100-jumper-2 nut-monitor[347998]: upsmon disabled, please adjust the configuration to your needs
Mar 22 17:12:20 n100-jumper-2 nut-monitor[347998]: Then set MODE to a suitable value in /etc/nut/nut.conf to enable it
Mar 22 17:12:20 n100-jumper-2 systemd[1]: nut-monitor.service: Deactivated successfully.

所以執(zhí)行如下命令修復:

sudo touch /usr/lib/tmpfiles.d/nut-common-tmpfiles.conf

啟動后再次運行, 沒有報錯:

? sudo systemctl status nut-client.service 
● nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller
     Loaded: loaded (/usr/lib/systemd/system/nut-monitor.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-03-22 17:15:21 CST; 2s ago
    Process: 350296 ExecStartPre=/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/nut-common-tmpfiles.conf (code=exited, status=0/SUCCESS)
   Main PID: 350298 (upsmon)
      Tasks: 2 (limit: 18754)
     Memory: 3.6M (peak: 3.8M)
        CPU: 22ms
     CGroup: /system.slice/nut-monitor.service
             ├─350298 /lib/nut/upsmon -F
             └─350310 /lib/nut/upsmon -F

Mar 22 17:15:21 n100-jumper-2 systemd[1]: Starting nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller...
Mar 22 17:15:21 n100-jumper-2 systemd[1]: Started nut-monitor.service - Network UPS Tools - power device monitor and shutdown controller.
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350298]: fopen /run/nut/upsmon.pid: No such file or directory
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350298]: Could not find PID file to see if previous upsmon instance is already running!
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350298]: Using power down flag file /etc/killpower
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350298]: UPS: qnapups@192.168.3.216 (secondary) (power value 1)
Mar 22 17:15:21 n100-jumper-2 nut-monitor[350310]: Init SSL without certificate database

4.5. 測試配置

4.5.1 檢查 UPS 狀態(tài)

在 Linux 設備上,使用以下命令檢查是否能夠正確獲取 UPS 狀態(tài):

? upsc qnapups@192.168.3.216
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.date: not set
battery.mfr.date: 2019/12/10
battery.runtime: 1140
battery.runtime.low: 120
battery.type: PbAc
battery.voltage: 13.7
battery.voltage.nominal: 12.0
device.mfr: APC
device.model: Back-UPS 650
device.serial: 3B1950X62634  
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttyS1
driver.parameter.synchronous: no
driver.version: 2.7.4
driver.version.data: APC HID 0.96
driver.version.internal: 0.41
input.sensitivity: low
input.transfer.high: 266
input.transfer.low: 165
input.transfer.reason: input voltage out of range
input.voltage: 226.0
input.voltage.nominal: 220
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.firmware: 822.A3.I
ups.firmware.aux: A3
ups.load: 38
ups.mfr: APC
ups.mfr.date: 2019/12/10
ups.model: Back-UPS 650
ups.productid: 0002
ups.serial: 3B1950X62634  
ups.status: OL
ups.timer.reboot: 0
ups.timer.shutdown: -1
ups.vendorid: 051d

如果配置正確,你應該能夠看到 UPS 的詳細信息,例如電池狀態(tài)、輸入電壓等。

4.5.2 模擬斷電測試

你可以通過斷開 UPS 的電源來測試配置是否正確。如果一切正常,Linux 設備應該在斷電 5 分鐘后自動關機。

全部完成! ??????


5. 其他注意事項

  • 防火墻配置:確保 NAS 的防火墻允許來自 Linux 設備的 3493 端口的連接。
  • 權限問題:如果你是其他 NAS, 需要確保 NAS 上的 upsd.users 文件中定義的權限允許客戶端設備訪問 UPS 信息。
  • 時間同步:確保 NAS 和 Linux 設備的時間同步,以避免因時間差異導致的監(jiān)控問題。

總結

通過以上步驟,你應該能夠實現:

當 UPS 斷電后:

  1. NAS 自動關機
  2. 其他 Linux 設備 自動關機

??????

三人行, 必有我?guī)? 知識共享, 天下為公. 本文由東風微鳴技術博客 EWhisper.cn 編寫.

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容