我有三台 NAS,Synology 群晖、QNAP 威联通和 ZSpace 极空间,前者放在出租屋里作为主力,后两台放在老家作为备份。
因为极空间是 arm64 版本双盘位的,功耗不高,所以和 QNAP 共用一台 UPS 就好了。之前折腾了一下,让极空间作为 Master 通过 USB 连接 UPS,然后 QNAP 作为 Slave 通过 NUT (Network UPS Tools) 局域网连接。
不过因为涉及到系统文件改动,每次极空间系统升级后都需要重新操作一遍,每次我都会忘记要怎么捣鼓……所以写篇博客记录下。
话说 2025 年居然一篇博客都没写,工作太忙了呀,而且总是犯懒。以前上学的时候写博客,不怎么理解那些断更的博主,现在可以体会到那种感觉了……草稿倒是堆了很多,希望明年可以发出来吧!
TL;DR
以 root 权限登录极空间,运行以下命令,然后重启服务即可。
sed -i 's/127.0.0.1/0.0.0.0/g' /zspace/applications/services/nut/config/upsd.confcat >> /zspace/applications/services/nut/config/upsd.users << EOF[admin] password = 123456 upsmon slave allowfrom = %EOFcat >> /zspace/applications/services/nut/config/ups.conf << EOF[qnapups] driver = usbhid-ups port = auto desc = "zspace ups for qnap" lowbatt = 15 pollfreq = 15 offdelay = 60EOF
备注
首先要吐槽的就是 QNAP 这个傻逼系统,我已经不知道吐槽过多少次了。
QNAP 的天才工程师的天才设计:在作为 Network UPS Slave 连接时,用户只能指定「网络 UPS 服务器的 IP 地址」这一个选项,剩下的都是写死的:
- 用户名 admin
- 密码 123456
- 端口 3493
- 名称 qnapups
只要任何一个不对都连不上。Man! What can I say?
所以如果你想让 QNAP 和极空间共享一台 UPS,有两个选择:
- QNAP as Master,极空间 as Slave
- 极空间 as Master,QNAP as Slave
不过当时 24 年我折腾的时候,极空间还不支持 NUT Slave 模式。虽然那会儿极空间已经开放了 ssh 和 root 权限(也是这家之前总是被吐槽的一点),但是考虑到如果通过修改系统文件的方式让极空间支持 NUT Slave,可能不稳,毕竟这种定制系统也不知道哪里改了些什么东西。
所以我选择的是极空间通过 USB 物理连接 UPS,启动 NUT Server 作为 Master,QNAP 作为 Slave 客户端连接 NUT Server。
UPS <---{USB Cable}---> ZSpace <---{TCP 3493}---> QNAP (NUT Server) (NUT Client)
P.S. 现在(2025 年 12 月)极空间已经支持 NUT Slave 模式了,各种参数都可以自定义,所以更好的方式应该是上述的第一种。不过我懒得去改接线了,先这样吧。又不是不能用.jpg

