前言
最近给 PVE 加了一个 UPS(由于是 APC 家的 BK650M2-CH,所以使用 APCUPSD 服务,详见 使用 APCUPSD 让 PVE 接入 UPS 获得断电保护 - 光昭)但是后来发现 APCUPSD 服务总是会频繁报告 UPS 为 NOBATT 状态。后来在网上看见一篇文章(详见 PVE 上使用 Nut 代替 Apcupsd (BK650M2-CH: ONBATT) - 企鹅大大的博客,Reference[1]),也是 BK650M2-CH 的 NOBATT 问题,文中提到这是 APCUPSD 服务引起的,遂尝试换 NUT 服务,顺手水记录一篇文章。
相关概念
老传统。
NUT 简介
NUT(Network UPS Tools)是一个开源的跨平台软件套件,用于管理不同品牌和型号的不间断电源(UPS)。它通过监控UPS状态,在断电时安全关闭连接的设备(如服务器、网络设备等),防止数据丢失或硬件损坏。
NUT 架构
NUT 分为三层:
- nut-driver:驱动层, 用于与 UPS 通信并获取 UPS 信息。
- nut-server:服务层,用于对外提供 UPS 信息。
- nut-monitor:监控层,可实现监控 UPS 电量并实现自动关机。
配置教程
安装 NUT
apt update -y && apt install nut
扫描 NUT 设备
nut-scanner
输出类似如下内容:
[nutdev1]
driver = "usbhid-ups"
port = "auto"
vendorid = "****"
productid = "****"
product = "Back-UPS BK650M2_CH"
......
配置 NUT
NUT 需要设置一个 UPS 名与密码,本文中以
- UPS 名:myups
- ups 用户:upsuser
编辑 ups.conf
编辑 ups.conf 文件:
nano /etc/nut/ups.conf
修改 upsname 并注释 maxretry:
#maxretry = 3
[myups]
driver = usbhid-ups
port = auto
desc = "My UPS"

启动及自启动 nut-driver
/sbin/upsdrvctl start
这里我遇到过 libusb1: Could not open any HID devices...Driver failed to start (exit status=1) 之类的报错,兜兜转转一圈后在 Github Issues 中找到了与我一样的问题,部分用户给出的解决办法是“full reboot”,我尝试重启 PVE 节点以及我的 UPS 后,一切正常了。
真玄学。
配置用户文件
nano /etc/nut/upsd.users
最下方加入如下内容:
[upsuser]
password = PASSWD
upsmon primary
actions = SET
instcmds = ALL
# 将 PASSWD 替换成你自己想要的密码
配置运行模式
nano /etc/nut/nut.conf
将 Mode 修改为 standalone(此外 NUT 还有 netserver 运行模式,可以了解一下)
MODE=standalone
启动及自启动 nut-server
systemctl start nut-server.service && systemctl enable nut-server.service
查看配置
# upsc upsname
# upsname 即你设置的 UPS 名,本文中为 myups
# 所以最终需要执行
upsc myups
输出如下:

设置自动关机
即配置 nut-monitor。
编辑 upsmon.conf
nano /etc/nut/upsmon.conf
在 MONITOR 块添加,格式如下或见文件内注释:
MONITOR myups@localhost 1 upsuser PASSWD primary
# PASSWD 即为你前面设置的密码
部分配置项:
- DEADTIME:UPS 掉线阈值,默认为 15s
- FINALDELAY:等待多久后,shutdown 宿主机
启动及自启动 nut-monitor
systemctl start nut-monitor.service && systemctl enable nut-monitor.service
启动 NUT
systemctl start nut.target && systemctl enable nut.target && systemctl enable nut-driver.target && systemctl start nut-driver.target
电力故障模拟测试
拔掉 UPS 连接市电的电源,观察其是否会按预期自动关机。
Reference
[1] PVE 上使用 Nut 代替 Apcupsd (BK650M2-CH: ONBATT) - 企鹅大大的博客
[2] Network UPS Tools - ArchWiki
版权申明
- 本文作者:光昭
- 本文链接:https://www.pyrzo.com/posts/nut-configuration
- 封面出处:画师 コーラ (id=37855635)
- 版权声明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。
- 部分图片、文字搜集于网络,若构成侵权请联系我,会尽快删除。
Comments NOTHING