收起左侧

飞牛 NAS 更新后 UPS 无法识别的解决记录:NUT 权限与配置异常

2
回复
47
查看
[ 复制链接 ]

4

主题

14

回帖

0

牛值

江湖小虾

飞牛 NAS 更新后 UPS 无法识别的解决记录:NUT 权限与配置异常

一、问题现象

我的飞牛 NAS 之前可以正常识别 UPS,后来系统更新之后,后台 UPS 页面突然识别不到了。

期间出现过比较迷惑的情况:

  • 刚开始重启 NAS 后偶尔能恢复;
  • 用一段时间后又识别不到;
  • 后面重新拔插 UPS USB 线也不行;
  • 再次重启 NAS 也不恢复。

我的 UPS 是 APC,NUT 配置里显示类似:

vendorid = "051D"
productid = "0002"
product = "Back-UPS BK650M2-CH"

二、排查过程

SSH 登录飞牛后,先查看 NUT 服务状态:

systemctl list-units | grep -i nut

当时看到的问题是:

nut-driver@1025241.service loaded activating start
nut-monitor.service        loaded failed failed
nut-server.service         loaded active running

说明不是整个 NUT 都没了,而是 UPS 驱动服务一直启动失败,监控服务也跟着失败。

继续查看日志:

sudo journalctl -u nut-driver@1025241.service -n 80 --no-pager

关键报错是:

libusb1: Could not open any HID devices: insufficient permissions on everything
No matching HID UPS found
Driver failed to start

同时 nut-monitor 也报错:

Fatal error: insufficient power configured!
Sum of power values: 0
Minimum value (MINSUPPLIES): 1

这里基本可以判断:

  1. UPS 本身不一定坏;
  2. 飞牛系统还能加载 NUT;
  3. 主要问题是 NUT 的 usbhid-ups 驱动没有权限访问 USB HID 设备;
  4. 同时 /etc/nut/ups.conf 里自动生成的配置有异常。

三、发现的配置异常

查看配置:

sudo cat /etc/nut/ups.conf

里面有一行很奇怪:

serial = """

这个明显不正常,日志里也一直出现:

addchar: discarding invalid character (0x0a)!

所以我怀疑是更新后,飞牛/NUT 自动生成的 UPS 配置写坏了。


四、解决方法

1. 停止 NUT 相关服务

sudo systemctl stop nut-monitor.service
sudo systemctl stop nut-server.service
sudo systemctl stop 'nut-driver@1025241.service'

注意:你自己的服务名可能不是 1025241,可以通过下面命令查看:

systemctl list-units | grep -i nut

2. 备份原配置

sudo cp /etc/nut/ups.conf /etc/nut/ups.conf.bak.$(date +%F_%H%M%S)

3. 重写 /etc/nut/ups.conf

我的 UPS 是 APC,vendorid = 051dproductid = 0002

执行:

sudo tee /etc/nut/ups.conf > /dev/null <<'EOF'
maxretry = 3

[1025241]
driver = usbhid-ups
port = auto
vendorid = 051d
productid = 0002
desc = "APC Back-UPS BK650M2-CH"
override.battery.charge.low = 15
EOF

这里重点是:
不要写异常的 serial = """,也尽量不要把 bus = "002" 写死。


4. 添加 USB 权限规则

创建 udev 规则:

sudo tee /etc/udev/rules.d/99-nut-apc-ups.rules > /dev/null <<'EOF'
SUBSYSTEM=="usb", ATTR{idVendor}=="051d", ATTR{idProduct}=="0002", MODE="0666"
SUBSYSTEM=="usb_device", ATTR{idVendor}=="051d", ATTR{idProduct}=="0002", MODE="0666"
SUBSYSTEM=="hidraw", MODE="0666"
EOF

然后重载规则:

sudo udevadm control --reload-rules
sudo udevadm trigger

拔掉 UPS 的 USB 线,等 10 秒,再插上。


5. 清理失败状态并重启 NUT

sudo systemctl reset-failed nut-monitor.service
sudo systemctl reset-failed 'nut-driver@1025241.service'

然后重启服务:

sudo systemctl restart nut-driver-enumerator.service
sudo systemctl restart nut-server.service
sudo systemctl restart nut-monitor.service

五、验证是否恢复

查看服务状态:

systemctl list-units | grep -i nut

我这边恢复后,服务变成了:

nut-driver@2323021.service loaded active running
nut-server.service         loaded active running
nut-monitor.service        loaded active running

注意:修复后 UPS 名称可能会变化。
比如我一开始是:

1025241

修复后变成了:

2323021

所以不要继续死查旧名字。

先列出当前 UPS 名称:

upsc -l

然后按实际名称查询:

upsc 2323021@localhost

如果能看到类似下面字段,说明恢复成功:

battery.charge
battery.runtime
input.voltage
ups.status

六、防止再次掉线

如果遇到 UPS 识别一段时间后又消失,可以临时关闭 USB 自动省电:

sudo sh -c 'for i in /sys/bus/usb/devices/*/power/control; do echo on > "$i" 2>/dev/null; done'

这个命令执行后,建议再观察一段时间。


七、总结

这次问题不是 UPS 坏了,也不是 USB 线一定有问题。

我的情况主要是:

  1. 系统更新后 NUT 的 UPS 配置异常;
  2. /etc/nut/ups.conf 里出现了异常的 serial = """
  3. usbhid-ups 驱动没有权限访问 HID USB 设备;
  4. 导致 nut-driver 一直启动失败;
  5. 最后 nut-monitor 也跟着失败,飞牛后台就显示识别不到 UPS。

最终通过:

  • 修正 /etc/nut/ups.conf
  • 添加 udev USB 权限规则
  • 重启 NUT 相关服务

成功恢复 UPS 识别。

希望能帮到遇到同样问题的朋友。

收藏
送赞
分享

0

主题

1

回帖

0

牛值

江湖小虾

升级系统后经常出现失去连接,换了新的ups,也是同样的问题;有时候还识别不了ups;一个山特一个施耐德;下次更新会修复吗?

我是自己修复的,官方不知道会不会解决。。。好多人有这个问题。  详情 回复
昨天 09:53

4

主题

14

回帖

0

牛值

江湖小虾

昨天 09:53 楼主 显示全部楼层
夜灵封 发表于 2026-6-23 06:17
升级系统后经常出现失去连接,换了新的ups,也是同样的问题;有时候还识别不了ups;一个山特一个施耐德;下 ...

我是自己修复的,官方不知道会不会解决。。。好多人有这个问题。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则