фокальная регрессия: сбой USB-подключения к APC SmartUPS после перезагрузки

Я управляю примерно девяноста серверами Dell, распределенными по всему миру, которые в настоящее время находятся в процессе обновления с Ubuntu 16.04LTS xenial до Ubuntu 20.04LTS focus. Блок питания каждого сервера защищен ИБП APC SmartUPS, подключенным через USB, и контролируется гайкой для корректного отключения в случае сбоя питания. Это работает довольно хорошо на серверах, на которых все еще работает xenial.

На тех, кто работает с фокусом, часто возникает проблема с USB-подключением к ИБП, которое не появляется после перезагрузки. Конкретно:

  • При запуске системы ядро ​​не обнаруживает ИБП и вместо этого пишет в /var/log/syslog:

            kernel: [    2.239216] usb usb1-port4: couldn't allocate usb_device
    
  • периодически жалуется в syslog:

            upsmon[1105]: Poll UPS [ups@localhost] failed - Driver not connected
    
  • SmartUPS не отображается в выводе:

            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

помогает каждый раз. ИБП обнаружен, о чем свидетельствует сообщение /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 здесь:

[регрессия] USB-устройство не обнаружено во время загрузки

и на kernel.org Bugzilla здесь:

Ошибка 214021 — USB-устройства не обнаруживаются во время загрузки.

Таким образом, решением было бы подождать, пока не будет доступно исправленное ядро.

Примечание. Я попытался добавить запись в crontab для запуска последовательности команд сброса шины USB после каждой перезагрузки в качестве временной меры, но это не сработало, потому что @rebootпроисходит слишком поздно в процессе запуска, когда nutДрайвер уже запущен, поэтому я отказался от этой идеи.

Другие вопросы по тегам