На хосте VMWare ESXi вы можете пробросить подключенное к хосту локальное USB устройство/флешку/диск внутрь виртуальной машины. Эта технология называется USB Passthrough и доступна, начиная с ESXi 4.1.
Предположим, наша задача – пробросить в виртуальную машину локально подключенный к хосту ESXi 6.7 внешний USB 3.0 диск. Доступ к диску нужен для быстрого копирования данных напрямую из ВМ на отдельный USB диск.
Особенности работы режима USB Passthrough в VMWare
Как вы уже поняли, режим Passthrough позволяет пробросить физическое устройство, подключенное к ESXi хосту, напрямую в гостевую ОС виртуальной машины. В режиме Passthrough (passing the device through) вы можете предоставить виртуальной машине прямой доступ к USB флешке/диску, модему, или целиком PCI/USB контроллеру.
Для проброса USB устройств в ESXi нужны несколько основных компонентов:
- Arbitrator – отдельный сервис на сервере ESXi, который выполняет сканирование подключенных физических USB устройств, отвечает за маршрутизацию трафика USB устройства между хостом и ВМ, управляет блокировкой доступа к устройству (только одна ВМ может использовать подключенное USB устройство). USB arbitrator одновременно может отслеживать до 15 USB контроллеров.
- USB контроллеры – USB контроллер должен быть установлен как на физическом хосте, так и на виртуальной машине.
Чтобы установить USB контроллер для ВМ на VMWare ESXi, откройте ее настройки и добавьте новое устройство — USB контроллер ( USB controller ). При добавлении USB контроллера нужно выбрать его тип:
- USB 2.0 ( EHCI+UHCI ) – контроллер с поддержкой USB 2.0 и USB 1.1 устройств;
- USB 3.0 ( xHCI ) – поддерживаются быстрые устройства USB 3.0, требуется версия virtual hardware 8 и выше.
USB Passthrough: проброс USB устройства в ВМ на ESXi
В нативном режиме USB Passthrough вы можете подключить физическое USB устройство с хоста в виртуальную машину VMWare.
Основные требования и ограничения такого способа проброса:
- Virtual Hardware 7.0 или выше;
- Вы можете предоставить прямой доступ к USB устройству только одной ВМ;
- Максимально количество проброшенных USB устройств для одной ВМ – 20;
- Не поддерживается загрузка ВМ с USB.
После добавления виртуального USB контроллера для ВМ, вы можете пробросить подключенный к хосту USB диск.
- В настройках ВМ добавьте устройство Host USB device и нажмите Add ;
- В выпадающем списке выберите подключенное USB устройство, которое нужно добавить;
- Для поддержки vMotion для ВМ с подключенным физическим USB диском нужно включить опцию “ Support vMotion while device is connected ”;
- После этого USB диск должен появится внутри гостевой ОС виртуальной машины.
- Нельзя выключить ВМ или поставить на паузу. При включении такой машины ее нужно вручную смигрировать на хост, к которому подключено USB устройство;
- Не поддерживается режим DPM, т.к. vCenter может выключить хост с USB устройством для экономии электроэнергии;
- ESXi хосты с ВМ и физическим USB устройством должно быть доступны через vmk0 по порту TCP 902.
Если при добавлении нового USB устройства клиент vSphere пишет, что USB устройств не обнаружено ( No available USB devices ), значить ваш USB диск не поддерживается VMWare для проброса в таком режиме. Список совместимых USB устройств есть на сайте VMWare (он не очень большой). Смотрите секцию “ USB Devices tested for Passthrough from an ESXi Host to a Virtual Machine in ESXi 6.7 ” в статье https://kb.vmware.com/s/article/1021345 .
В этом случае вы можете с вашего ESXi хоста пробросить в ВМ USB контроллер целиком.
VMware PCI Passthrough (VMDirectPath): проброс USB контроллера в ВМ
Другой, менее удобный метод предоставления доступа из ВМ к физическому USB устройству – проброс целиком USB контроллера с ESXi хоста. Этот режим называется VMDirectPath . Для его использования чипсет сервера должен поддерживать Intel Directed I/O или AMD I/O Virtualization Technology (AMD IOMMU) , и этот режим включен в настройках BIOS/UEFI.
Если на сервере установлен только один USB контроллер, при пробросе его в ВМ, вы не сможете использовать локально подключенные USB устройства хоста (клавиатуру, мышь). В этом случае лучше добавить в сервер дополнительный PCI USB контроллер.
Если на хосте имеется несколько USB контроллеров, вы можете идентифицировать подключенное USB устройство и номер контроллера через ESXi shell. Вывести список USB устройств:
lsusb -v | grep -e Bus -e iSerial
В выводе команду нужно найти строку USB накопителя, например:
Bus 002 Device 003: ID 0280:a00c Toshiba America Info. Systems, Inc.
Затем по номеру контроллера (Bus02 в этом случае) определяем root hub и его iSerial:
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 3.0 root hub_x000D_iSerial 1 0000:00:1D.0
tail -f /var/log/vmkernel.log | grep -i USB
2019-12-03T12:06:12.546Z cpu0:33271)<6>usb 4-2: new SuperSpeed USB device number 5 using xhci_hcd_x000D_2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: New USB device found, idVendor=0480, idProduct=b207_x000D_2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3_x000D_2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: Product: External USB 3.0_x000D_2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: Manufacturer: TOSHIBA_x000D_2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: SerialNumber: 20180528012427F_x000D_2019-12-03T12:06:12.571Z cpu0:33271)<6>usb 4-2: Vendor: 0x0480, Product: 0xb207, Revision: 0x0315_x000D_2019-12-03T12:06:12.571Z cpu0:33271)<6>usb 4-2: Interface Subclass: 0x06, Protocol: 0x50_x000D_2019-12-03T12:06:12.571Z cpu0:33271)WARNING: LinScsiLLD: scsi_add_host:573: vmkAdapter (usb-storage) sgMaxEntries rounded to 255. Reported size was 65535_x000D_2019-12-03T12:06:12.571Z cpu0:33271)<6>usb-storage 4-2:1.0: interface is claimed by usb-storage_x000D_2019-12-03T12:06:12.571Z cpu0:33271)<6>usb 4-2: device is not available for passthrough_x000D_2019-12-03T12:06:12.571Z cpu0:33271)<6>usb 4-2: usbfs: registered usb0405_x000D_2019-12-03T12:06:15.454Z cpu0:33207)<6>usb-storage 4-2:1.0: suspended
Если USB диск не определяется ESXi хостом, проверьте что служба запущена:
#chkconfig usbarbitrator --list.
Соответственно, мы получили номер USB контроллера, который нужно пробросить в ВМ.
- Чтобы пробросить физический USB контроллер, выберите ESXi хоста, на котором запущена ваша ВМ и перейдите в раздел Manage -> Settings -> PCI Devices -> Edit ;
- В списке PCI устройств найдите и выберите нужный USB контроллер по его ID (в моем примере 00:1D.0, контроллер называется C610/X99 series chipset USB Enhanced Host Controller #1 Intel Corporation );
- Статус USB контролера должен смениться с Unavailable (This device is not currently available for VMs to use) на Available (This device available for VMs to use). Нажмите Ок.
- Для сохранения изменений нужно перезагрузить хост ESXi.
- После загрузки хоста, выключите ВМ и добавьте новое PCI устройство ( New Device -> PCI Device -> Add ). В выпадающем списке выберите ваш USB контроллер (например 0000:00:1D| Intel Corporation USB Chipset…).Если при добавлении PCI устройства в настройках ВМ появилось предупреждение: “ Warning: The VM will not power on until its memory reservation equals its memory size ”, нужно зарезервировать память для ВМ.
- Включите ВМ и убедитесь, что в гостевой ОС появился USB диск. В моем случае в гостевой Windows Server 2012 R2 появился подключенный USB диск “Toshiba External USB 3.0 USB Device”.
В режиме VMDirectPath вы можете пробросить в ВМ до двух PCI устройств.
Hyper-V также поддерживает режим проброса физических USB устройств в ВМ .