资讯详情

NAS多设备UPS断电联动:基于NUT实现威联通与Ubuntu优雅关机

📅 2026/9/27 1:18:54 | 华诺云谱 👁 阅读
NAS多设备UPS断电联动:基于NUT实现威联通与Ubuntu优雅关机
1. 为什么NAS玩家迟早要碰NUT这套方案玩NAS的人大概都经历过这样一个阶段一开始只是拿它当个网络硬盘存存电影照片后来开始跑Docker、挂下载、做媒体库再往后设备越堆越多硬盘越插越满突然某天小区跳闸NAS直接断电关机硬盘SMART里多出几条异常记录那一刻才意识到——UPS这东西真不是可有可无的配件。但买了UPS只是第一步。真正让人头疼的是UPS插在威联通上Ubuntu那台小主机怎么办虚拟机里的服务怎么办总不能每台设备都配一个UPS吧。这时候NUTNetwork UPS Tools就派上用场了。它做的事情说白了就一句话让一台设备通过USB或网络读取UPS的状态再把这份状态共享给局域网里其他设备。威联通负责当“服务端”直连UPSUbuntu作为“客户端”接收状态断电时两边都能按预设策略优雅关机。这套方案适合谁适合手里至少有两台以上常开设备、已经上了UPS、并且愿意花一两个小时把自动化关机链路打通的人。如果你只有一台NAS威联通自带的UPS功能其实够用了但只要你有多台设备共享一个UPS的需求NUT几乎是目前最成熟、最通用的选择。它跨平台、开源、协议标准威联通、群晖、各种Linux发行版、甚至部分虚拟化平台都能接入。我自己的环境是威联通TS-464C2通过USB连接一台APC Back-UPSUbuntu 22.04小主机跑着若干Docker服务两台设备在同一个千兆局域网内。下面就把整套配置过程、踩过的坑和最终稳定运行的方案完整拆一遍。2. 方案整体设计与角色划分2.1 为什么选威联通做服务端而不是UbuntuNUT的架构是典型的C/S模式一个upsd守护进程负责和UPS硬件通信其他设备通过upsmon或upsc去查询状态。所以第一个决策就是UPS的USB线插在哪台设备上。我选择插在威联通上理由有三条。第一威联通QTS系统自带NUT的定制版本在App Center里能直接开启“UPS服务”图形界面配置省事不用手动编译。第二NAS通常是7x24常开的而Ubuntu小主机有时候我会重启折腾系统如果UPS挂在Ubuntu上重启期间整个监控链路就断了。第三威联通对USB UPS的兼容列表比较全APC、山特、CyberPower这些常见品牌基本即插即用。反过来如果你的UPS是插在Ubuntu上威联通做客户端理论上也成立但威联通QTS对第三方NUT服务端的支持配置起来更绕需要在控制台里手动指定网络UPS的IP而且部分固件版本对认证字段处理有差异。所以除非你的Ubuntu是那台“永远不动”的机器否则还是让NAS当服务端更稳。2.2 NUT的三层结构要搞清楚很多人配NUT失败是因为没分清三个组件的职责驱动层driver比如usbhid-ups直接和UPS硬件对话读取电压、负载、电池容量等原始数据。服务层upsd把驱动层的数据汇总监听TCP 3493端口对外提供访问接口。监控层upsmon连接upsd根据状态执行动作比如断电时触发关机脚本。威联通上这三层是打包好的开启UPS服务后upsd自动就跑起来了。Ubuntu上我们只需要装nut-client配置upsmon指向威联通的IP即可。理解这个分层后面看配置文件就不会晕。2.3 网络与认证的前置准备在动手之前先把两件事定下来。一是IP规划威联通固定内网IP比如192.168.1.10Ubuntu固定192.168.1.20。二是认证信息NUT用upsd.users文件管理账号客户端连接需要用户名和密码。我建议单独建一个只读账号给监控用再建一个带upsmon master权限的账号给需要执行关机的主机用。注意NUT默认的monuser/pass这种弱口令一定要改掉虽然是在内网但3493端口如果被扫描到别人可以查询你的UPS状态甚至触发关机。3. 威联通服务端的详细配置3.1 开启QTS自带的UPS服务登录威联通QTS进入“控制台”→“外接设备”→“UPS”。把USB线插好后这里应该能自动识别到UPS型号。如果识别不到先换一个USB口试试威联通对USB Hub比较敏感尽量直插机身接口。识别成功后勾选“启用UPS支持”模式选择“USB”。下面有个关键选项“当电量低于XX%时进入安全模式”我一般设成20%。再往下是“断电后XX分钟进入安全模式”这个看你的电池容量我设的是10分钟给足缓冲。这里有个坑威联通默认的“安全模式”是它自己的一套关机流程和NUT的upsmon是两套逻辑。我们要做的是让威联通继续用它的原生关机同时把UPS状态通过NUT共享出去。所以QTS界面里的设置照常配不用管NUT的事。3.2 确认upsd监听和防火墙放行QTS开启UPS服务后upsd默认监听0.0.0.0:3493。但威联通的防火墙可能会拦。进入“控制台”→“安全”→“防火墙”确认3493端口对内网网段放行。如果你用的是QuFirewall需要单独加一条规则允许192.168.1.0/24访问3493。验证方法很简单在Ubuntu上先装个客户端工具sudo apt install nut-client -y upsc -l 192.168.1.10如果返回UPS名称列表说明网络通了。如果报“Connection refused”八成是防火墙如果报“Access denied”就是认证没配。3.3 修改upsd.users添加客户端账号威联通的NUT配置文件路径和标准Linux不太一样通常在/etc/config/ups/或者/usr/local/ups/etc/下。通过SSH登录威联通QTS里开启SSH找一下find / -name upsd.users 2/dev/null找到后编辑添加一段[upsmon_client] password 你的强密码 upsmon secondarysecondary表示这是从监控端只能读状态和接收关机指令不能主动控制UPS。如果你希望Ubuntu也能触发UPS关机才需要master权限但一般没必要。改完重启服务/etc/init.d/upsd restart威联通不同固件版本重启命令可能不同也可以用killall upsd让它自动拉起。实操心得威联通每次固件升级后upsd.users有可能被重置。建议把配置内容记在备忘录里升级后检查一遍。4. Ubuntu客户端的完整落地4.1 安装nut-client并确认版本Ubuntu这边只需要客户端不需要驱动sudo apt update sudo apt install nut-client -y装完确认版本upsc -VNUT 2.7.x和2.8.x在配置语法上有细微差别主要是upsmon.conf里MONITOR行的字段。2.8版本对密码里的特殊字符处理更严格如果密码带#或空格建议用引号包起来。4.2 配置upsmon.conf指向威联通编辑/etc/nut/upsmon.conf核心就一行MONITORMONITOR ups192.168.1.10 1 upsmon_client 你的强密码 secondary字段含义依次是UPS名称服务端IP、电源数量一般填1、用户名、密码、角色。UPS名称就是前面upsc -l列出来的那个比如ups或apc。然后确认/etc/nut/nut.conf里模式是netclientMODEnetclient这两处配好启动服务sudo systemctl enable nut-monitor sudo systemctl start nut-monitor sudo systemctl status nut-monitor状态是active (running)就对了。4.3 验证数据读取和关机触发先手动查一次状态upsc ups192.168.1.10正常会输出一大堆键值对重点看这几个字段含义正常值参考ups.status当前状态OL市电正常battery.charge电池容量100ups.load负载百分比20-40battery.runtime预估续航秒数根据负载变化如果ups.status显示OB就是电池供电中OB LB就是电池低电量这时候upsmon会触发关机。测试关机逻辑有个安全办法在upsmon.conf里加一行SHUTDOWNCMD /sbin/shutdown -h 0然后临时把MINSUPPLIES设成2因为只有1个电源永远不满足这样不会真关机但日志里会记录“would shutdown”。测试完改回来。注意千万别在正常市电下直接把MINSUPPLIES设成1然后拔UPS插头来测试虽然理论上会触发关机但反复硬断电对硬盘不好。用日志模拟的方式最稳妥。5. 跨平台联动中的常见问题与排查5.1 连接被拒的三种典型情况实际配下来Ubuntu连不上威联通基本逃不出这三类网络层不通ping 192.168.1.10通但telnet 192.168.1.10 3493不通。查威联通防火墙和QuFirewall规则。认证失败日志/var/log/syslog里出现Login failed。检查upsd.users里的密码和upsmon.conf里的是否完全一致注意大小写和特殊字符。UPS名称不对MONITOR行里的UPS名必须和upsc -l输出完全一致威联通有时候显示的是ups有时候是apc别想当然。5.2 关机不同步的排查思路有时候威联通已经进安全模式了Ubuntu还傻站着。原因通常是upsmon的MINSUPPLIES和POWERDOWNFLAG配置不对。MINSUPPLIES表示“至少需要几个电源在线才不关机”单电源设备填1。如果填了2那永远触发不了关机。另一个原因是HOSTSYNC超时。upsmon在关机前会等待所有从监控端确认如果Ubuntu那边网络延迟大或者upsmon没跑威联通会等默认的15秒然后强制继续。可以在upsmon.conf里调HOSTSYNC 30给足时间。5.3 威联通固件升级后的配置漂移这是最烦人的问题。威联通升级固件后upsd.users可能被覆盖upsd可能没自动启动甚至UPS识别都会丢。我的做法是升级后固定检查三件事QTS里UPS是否还识别、upsc -l是否还能列出、Ubuntu的nut-monitor日志有没有报错。花五分钟检查省得下次真断电时才发现链路断了。6. 进阶玩法与长期维护建议6.1 让更多设备接入同一套NUTNUT的好处是可扩展。除了Ubuntu你还可以让群晖、树莓派、甚至PVE宿主机接入。群晖在“控制面板”→“硬件和电源”→“UPS”里选“网络UPS”填威联通IP即可。PVE的话装nut-client配置方式和Ubuntu一样。这样整个机柜里所有设备共享一个UPS状态断电时统一优雅关机。6.2 用upsc做简单的状态监控面板如果想直观看到UPS状态可以写个几行的脚本把upsc输出推到自己的监控系统里。比如配合Telegraf采集或者简单点用cron每分钟写进日志*/1 * * * * upsc ups192.168.1.10 /var/log/ups.log时间长了能看出电池老化趋势比如battery.runtime是不是在慢慢变短提前判断要不要换电池。6.3 电池维护和定期测试UPS电池一般两到三年开始衰减。NUT能读到battery.charge和battery.runtime但读不到电池健康度。建议每半年做一次放电测试拔掉市电让UPS带载运行几分钟观察ups.status变化和实际续航。如果续航只有标称的一半就该考虑换电池了。实操心得APC原装电池贵但第三方电池质量参差不齐。我换过一次第三方结果battery.runtime读数飘得厉害后来还是换回原厂。这东西省不得。6.4 日志轮转和告警nut-monitor的日志默认进syslog时间长了会占空间。可以在/etc/rsyslog.d/下加一条规则单独存UPS日志并配置logrotate。告警方面NUT本身支持NOTIFYCMD可以挂一个脚本断电时发邮件或推送到手机。我用的是一个简单的curl脚本触发ONBATT事件时往自建的通知服务发一条消息实测比等邮件快得多。整套方案跑了大半年经历过两次小区跳闸威联通和Ubuntu都在电池耗尽前完成了关机硬盘SMART没有再出现异常。NUT这东西配置起来不算复杂但细节多尤其是跨平台时认证和防火墙这两块最容易卡住。把服务端和客户端的角色分清楚配置文件逐行核对基本一次就能通。后面再接入新设备也就是复制一份upsmon.conf的事。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