Проброс USB из XenServer 6.x в виртуальную машину
В XenServer 6.2 пробросить USB порт в виртуальную машину нельзя.
Можно пробросить целиком контроллер USB, а вместе с ним в “виртуалку” попадут и все порты связанные с этим контроллером. По такому же принципу можно пробросить практически любое устройство из хостовой системы.
Как правило, на сервере от 2 USB контроллеров. Узнать это можно командой на хосте Xenserver:
[root@xen ~]# lspci | grep USB 00:1a.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (rev 05) 00:1d.0 USB controller: Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (rev 05)
Нас интересуют идентификаторы контроллеров 00:1a.0 и 00:1d.0 именно их мы и будем использовать в дальнейшем. Наверняка, угадать к какому контроллеру подключено устройство будет сложно. Для этого есть команда lsusb из пакета usbutils, но в XenServer этот пакет не установлен. Можно попытаться использовать dmesg. Или данные из файла /proc/bus/usb/devices:
cat /proc/bus/usb/devices
Например информация о флешке Transcend в этом файле выглядит таким образом:
T: Bus=02 Lev=02 Prnt=02 Port=01 Cnt=01 Dev#= 11 Spd=480 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=8564 ProdID=1000 Rev=11.00 S: Manufacturer=JetFlash S: Product=Mass Storage Device S: SerialNumber=643SX46T1R2IPSGQ C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA I:* If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=usb-storage E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=31875us
Видно, что используется Bus=02, значит контроллер будет 00:1d.0
Это отражено в описании самого контроллера:
T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 2 B: Alloc= 0/800 us ( 0%), #Int= 1, #Iso= 0 D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0002 Rev= 2.06 S: Manufacturer=Linux 2.6.32.43-0.4.1.xs1.8.0.835.170778xen ehci_hcd S: Product=EHCI Host Controller S: SerialNumber=0000:00:1d.0 <------------------------------------<------------------------<--------- C:* #Ifs= 1 Cfg#= 1 Atr=e0 MxPwr= 0mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub E: Ad=81(I) Atr=03(Int.) MxPS= 4 Ivl=256ms
Далее необходимо узнать UUID ВМ, в которую будет проводиться проброс.
Например так:
[root@xen ~]# xe vm-list name-label=test uuid ( RO) : cd9c4655-dc8a-c086-103c-c1716293449d name-label ( RW): test power-state ( RO): running
Зная идентификатор контроллера в консоли XenServer нужно выполнить команду:
[root@xen ~]# xe vm-param-set other-config:pci=0/000:00:1d.0 uuid=cd9c4655-dc8a-c086-103c-c1716293449d
Где 0/000: - обязательная часть, далее идет сам идентификатор контроллера.
Проверить правильность настроек можно командой:
xe vm-param-list uuid=cd9c4655-dc8a-c086-103c-c1716293449d | grep other-config
Должно присутствовать: pci: 0/000:00:1d.0
После перезапуска ВМ, в диспетчере задач, в случае если установлен Windows, появится хостовый USB контроллер с подключенным к нему устройством.
Для того чтобы отключить проброс контроллера, в консоли XenServer необходимо выполнить команду:
xe vm-param-remove param-name=other-config param-key=pci uuid=cd9c4655-dc8a-c086-103c-c1716293449d
Discussion
что делать в таком случае
00:12.0 USB controller: Advanced Micro Devices [AMD] nee ATI SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.1 USB controller: Advanced Micro Devices [AMD] nee ATI SB7x0 USB OHCI1 Controller
00:12.2 USB controller: Advanced Micro Devices [AMD] nee ATI SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB controller: Advanced Micro Devices [AMD] nee ATI SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.1 USB controller: Advanced Micro Devices [AMD] nee ATI SB7x0 USB OHCI1 Controller
00:13.2 USB controller: Advanced Micro Devices [AMD] nee ATI SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.5 USB controller: Advanced Micro Devices [AMD] nee ATI SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
T: Bus=03 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0
D: Ver= 1.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0001 ProdID=0000 Rev= 1.00
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms
Большое спасибо, Балтика 9 для если бы я мог… привет из Мексики.