База знаний VMmanager
Режим фокусировки

ВМ с подключёнными USB-устройствами не загружается после перезагрузки гипервизора

Проблема

Виртуальные машины (ВМ) с подключёнными USB-устройствами не запускаются автоматически после перезагрузки гипервизора. Запуск возможен только после физического переподключения устройств в USB-порты сервера.

Причина

В конфигурации используется жёсткая привязка USB-устройства к конкретному device ID. Например, bus='1' device='6'. После перезагрузки или переподключения устройство получает новый идентификатор. Libvirt не находит устройство по старому ID и блокирует запуск ВМ.

Диагностика

Чтобы подтвердить причину:

  1. Подключитесь к целевому узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
  2. Откройте XML-файл конфигурации USB-устройства, который вы создали при подключении. Например, /opt/USB/usb_device.xml:
    cat /opt/USB/usb_device.xml
    Пример вывода
    <source> <address bus='1' device='6'/> </source>
    В примере устройство жёстко привязано к конкретному device ID. Это означает, что libvirt будет искать USB-устройство именно с этим идентификатором.
  3. Перезагрузите узел кластера или переподключите USB-устройство.
  4. Определите актуальные параметры 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. Эти параметры остаются неизменными после перезагрузки:

  1. Подключитесь к целевому узлу кластера по SSH. Подробнее о подключении по SSH см. в статье Настройка рабочего места.
  2. Получите vendor ID и product ID устройства:
    lsusb
    Пример вывода
    Bus 001 Device 003: ID 1234:5678 Some_USB_Device

    Пояснения к команде:

    • 1234 — Vendor ID;
    • 5678 — Product ID.
  3. Откройте XML-файл конфигурации USB-устройства в режиме редактирования. Например,  /opt/USB/usb_device.xml.
  4. Замените блок
    <source>
        <address bus='1' device='6'/>
    </source>

    на

    <source>
        <vendor id='0x1234'/>
        <product id='0x5678'/>
    </source>
  5. Определите внутреннее имя ВМ:
    sudo virsh list --all

    В выводе найдите строку с нужной ВМ. Внутреннее имя обычно имеет формат ID VM_имя_ВМ.

  6. Отключите устройство со старой конфигурацией:
    virsh detach-device <vm_name> /opt/USB/usb_device.xml

    Пояснения к команде:

    • <vm_name> — внутреннее имя ВМ.
  7. Подключите устройство с новой конфигурацией:
    virsh attach-device <vm_name> /opt/USB/usb_device.xml --config --persistent

    Пояснения к команде:

    • <vm_name> — внутреннее имя ВМ.
  8. Запустите ВМ.
Может быть полезно