На данный момент установлен Proxmox 3.4, но судя по официальной документации, данные инструкции верны начиная с 2,х версий.
Вроде бы, зачем еще что-то писать, когда есть официальная инструкция? Однако, здесь есть кое-что, чего там нет. Есть два вариант передачи USB-устройства в гостевую систему:
- передать «гостю» определенное устройство;
- передать USB-порт, к которому это устройство подключено.
Проброс USB-устройств
Если имеется USB ключ защиты, или внешний накопитель, то удобней передавать в гостевую систему непосредственно само устройство, вне зависимости от того, к какому USB-порту это устройство подключено физически. Ведь при обслуживании, мы можем в следующий раз подключить в другой разъем.
# lsusb Bus 002 Device 002: ID 8087:8000 Intel Corp. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:8008 Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 004: ID 051d:0002 American Power Conversion Uninterruptible Power Supply Bus 003 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply Bus 003 Device 002: ID 046d:c00c Logitech, Inc. Optical Wheel Mouse Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Находим нужное нам устройство и берем его ID, который и будем использовать.
У меня стояла задача пробросить UPS-ы.
(Ситуация, на самом деле не типовая, скорее из серии как быть не должно: На сервер и сетевое оборудование поставлены 2 самый простых безперебойника для рабочих станций. UPS-ы оказались нежными и начинали голосить по поводу и без. Чтоб быстро подрезать им голос и пока не разбираться с управлением ИБП из Debian и было решено подцепить два безперебойника к Windows-гостям.)
На этом этапе я обнаружил, что оба нужных мне устройства имеют одинаковые ID… Но пробуем.
Пробрасываемые устройства прописываются в конфигурационном файле соответствующей виртуальной машины.
# nano /etc/pve/qemu-server/101.conf usb0: host=051d:0002
Перезагрузил. Устройство подцепилось, вроде бы все хорошо. Но тут вспоминаем, что второе устройство с таким же идентификатором. Как их различать? И действительно, опыт показал, что если в две виртуальные машины прописать один идентификатор, то они при включении будут отбирать друг у друга одно и то же устройство. Не смотря на то, что в host-системе есть несколько USB-устройств с таким идентификатором.
Вот тут то мы и вспоминаем, что есть другой способ проброса.
Проброс USB-портов
Необходимо определить к какому именно порту подключено нужное нам устройство.
Первый способ:
# lsusb -t /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 480M |__ Port 4: Dev 2, If 0, Class=HID, Driver=usbhid, 1.5M |__ Port 7: Dev 3, If 0, Class=HID, Driver=usbfs, 12M |__ Port 8: Dev 4, If 0, Class=HID, Driver=usbfs, 12M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/8p, 480M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/3p, 480M |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
Как позже выяснилось, нужные мне устройства сидят на шине 3, порты 7 и 8. Но пока нам это не очевидно и вот вариант второй:
qm monitor <VM_ID> qm> info usbhost Bus 3, Addr 4, Port 8, Speed 12 Mb/s Class 00: USB device 051d:0002, Back-UPS XS 650CI FW:892.R2.I USB FW:R2 Bus 3, Addr 3, Port 7, Speed 12 Mb/s Class 00: USB device 051d:0002, Back-UPS XS 650CI FW:892.R2.I USB FW:R2 Bus 3, Addr 2, Port 4, Speed 1.5 Mb/s Class 00: USB device 046d:c00c, USB Optical Mouse
Тут мы наглядно видим кто есть кто. И теперь смело:
# nano /etc/pve/qemu-server/101.conf usb0: host=3-7
Для полноты картины, дополню инструкцию примером из официальной документации.
Возможен такой вариант:
qm monitor <VM_ID> qm> info usbhost <span style="color: #ff0000;">Bus 3</span>, Addr 2, <span style="color: #ff0000;">Port 1.2</span>, Speed 1.5 Mb/s Vendor Specific: USB device 0529:0001, HASP 2.17
тогда в файле конфигурации ВМ надо писать следующим образом:
usb0: host=3-1.2
Теперь, зная все варианты, можем использовать тот, который лучше под текущую ситуацию.