在极空间上的操作
因为 QNAP 的弱智系统只能接受固定的用户名、密码和 UPS 名称,所以需要修改极空间的 NUT Server 配置。
首先要拿到极空间 NAS 的 ssh 和 root 权限,这里就不赘述了。登上去以后:
ls -al /etc/nut# lrwxrwxrwx 1 root root 33 Sep 17 2024 /etc/nut -> /zspace/applications/services/nutcd /zspace/applications/services/nutls -a ./# . config restart.sh setting.json ups.conf upssched# .. external_ups_setting.json restart_driver.sh start.sh upsd.conf upssched-cmd.sh# client nut.conf restart_upsd.sh stop.sh upsd.users upssched.conf# conf realstart.sh server u2600_tools upsmon.conf
然后 cat ./server/nut-server.service 看看配置文件在哪(后续系统版本升级后实际路径可能会变,最好确认一下):
#!/bin/sh#use upsd.confexport NUT_CONFPATH=/zspace/applications/services/nut/config/sbin/upsd -u root
看看配置文件 ./config/upsd.conf:
# Network UPS Tools: example upsd configuration file## ... 其他注释省略 ...# =======================================================================# LISTEN <address> [<port>]LISTEN 127.0.0.1 3493LISTEN ::1 3493
把这里的 127.0.0.1 改成 0.0.0.0,允许局域网(QNAP NAS)访问。或者也可以起一个 socat 做转发,都行。有需要的话也可以配一下 ACL,只允许 QNAP IP 访问。
cp /zspace/applications/services/nut/config/upsd.conf ~/upsd.conf.baksed -i 's/127.0.0.1/0.0.0.0/g' /zspace/applications/services/nut/config/upsd.conf
再看看用户配置文件 ./config/upsd.users:
# Network UPS Tools: Example upsd.users## ... 其他注释省略 ...# --------------------------------------------------------------------------[upsmaster] password = sekret upsmon master actions = SET instcmds = ALL[nut] password = nut upsmon slave allowfrom = %
往里面加上 QNAP 需要的用户:
cp /zspace/applications/services/nut/config/upsd.users ~/upsd.users.bakcat >> /zspace/applications/services/nut/config/upsd.users << EOF[admin] password = 123456 upsmon slave allowfrom = %EOF
然后再看看 UPS 配置文件 ./config/ups.conf:
# Network UPS Tools: example ups.conf## ... 其他注释省略 ...# ------------------------maxretry = 3xretry = 5pollinterval = 15[ups0] driver = usbhid-ups port = auto desc = "nut ups" lowbatt = 15 pollfreq = 15 offdelay = 60
往里面加上 QNAP 需要的 UPS 名称:
cp /zspace/applications/services/nut/config/ups.conf ~/ups.conf.bakcat >> /zspace/applications/services/nut/config/ups.conf << EOF[qnapups] driver = usbhid-ups port = auto desc = "zspace ups for qnap" lowbatt = 15 pollfreq = 15 offdelay = 60EOF
最后,重启 NUT 服务:
本来想直接执行 /zspace/applications/services/nut/restart.sh 重启服务的,但似乎缺少某些环境变量,可能不是拿来直接调用的。
可以直接去极空间的网页面板,设置 > UPS 设置,把开关关闭然后再打开就行了。再检查下进程,看到 qnapups 就算成功了。
ps aux | grep ups# root 29716 /usr/share/nut/usbhid-ups -a ups0 -u root# root 29718 /usr/share/nut/usbhid-ups -a qnapups -u root# root 29722 /sbin/upsd -u root
在 QNAP 上的操作
不需要做什么,在网页面板上填入极空间 NAS 的局域网 IP 就能连上了。

通过 upsc qnapups@192.168.1.4 查看 UPS 信息:
battery.charge: 100battery.charge.low: 10battery.mfr.date: 2001/01/01battery.runtime: 3618battery.runtime.low: 120battery.type: PbAcbattery.voltage: 13.6battery.voltage.nominal: 12.0device.mfr: American Power Conversiondevice.model: Back-UPS BK650M2-CHdevice.type: upsdriver.name: usbhid-ups
顺便看看 QNAP 上的 NUT 服务配置:
ls -al /etc/config# lrwxrwxrwx 1 admin administrators 21 2025-12-31 13:14 /etc/config -> /mnt/HDA_ROOT/.configls -a /mnt/HDA_ROOT/.config/ups# . .. ups.conf upsd.conf upsd.users upsmon.conf
配置文件在 /mnt/HDA_ROOT/.config/ups/upsmon.conf:
# Network UPS Tools: example upsmon configuration## ... 其他注释省略 ...# --------------------------------------------------------------------------MONITOR qnapups@192.168.1.4 1 admin 123456 slave#MONITOR zspaceups@192.168.1.4 1 upsmaster sekret slave# ... 其他注释省略 ...RUN_AS_USER adminMINSUPPLIES 1SHUTDOWNCMD "/sbin/shutdown -h +0"POLLFREQ 5POLLFREQALERT 5HOSTSYNC 15DEADTIME 15POWERDOWNFLAG /etc/killpowerRBWARNTIME 43200NOCOMMWARNTIME 300FINALDELAY 5
其实我之前也试过直接改这个文件,把 MONITOR 里写死的配置改成极空间的配置。但是试下来发现改完以后虽然服务是跑起来了,但是在 QNAP 的网页面板上不会显示 UPS 信息和已连接到 UPS 设备的图标。也不知道是这系统魔改了什么地方,担心会出现奇怪的问题,遂作罢。
如果你需要将 QNAP 作为 NUT Server,那可以关注 upsd.conf 和 upsd.users 文件,网上也有相关教程。
可视化 UPS 监控面板
因为 NUT 的网络协议走的是 TCP 3493,所以就算是异地的 UPS,组建虚拟局域网后也可以互相访问。
这里推荐一个开源的 NUT UPS 管理面板 PeaNUT,用起来挺方便的。
