В XenServer 6.2 пробросить USB порт в виртуальную машину нельзя. Можно пробросить целиком контроллер USB, а вместе с ним в "виртуалку" попадут и все порты связанные с этим контроллером. По такому же принципу можно пробросить практически любое устройство из хостовой системы. Как правило, на сервере от 2 USB контроллеров. Узнать это можно командой хостовой системе:
[root@xen ~]# lspci | grep USB
00:1a.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1d.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
Нас интересуют идентификаторы контроллеров 00:1a.0 и 00:1d.0 именно их мы и будем использовать в дальнейшем. Наверняка, угадать к какому контроллеру подключено устройство будет сложно. Для этого есть команда lsusb из пакета usbutils, но в XenServer этот пакет не установлен. Установить можно на лету командой:
yum install --enablerepo=base usbutils
Также можно попытаться использовать dmesg. Или данные из файла /proc/bus/usb/devices
Просмотреть можно при помощи команды cat
Например информация о аппаратном USB ключе защиты Лига:Закон в этом файле выглядит таким образом:
T: Bus=02 Lev=02 Prnt=02 Port=04 Cnt=02 Dev#= 4 Spd=1.5 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0a89 ProdID=0003 Rev= 2.00
S: Manufacturer=Aktiv Co.
S: Product=Guardant Stealth/Net II
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 56mA
I:* If#= 0 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
Видно, что используется Bus=02, значит контроллер будет 00:1d.0
Далее необходимо узнать 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
[root@xen ~]# lspci | grep USB
00:1a.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
00:1d.0 USB controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 05)
Нас интересуют идентификаторы контроллеров 00:1a.0 и 00:1d.0 именно их мы и будем использовать в дальнейшем. Наверняка, угадать к какому контроллеру подключено устройство будет сложно. Для этого есть команда lsusb из пакета usbutils, но в XenServer этот пакет не установлен. Установить можно на лету командой:
yum install --enablerepo=base usbutils
Также можно попытаться использовать dmesg. Или данные из файла /proc/bus/usb/devices
Просмотреть можно при помощи команды cat
Например информация о аппаратном USB ключе защиты Лига:Закон в этом файле выглядит таким образом:
T: Bus=02 Lev=02 Prnt=02 Port=04 Cnt=02 Dev#= 4 Spd=1.5 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0a89 ProdID=0003 Rev= 2.00
S: Manufacturer=Aktiv Co.
S: Product=Guardant Stealth/Net II
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr= 56mA
I:* If#= 0 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
Видно, что используется Bus=02, значит контроллер будет 00:1d.0
Далее необходимо узнать 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
17 коментарів:
Огромное тебе спасибо за хороший мануал, все три статьи очень помогли. Добавлю от себя. Что бы с таким пробросом заработал HASP для 1С нужно ключ подключать не напрямую, а через внешний USB HUB. Проверенно на Citrix Xen 6.2
А почему не получается напрямую?
Спасибо! очень четкие, краткие но точно в цель статьи, без лишнего.
http://www.incentivespro.com/usb-server.html
Как вариант, удобно если используется Xen Pool, при миграции ВМ между хостами, USB устройство будет доступно.
Но для этого желательно выделить отдельную физическую машину. Если есть примеры реализации данного ПО на Xen хосте, интересно посмотреть как настроить.
А у меня, при добавлении контроллера вышеописанным методом, ВМ не стартует.
Error: Starting VM 'Test1' - Internal error: xenopsd internal error: Xenctrl.Error("38: Function not implemented")
А в BIOS AMD-V/Intel-VT включено?
Да, Intel Virtualization Technology - включено.
Без добавления USB-PCI контроллера ВМ работает. Добавляю при выключенной или при работающей ВМ, загрузка ВМ останавливается на 5-й секунде.
А что за ВМ? Какая ОС?
Три тестовые ВМ - Win2003, Win2008, Win2012. Все ведут себя одинаково.
Переставил XenServer, версию 5.6 FP1. Делаю аналогичный проброс USB-контроллера, ВМ запускается, но нового контроллера не появляется, USB-ключи не видны.
А система ВМ выдает информацию нахождени нового оборудования? XenTools установлены?
Помимо Intel-VT должно быть включено VT-D (без включенного IOMMU не работает проброс устройств).
other-config:pci=0/000
как я понимаю, опечатка, должно быть
0/0000
Нет, Именно с такими параметрами и работает:
other-config (MRW): vgpu_pci: ; pci: 0/000:00:1d.0;
хороший мануал, одного не понял. как сопоставить вывод lsusb, где видно, на какие шины какое устройство подключено, с выводом lspci, где видны идентификаторы контроллеров? это когда 2 строчки все просто, а у меня тут 6 вариантов, никак не могу разобраться
с несколькими контроллерами разобрался. в /proc/bus/usb/devices смотрим, на каких шинах висит 2 устройства. одно из них будет сам контроллер (например, bus=02, dev#=1), второе - подключенный девайс (bus=02, dev#=3). где dev#=1 смотрим SerialNumber. именно его и пишем в конфиг ВМ после нуля со слешем: 0/0000:00:1d.7. и если у кого-то работает с 0/000, значит тут индивидуально.
Странно, конечно, но у меня не заработало.
XenServer 6.2, VM WinServer 2008 R2.
При загрузке в логах выдаёт ошибку:
Nov 14, 2013 6:57:46 PM Error: Starting VM 'TS' - Internal error: xenopsd internal error: Xenctrl.Error("12: Cannot allocate memory")
Выключаешь проброс - всё стартует. Пробовал и с 0/000, и с 0/0000.
Опыта понять, что не так, не хватает, к сожалению.
Дописати коментар