我管理着分布在全球的大约 90 台戴尔服务器,目前正在从 Ubuntu 16.04LTS xenial 升级到 Ubuntu 20.04LTS focal。每台服务器的电源都由通过 USB 连接的 APC SmartUPS 保护,并由 nut 监控,以便在断电时干净地关闭。这在仍在运行 xenial 的服务器上效果很好。
对于那些运行 focus 的设备,经常会出现一个问题,即重启后无法通过 USB 连接 UPS。具体来说:
在系统启动期间,内核未检测到 UPS,而是在 /var/log/syslog 中发出抱怨:
kernel: [ 2.239216] usb usb1-port4: couldn't allocate usb_device
upsmon
定期在系统日志中抱怨:upsmon[1105]: Poll UPS [ups@localhost] failed - Driver not connected
SmartUPS 没有出现在输出中
lsusb
:a-schmidt@somewhere:~$ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 1604:10c0 Tascam Bus 001 Device 003: ID 1604:10c0 Tascam Bus 001 Device 002: ID 1604:10c0 Tascam Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
手动运行
sudo upsdrvctl start
报找不到设备:a-schmidt@somewhere:~$ sudo upsdrvctl start Network UPS Tools - UPS driver controller 2.7.4 Network UPS Tools - Generic HID driver 0.41 (2.7.4) USB communication driver 0.33 No matching HID UPS found Driver failed to start (exit status=1)
通过命令序列执行 USB 总线重置:
echo '0000:00:14.0' | sudo tee /sys/bus/pci/drivers/xhci_hcd/unbind
echo '0000:00:14.0' | sudo tee /sys/bus/pci/drivers/xhci_hcd/bind
每次都有帮助。UPS 被检测到,正如 /var/log/syslog 消息所证实的那样:
kernel: [20025.662161] usb 1-4: new full-speed USB device number 2 using xhci_hcd
kernel: [20025.838902] usb 1-4: New USB device found, idVendor=051d, idProduct=0003, bcdDevice= 0.01
kernel: [20025.838907] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
kernel: [20025.838910] usb 1-4: Product: Smart-UPS_1500 FW:UPS 04.1 / ID=1018
kernel: [20025.838913] usb 1-4: Manufacturer: American Power Conversion
它出现在 中lsusb
,并upsdrvctl start
连接成功:
a-schmidt@somewhere:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 001 Device 005: ID 1604:10c0 Tascam
Bus 001 Device 004: ID 1604:10c0 Tascam
Bus 001 Device 003: ID 1604:10c0 Tascam
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
a-schmidt@somewhere:~$ sudo upsdrvctl start
Network UPS Tools - UPS driver controller 2.7.4
Network UPS Tools - Generic HID driver 0.41 (2.7.4)
USB communication driver 0.33
Using subdriver: APC HID 0.96
upsmon
停止抱怨,一切又恢复正常。
造成这种现象的原因是什么?我该如何解决?
答案1
这似乎是由已向 Launchpad 报告的内核错误引起的:
以及 kernel.org Bugzilla 此处:
因此解决方案是等到固定内核可用。
注意:我尝试添加一个@reboot
crontab 条目,以便在每次重启后运行 USB 总线重置命令序列作为权宜之计,但这没有奏效,因为@reboot
在启动过程中发生得太晚了,nut
驱动程序已经在运行,所以我放弃了这个想法。