На хосте 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 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 2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: New USB device found, idVendor=0480, idProduct=b207 2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: Product: External USB 3.0 2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: Manufacturer: TOSHIBA 2019-12-03T12:06:12.570Z cpu0:33271)<6>usb 4-2: SerialNumber: 20180528012427F 2019-12-03T12:06:12.571Z cpu0:33271)<6>usb 4-2: Vendor: 0x0480, Product: 0xb207, Revision: 0x0315 2019-12-03T12:06:12.571Z cpu0:33271)<6>usb 4-2: Interface Subclass: 0x06, Protocol: 0x50 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 2019-12-03T12:06:12.571Z cpu0:33271)<6>usb-storage 4-2:1.0: interface is claimed by usb-storage 2019-12-03T12:06:12.571Z cpu0:33271)<6>usb 4-2: device is not available for passthrough 2019-12-03T12:06:12.571Z cpu0:33271)<6>usb 4-2: usbfs: registered usb0405 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 устройств в ВМ.