Задача: Проработать от и до, как в свой тестовый полигон подключить USB носитель и прокинуть/пробросить его к одной из VM. Ведь по-сути такое легко делается при использовании гипервизора ESXi, а тут у меня связка Debian 10 + Proxmox 6

root@srv-proxmox:~# pveversion

pve-manager/6.0-6/c71f879f (running kernel: 5.0.21-1-pve)

root@srv-proxmox:~#

Т.к. мой тестовый полигон представлен на конфигурации:

  • Motherboard: Gigabyte 970A-DS3P
  • RAM: HMT451U6AFR8C x 4
  • CPU: AMD FX(tm)-6300 Six-Core Processor
  • HDD: (KINGSTON SA400S37480G, SBFKB1C2)

в один из разъемов USB я подключил USB Flash Drive, гипервизор Debian 10 + Proxmox 6 увидел его, как:

[Thu Oct 3 20:52:44 2019] usb 8-3: New USB device found, idVendor=8564, idProduct=1000, bcdDevice= 4.20

[Thu Oct 3 20:52:44 2019] usb 8-3: New USB device strings: Mfr=0, Product=1, SerialNumber=0

[Thu Oct 3 20:52:44 2019] usb 8-3: Product: USB2.0 Hub

Так у меня есть idVendor & idProduct

Открываю браузер (Google Chrome) со своей рабочей системы (Ubuntu 18.04 Desktop amd64) и обращаюсь на URL-адрес Proxmox 6:

https://IP&DNS:8006 — user&pass — (Folder View) Datacenter — Virtual Machine — к примеру пробрасывать USB носитель буду к VM: 103 (W-W7X64), сейчас она у меня выключена. Открываю ее свойства: VM: 103 (W-W7X64) - Hardware — Add — USB Device, далее выбираю «Use USB Vendor/Device ID»

При добавлении USB устройства VM не видим вообще никаких

Но вот почему-то мастер добавления не видит моего подключенного физически USB носителя, разбираюсь почему так произошло.

 

root@srv-proxmox:~# lsusb | grep JetFlash

Bus 003 Device 003: ID 8564:1000 Transcend Information, Inc. JetFlash

Вычитал из документации, что есть два варианта проброса USB

Вариант №1: Проброс USB устройства в гостевую VM производится путем редактирования конфигурационного файла VM указанием явно idVendor & idProduct:

Вариант №2: Проброс USB устройства в гостевую VM производится путем редактирования конфигурационного файла VM указанием явно на каком интерфейсе/разъеме на материнской плате находится USB:

Оба варианта не заработали до тех пока покуда

IOMMU в BIOS выключен:

root@srv-proxmox:~# dmesg | grep -iE "(IOMMU|AMD-Vi)"

[ 1.401667] PCI-DMA: using GART IOMMU.

[ 1.401669] PCI-DMA: Reserving 64MB of IOMMU area in the AGP aperture

root@srv-proxmox:~#

IOMMU в BIOS включил:

Отправляю систему в перезагрузку и в момент прохода POST нажимаю клавишу Del тем самым попадаю в BIOS. У меня BIOS Version: FD, перехожу в настройку Peripherals и изменяю IOMMU Controller с дефолтного Disabled на Enabled, затем нажимаю F10 и подтверждаю «Save configuration and exit?» — Yes. Тем самым активируется настройка, система загружается и проверяю:

root@srv-proxmox:~# dmesg | grep -iE "(IOMMU|AMD-Vi)"

[ 1.427685] iommu: Adding device 0000:00:00.0 to group 0

[ 1.427755] iommu: Adding device 0000:00:02.0 to group 1

[ 1.427832] iommu: Adding device 0000:00:04.0 to group 2

[ 1.427902] iommu: Adding device 0000:00:09.0 to group 3

[ 1.427976] iommu: Adding device 0000:00:11.0 to group 4

[ 1.428057] iommu: Adding device 0000:00:12.0 to group 5

[ 1.428070] iommu: Adding device 0000:00:12.2 to group 5

[ 1.428157] iommu: Adding device 0000:00:13.0 to group 6

[ 1.428171] iommu: Adding device 0000:00:13.2 to group 6

[ 1.428244] iommu: Adding device 0000:00:14.0 to group 7

[ 1.428314] iommu: Adding device 0000:00:14.1 to group 8

[ 1.428385] iommu: Adding device 0000:00:14.2 to group 9

[ 1.428451] iommu: Adding device 0000:00:14.3 to group 10

[ 1.428527] iommu: Adding device 0000:00:14.4 to group 11

[ 1.428593] iommu: Adding device 0000:00:14.5 to group 12

[ 1.428676] iommu: Adding device 0000:00:16.0 to group 13

[ 1.428691] iommu: Adding device 0000:00:16.2 to group 13

[ 1.428780] iommu: Adding device 0000:01:00.0 to group 14

[ 1.428803] iommu: Adding device 0000:01:00.1 to group 14

[ 1.428882] iommu: Adding device 0000:02:00.0 to group 15

[ 1.428958] iommu: Adding device 0000:03:00.0 to group 16

[ 1.469218] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40

[ 1.469219] AMD-Vi: Interrupt remapping enabled

[ 1.469324] AMD-Vi: Lazy IO/TLB flushing enabled

[ 1.842740] AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0xce25d880 flags=0x0000]

[ 1.842804] AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0xce25d880 flags=0x0000]

[ 1.842893] AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0xce25d880 flags=0x0000]

[ 1.842986] AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0xce25d880 flags=0x0000]

[ 1.843082] AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0xce25d880 flags=0x0000]

[ 1.843173] AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0xce25d880 flags=0x0000]

[ 1.843265] AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0xce25d880 flags=0x0000]

[ 1.843356] AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0xce25d880 flags=0x0000]

[ 1.843446] AMD-Vi: Event logged [IO_PAGE_FAULT device=02:00.0 domain=0x0000 address=0xce25d880 flags=0x0000]

root@srv-proxmox:~#

Проверяю, у меня сейчас есть VM ID: 103 Name: W-W7X64 она выключена, вставляю в материнскую плату моего гипервизора USB Flash Drive, гипервизор распознал ее как:

root@srv-proxmox:~# lsusb | grep JetFlash

Bus 003 Device 002: ID 8564:1000 Transcend Information, Inc. JetFlash

Так теперь возвращаюсь к VM, перехожу на Hardware — Add — USB Deviceвыбираю Use USB Vendor/Device ID и вижу USB носитель подключенный к гипервизору. На представленном скриншоте ниже я его выделил.

Активировав IOMMU в BIOS теперь вижу USB Flash Drive

Выбрав его нажимаю Add, оно появляется, как список всех устройств у VM:

USB Flash Drive успешно подключен к VM от гипервизора Debian 10 + Proxmox 6

А содержимое конфигурационного файла VM представляет из себя строку с USB Flash Drive:

# Проброс устройства USB

# где 0781:5572 - это Vendor ID & Device ID

usb0: host=8564:1000

Это был первый вариант подключения к VM USB-носителя, второй это по номеру порта на материнской плате:

VM, перехожу на Hardware — Add — USB Device — выбираю — Use USB Port

Choose Port: 3-3

где первая 3 — это Шина Bus 03

где вторая 3 — это порт Port 3

root@srv-debian:~# lsusb -t

/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/4p, 480M

|__ Port 3: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 480M

USB можно добавить к VM как номер шины и порт вместо Vendor ID / Device ID

А содержимое конфигурационного файла VM представляет из себя строку с USB Flash Drive:

# Проброс устройства USB

# где 3-3 <=> Bus 03 Port 3 (lsusb -t)

usb0: host=3-3

 

Оба варианта работают.

Теперь включаю VM (виртуальную машину)

https://IP&DNS:8006 — user&pass — (Folder View) — Datacenter — Virtual Machine — выделяю VM ID 103 Name: W-W7X64 и нажимаю Start, после того как система Windows 7 которая в этой виртуальной машине загрузится нужно доустановить драйвера для работы. Делается это подключением через Hardware — CD/DVD Driver образа с драйверами virtio-win.0.1.171.iso. Если же драйвера установлены, то в «Мой компьютер» вы увидите USB-носитель:

USB устройство успешно видится гостевой VM под гипервизором Proxmox 6

 

и с ним можно работать, как с обычным при подключении, Вы его извлекли из гипервизора он пропал в запущенной VM, подключили снова и он опять доступен. Я такое проделал со всеми своими USB накопителями и все они работали. Итого все дело было в настройке BIOS которую нужно активировать дабы можно использовать работу USB с гипервизором Debian 10 + Proxmox 6. Работает. На этом я прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.