Проблема
Виртуальные машины (ВМ) с подключёнными USB-устройствами не запускаются автоматически после перезагрузки гипервизора. Запуск возможен только после физического переподключения устройств в USB-порты сервера.
Причина
В конфигурации используется жёсткая привязка USB-устройства к конкретному device ID. Например, bus='1' device='6'. После перезагрузки или переподключения устройство получает новый идентификатор. Libvirt не находит устройство по старому ID и блокирует запуск ВМ.
Диагностика
Чтобы подтвердить причину:
- Подключитесь к целевому узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Откройте XML-файл конфигурации USB-устройства, который вы создали при подключении. Например, /opt/USB/usb_device.xml:
cat /opt/USB/usb_device.xmlВ примере устройство жёстко привязано к конкретномуПример вывода<source> <address bus='1' device='6'/> </source>device ID. Это означает, что libvirt будет искать USB-устройство именно с этим идентификатором. - Перезагрузите узел кластера или переподключите USB-устройство.
- Определите актуальные параметры USB-устройства:
lsusbПример выводаBus 001 Device 003: ID 1234:5678 Some_USB_DeviceЕсли идентификаторы
device IDне совпадают, это подтверждает причину. В примере после перезагрузки устройство получило новыйdevice ID(device='3'), тогда как в конфигурации указанdevice='6'.
Решение
Чтобы решить проблему, замените привязку по device ID на привязку по vendor ID и product ID. Эти параметры остаются неизменными после перезагрузки:
- Подключитесь к целевому узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
- Получите
vendor IDиproduct IDустройства:
lsusbПример выводаBus 001 Device 003: ID 1234:5678 Some_USB_DeviceПояснения к команде:
1234— Vendor ID;5678— Product ID.
- Откройте XML-файл конфигурации USB-устройства в режиме редактирования. Например, /opt/USB/usb_device.xml.
- Замените блок
<source> <address bus='1' device='6'/> </source>на
<source> <vendor id='0x1234'/> <product id='0x5678'/> </source> - Определите внутреннее имя ВМ:
sudo virsh list --allВ выводе найдите строку с нужной ВМ. Внутреннее имя обычно имеет формат
ID VM_имя_ВМ. - Отключите устройство со старой конфигурацией:
virsh detach-device <vm_name> /opt/USB/usb_device.xmlПояснения к команде:
<vm_name>— внутреннее имя ВМ.
- Подключите устройство с новой конфигурацией:
virsh attach-device <vm_name> /opt/USB/usb_device.xml --config --persistentПояснения к команде:
<vm_name>— внутреннее имя ВМ.
- Запустите ВМ.
Связанные статьи: