На сьогоднішній день существет досить багато способів прокинути USB-пристрій на інший комп'ютер або виртуалку по мережі.
З найбільш популярних - железячние такі як AnywhereUSB і чисто програмні продукти, з тих що я спробував сам: USB Redirector і USB / IP.
Я б хотів розповісти вам ще про один цікавий спосіб, який працює безпосередньо з емулятором QEMU.
Він так само є частиною проекту spice, офіційно підтримуваним RedHat.

UsbRedir, це відкритий протокол для проброса usb-пристроїв по tcp на віддалений віртуальний сервер, розроблений за підтримки RedHat в рамках проекту spice. Але як виявилося їм можна цілком успішно користуватися і без spice. У ролі сервера виступає usbredirserver, який нишпорить usb-пристрій на певний порт, а в якості клієнта сам QEMU, який емулює підключення експортованого usb-пристрої в певний usb-контролер вашої віртуальної машини. Завдяки такому підходу в якості гостьової системи може використовуватися абсолютно будь-яка ОС, так як вона навіть не знає, що пристрій є проброшенним віддалено, а вся логіка лягає на QEMU.

Для початку кілька слів про вишеперчісленних рішеннях

  • AnywhereUSB - досить непогане рішення, але дороге, і має неприємний глюки, наприклад буває якщо розшарений флешка відвалюється, то перепідключити її назад можна тільки фізично вийнявши і вставивши її.
  • USB / IP - OpenSource проект. Ніби як був покинутий. За фактом глючить досить сильно. При розриві з'єднання, машина частенько йде в цілковитий freezee, а windows показує BSOD
  • USB Redirector - Чудова софтіна. Для розшарювання пристроїв з linux на linux безкоштовна, у всіх інших випадках вже коштує грошей, не так багато як AnywhereUSB, але і не безкоштовно як хотілося б :)
Як видно є з чого вибрати, але давайте ж нарешті спробуємо ще один спосіб - UsbRedir?

Налаштування віртуальної машини

Для того що б було куди підключати експортовані пристрою, на віртуальній машині потрібно створити необхідні usb-контролери:

  • uhci - для USB1.0
  • ehci - для USB2.0
  • xhci - для USB3.0
Для qemu (без libvirt)

Додайте опції в команду запуску віртуальної машини:
-device ich9-usb-ehci1, id \u003d ehci, addr \u003d 1d.7, multifunction \u003d on -device ich9-usb-uhci1, id \u003d uhci1, addr \u003d 1d.0, multifunction \u003d on, masterbus \u003d ehci.0 , firstport \u003d 0 -device ich9-usb-uhci2, id \u003d uhci2, addr \u003d 1d.1, multifunction \u003d on, masterbus \u003d ehci.0, firstport \u003d 2 -device ich9-usb-uhci3, id \u003d uhci3 , addr \u003d 1d.2, multifunction \u003d on, masterbus \u003d ehci.0, firstport \u003d 4

для libvirt
У вихідному файлі конфігурації віртуальної машини в вузлі & Ltdevices & gt видаляємо все USB контролери і додаємо следущий блок:

До речі, якщо ви використовуєте spice, то додавши до контролерів ще 3 спеціальних девайса, стане можливий кидок usb-пристроїв з клієнта spice на сервер.

Приклад під спойлером

для qemu
Додаємо наступні опції в команду запуску віртуальної машини, крім контролерів визначення нами раніше:
-chardev spicevmc, name \u003d usbredir, id \u003d usbredirchardev1 -device usbredir, chardev \u003d usbredirchardev1, id \u003d usbredirdev1, debug \u003d 3 -chardev spicevmc, name \u003d usbredir, id \u003d usbredirchardev2 -device usbredir, chardev \u003d usbredirchardev2, id \u003d usbredirdev2, debug \u003d 3 -chardev spicevmc, name \u003d usbredir, id \u003d usbredirchardev3 -device usbredir, chardev \u003d usbredirchardev3, id \u003d usbredirdev3, debug \u003d 3
для libvirt
У вихідному файлі конфігурації віртуальної машини в вузлі & ltdevices & gt додаємо наступні опції, крім контролерів визначення нами раніше:

Тепер все готово для здійснення проброса.

запуск сервера

Пакет usbredirserver можна знайти в стандартних репозиторіях практично у всіх популярних дистрибутивах linux.

Вставляємо флешку в комп'ютер, дивимося висновок usb-пристроїв:
$ Lsusb ... Bus 003 Device 011: ID 125f: c82a A-DATA Technology Co., Ltd. ...

Бачимо що пара vendorid: prodid дорівнює 125f: c82a, а ядро \u200b\u200bвизначило флешці 003-001 usbbus-usbaddr відповідно.

Тепер давайте розшарено її на 4000 порт:

# Використовуючи пару vendorid: prodid $ usbredirserver -p 4000 125f: c82a # Використовуючи пару usbbus-usbaddr $ usbredirserver -p 4000 003-011

Підключення пристрою до віртуальної машини

Через опції при запуску ВМ

Пристрій яке потрібно підключити до ВМ можна вказати при запуску, додавши наступні опції в команду запуску

для qemu
-chardev socket, id \u003d usbredirchardev1, port \u003d 4000, host \u003d 192.168.1.123 -device usb-redir, chardev \u003d usbredirchardev1, id \u003d usbredirdev1, bus \u003d ehci.0, debug \u003d 4
для libvirt
Цей блок рамещать перед тегом & Lt / devices & gt, Поруч з контролерами певними нами раніше:
Його так само можна виконати командою virsh attach-device

Або через qemu-monitor

Заходимо на гипервизор і в qemu-monitor нашої машини виконуємо наступні команди:
# Додаємо наш пристрій chardev-add socket, id \u003d usbredirchardev1, port \u003d 4000, host \u003d 192.168.1.123 # підключити його в ehci контролер (USB-2.0) device_add usb-redir, chardev \u003d usbredirchardev1, id \u003d usbredirdev1, bus \u003d ehci. 0, debug \u003d 4
Що б відключити флешку досить такої команди:
device_del usbredirdev1

На цьому все, після даних кроків ваша ВМ побачить вашу флешку і зможе з нею нативної працювати.

Якщо пристроїв багато і всі вони однакові

Ось тут з'явилася цікава задача, як прокинути кілька однакових комплектуючих на різні ВМ?
При цьому, варто зазначити, всі пристрої мають однакову пару vendorid: prodid, а пара usbbus-usbaddr зовсім не постійна, варто тільки вийняти і вставити пристрій, так воно відразу змінить свій usbaddr.

Я вирішив її за допомогою udev.
До речі якщо ви не зовсім розумієте як працює udev, на Debian Wiki є класна

І так приступимо

Для початку нам треба дізнатися серійник нашого пристрою, за яким і будемо ідентифікувати його в udev:

Запустимо udev-монітор:
$ Udevadm monitor --environment --udev
І вставимо наш пристрій, після цього ми відразу побачимо список змінних цього пристрою які udev люб'язно Ініціалізувати для нас:
... UDEV add / devices / virtual / bdi / 8: 16 (bdi) ACTION \u003d add DEVPATH \u003d / devices / virtual / bdi / 8: 16 ID_SERIAL_SHORT \u003d 11C130317234004B SEQNUM \u003d 4352 SUBSYSTEM \u003d bdi USEC_INITIALIZED \u003d 189056149826 ...
Інформацію про серійний номер і інших аттрибутах можна отримати і іншим способом, але варто враховувати що для написання правил ми будемо використовувати саме змінні з команди вище, а не атрибути з команди нижче. В іншому разі не буде відпрацьовувати тригер remove при відключенні пристрою.
$ Udevadm info -a -n / dev / bus / usb / 003/011 | grep "(serial)"

Тепер создадаім файл /etc/udev/rules.d/99-usb-serial.rules і запишемо в нього такі правила:
ACTION \u003d\u003d "add", ENV (ID_SERIAL_SHORT) \u003d "11C130317234004B", RUN + \u003d "/ usr / bin / usbredirserver -p 4000 $ attr (busnum) - $ attr (devnum)" ACTION \u003d\u003d "remove", ENV (ID_SERIAL_SHORT ) \u003d "11C130317234004B", RUN + \u003d "/ usr / bin / fuser -k 4000 / tcp"

Перезавантажити udev-правила:
$ Udevadm control --reload-rules
Готово, тепер при підключенні нашого пристрою, воно буде автоматично шарітся на потрібний нам порт, а при відключенні usbredirserver припинятиме свою роботу.
За аналогією додаємо і інші пристрої.

На цьому все. Дякую за проявлений інтерес:)

Один з читачів блогу - Vovets666 випробував безкоштовне ПО USBIP і запропонував написати про нього статтю.

Дісклаймер:
все описане нижче - моє особисте бачення проблеми і способів її рішення, що не є істиною в останній інстанції. Цілком можливо, існують і інші варіанти, я з задоволенням про них послухаю. Як інструкція по роботі з ПЗ використані матеріали, знайдені в інтернеті, вже й не пам'ятаю де ... Крім того, будучи адміном - віндузятнікі, з Linux я знаком досить поверхово, працював в умовах дедлайну і часу на вивчення матчастини / танці з бубнами особливо багато не мав, тому описую, як зробив, щоб працювало, і впевнений, що є й інші способи.

Отже, маємо віртуальні машини - сервери 1С, підняті на MSWindowsServer 2008R2. Для роботи ПО необхідні підключення до них серверні HASP-ключі. Безпосередньо підключити їх на ВМ на Hyper-V, як відомо, не можна. Завдання: якимось чином прокинути HASP-ключі на віртуальні машини, бажано з використанням мінімуму додаткового заліза і вартості ліцензій.

(Оффтоп: у 1С останнім часом з'явилася можливість програмного ліцензування ПО, без використання HASP-ключів (щось на зразок активації з використання пін-кодів). Але є нюанси: обмін на ліцензію з програмної активацією не безкоштовний, при зміні конфігурації машини необхідна повторна активація, після закінчення певного ліміту дозвіл на активацію залишається на розсуд техпідтримки, що зовсім не айс. Тому було вирішено використовувати старий спосіб з HASP-ключами).

Розглядалися варіанти:

- спосіб, що надається компанією Мікрософт (правда, для інших цілей):
RemoteFX + RDP7.1. Чи не влаштував з причин: необхідно обладнання з підтримкою RemoteFX, на сервері 1С повинні бути підняті додаткові сервіси (служба доступу до віддаленого робочого столу), з хоста на виртуалку повинна постійно висіти сесія RDP, через яку прокидати ключ, необхідна клієнтська ліцензія на доступ до RDS . Можливо, в будь-якому з пунктів цього списку я і помиляюся, але загальна їх кількість зарубав спосіб на корені.

- апаратні пристрої сторонніх виробників. Недоліки: коштують грошей, до того ж у деяких пристроїв спостерігалися проблеми з сумісністю з використовуваними ОС (наприклад, Ubox 4100 який у нас є) і які виробник вирішувати не збирався. Зараз проблеми ніби як вирішені (в інших моделях), але осад залишився.

- ПО сторонніх виробників. Недоліки: вимагають наявності окремої машини для роботи в якості сервера USB-пристроїв і, як правило, платні. після пошуку
прийнятного софта виявилося, що з усього виявленого ПО безкоштовним для комерційного застосування є тільки пакет USBIP. На ньому і зупинився.

Сама по собі установка і настройка ПО великих проблем не викликала, в комплекті до пакету був короткий мануал, плюс - інтернет.

Пакет USBIP () для роботи вимагає наявності 2х налаштованих машин: сервера (до нього безпосередньо підключається ключ) і клієнта (на нього цей ключ прокидати). серверна
частина USBIP існує тільки під Linux, клієнтська - під Linux і Windows (включаючи 7 і 2008R2).

1) Установка сервера (машини, в яку підключено USB пристрій).

Як сервер використовуємо машину з встановленим Linux. Я використовував Linux Ubuntu v.11.04 (збірка Lubuntu, яка декларується як найменш вимоглива до ресурсів) як найбільш просту (для мене) систему: ставиться без будь-яких проблем, автоматично підчіплює нові підключаються USB пристрою, після установки за замовчуванням інстальовані необхідні компоненти, крім того, USBIP присутній в репозитарії. З метою економії на обладнанні ця машина створена як віртуальна, піднята на існуючому хості ESXi 4.1 і в неї в свою чергу проброшен ключ HASP з хоста стандартним для ESXi способом.

Установка проблем не викликала: ставимо систему, підключаємо до мережі, видаємо IP, через менеджер пакетів встановлюємо USBIP і необхідні для роботи компоненти. Крім того були встановлені VMware tools (так як дана машина - ВМ на ESXi).

Про всяк випадок нагадаю, як це робиться:

З оснащення VMware підключаємо диск з ПО (Inventory -\u003e Virtual Machine -\u003e Guest -\u003e Install / Upgrade VMware Tools). З цього диска розпаковуємо архів з ПО на робочий стіл. Запускаємо термінал і в ньому набираємо:

<имя пользователя>@<имя машины>: ~ $ Sudo<путь до файла>\\ Vmware-install.pl -default

2) Налаштування сервераUSB ключів.

Запускаємо термінал. Подальші дії - з командного рядка.

· Завантажуємо наступні модулі.

<имя пользователя>@<имя машины>:~$ sudo modprobe usbip

<имя пользователя>@<имя машины>:~$ sudo modprobe usbip_common_mod

· Запускаємо usbip як системного демона:

<имя пользователя>@<имя машины>:~$ sudo usbipd D

отримуємо:

Bind usbip.ko to a usb device to be exportable!

<имя пользователя>@<имя машины>:~$

Увага! Необхідно спочатку запустити демон, а лише потім підключати пристрої, інакше можуть виникнути помилки на клієнті при підключенні. (Див. Примітки)

· Для перегляду підключених USB пристроїв виконуємо команду

<имя пользователя>@<имя машины>:~$ lsusb

отримуємо список підключених USB пристроїв з їх ідентифікаторами виду:

Bus XXX Device YYY: ID VendorID: DeviceID< назва пристрою>

щось на зразок:

Bus 002 Device 004: ID 0529: 0001 Aladdin Knowledge Systems HASP v0.06

Bus 002 Device 003: ID 0e0f: 0002 VMware, Inc. Virtual USB Hub

Bus 001 Device 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub

Запам'ятовуємо поєднання VendorID: DeviceID

· Виконуємо команду:

<имя пользователя>@<имя машины>:~$ sudo usbip_bind_driver -list

USBIP перевіряє список підключеного обладнання і виводить його з зазначенням їх bus-ID виду:

- busid 2-1 (0529: 0001)

2-1: 1.0 -\u003e none

- busid 2-2 (0e0f: 0002)

2-2: 1.0 -\u003e hub

……..

В даному випадку bus-ID, який вказує на потрібну нам USB пристрій: «2-1».

· Тепер підключаємо пристрій до сервера. набираємо:

<имя пользователя>@<имя машины>::~$ sudo usbip_bind_driver -usbip 2-1

отримуємо:

** (process: 1483): DEBUG: 2-1: 1.0 -\u003e none

** (process: 1483): DEBUG: write «add 2-1» to / sys / bus / usb / drivers / usbip / match_busid

** Message: bind 2-1 to usbip, complete!

Пристрій підключений до USBIP, доступ з локальної машини-сервера до нього втрачається.

· Також можна подивитися, які пристрої підключені до USBIP в даний момент. Для цього набираємо:

<имя пользователя>@<имя машины>:~$ sudo usbip_bind_driver -list

отримуємо:

- busid 2-1 (0529: 0001)

2-1: 1.0 -\u003e usbip

- busid 2-2 (0e0f: 0002)

2-2: 1.0 -\u003e hub

Пристрій з bus-ID 2-1 підключено до USBIP. Система може передавати дані про це USB пристрої з вашої системи віддаленим клієнтам.

Налаштування сервера закінчена. У разі необхідності можна додавати і прибирати
експортовані пристрою.

параметри USBIP - linuxсервераUsage: usbip_bind_driver

- ?, -help виклик
довідки
-usbip busid make a device exportable
-other busid use a device by a local
driver
-list print usb devices and their
drivers
-list2 print usb devices and their
drivers in parseable mode
-allusbip make all devices exportable

3) Налаштування клієнта MS Windows

· Скачиваем дистрибутив. Нам знадобляться обидві версії - 0.1 і 0.2.

· Встановлюємо USB / IPEnumenator. Він встановлюється як довільне системне пристрій з драйверами на диску. Драйвера беремо з дистрибутива версії 0.2:

Для Windows XP:

1. Розпаковуємо файли в локальну папку.

2. В Панелі Управління тиснемо «Установка Обладнання", в Вікні Привітання Майстри тиснемо «Далі».

3. Вибрати «Так, пристрій вже підключено» -\u003e «Далі».

4. Вибрати «Додавання нового пристрою» -\u003e «Далі».

5. Вибрати «Установка устаткування, вибраного зі списку вручну» -\u003e «Далі».

7. Вибрати «Встановити з диска», -\u003e «Перегляд», вибрати папку з розпакувати драйвером -\u003e «ОК».

9. «Майстер готовий до установки нового обладнання» -\u003e Вибрати «Далі» -\u003e Готово ».

Для Window 7 (і 2008r2):

1. Для вирішення установки непідписаних драйверів: запускаємо cmd від
адміністратора і виконуємо «bcdedit / settestsigningon».

2. Розпаковуємо файли в локальну папку ..

3. Відкриваємо «Диспетчер Пристроїв».

4. Правою кнопкою на «ім'я комп'ютера» -. «Встановити старе пристрій» (або вибрати в меню «Дія»).

5. У Вікні Привітання Майстри тиснемо «Далі».

6. Вибрати «Установка устаткування, вибраного зі списку вручну» -\u003e «Далі».

8. Вибрати «Встановити з диска», -\u003e «Перегляд», вибрати папку з розпакувати драйвером -\u003e «ОК».

10. «Майстер готовий до установки нового обладнання» -\u003e Вибрати «Далі» -\u003e «Готово».

Всі зазначені дії також описані в що йде з пакетом USBIP файлі «usage» англійською мовою.

· Підключаємо USB пристрої, позначені як експортовані на потрібному нам сервері. Для підключення використовуємоUSBIP з дистрибутива версії 0.1

Запускаємо cmd. Дивимося, які пристрої готові до підключення:

path-to-usbip :\u003e Usbip.exe -l

(Server-ip - IP адреса сервера USB пристроїв з пункту 2)

C:\ usbip> usbip l 192.168.1.13

usbip dbg: usbip_network.c: 229 (tcp_connect) trying 192.168.1.13 port 3240

usbip dbg: usbip_network.c: 249 (tcp_connect) connected to 192.168.1.13:3240

— 192.168.1.13

usbip dbg: usbip.c: 423 (query_exported_devices) exportable 2 devices

2-1: unknown vendor: unknown product (0529: 0001)

: /sys/devices/pci0000:00/0000:00:11.0/0000:02:02.0/usb2/2-1

: Unknown class / unknown subclass / unknown protocol (ff / 00/00)

: 0 - unknown class / unknown subclass / unknown protocol (ff / 00/00)

В результаті бачимо, що на сервері 192.168.1.13 готове до підключення пристрій з bus-ID 2-1 - то, які ми налаштували в пункті 2. Пристроїв може бути і більше.

pathtousbip:> usbip . exe a < server ip > USB ID

USB-ID в нашому випадку 2-1.

Отримуємо многабукв (лістинг параметрів) і на завершення:

new usb device attached to usbvbus port 2

USB пристрій повинен з'явитися в системі клієнта. Вікно терміналу бажано не закривати.

параметри USBIP - windowsклієнтаUsage: usbip

a, -attach Attach a remote USB device
-x, -attachall Attach all remote USB
devices on the specific host
-d, -detach Detach an imported USB
device
-l, -list List exported USB devices
p, -port List virtual USB port status
-D, -debug Print debugging information
-v, -version Show version
- ?, -h, -help Print this help

Примітки: Виникаючі проблеми та їх вирішення:

1. Я використовував версію системи 11.04 на ядрі 2.6. Після оновлення системи до версії 11.10 (ядро 3.0.4) usbip працювати перестав - видав помилку, що компонент не найден. Довелося відновлювати машину і відмовлятися від оновлень. З іншого боку, так як це службова вузькоспеціалізована машина і доступ до неї обмежений, це було визнано не критичним.

2. Спочатку hasp-ключі відмовлялися підключатися до клієнта, видаючи помилку. В ході експериментів було встановлено, що спочатку необхідно запустити usbip -демон, а вже потім приєднувати до машини ключі. Надалі помилки зникли, підключатися ключі стали в будь-якому порядку, повторити помилки не вдалося. Це як раз одна з тих дивних речей, про які я згадував.

3. Після перезавантаження ВМ клієнта - сервера 1С іноді не виходить підключити до нього деякі з ключів - видає помилки. Можливо, це пов'язано з завислими на сервері HASP сесіями обміну з usb-пристроями. Лікується перезавантаженням сервера HASP і повторним прокинув ключів на клієнт.

Добрий день, амігос, радий що ти завітав до мене на сайт, сьогодні ми розглянемо таке питання, як організувати usb по мережі і як це використовувати в віртуалізації. Тема досить актуальна, і зустрічається таке завдання все частіше.

usb через мережу

Як ви вже знаєте в наше життя, давно і на довго увійшла віртуалізація. Потужності серверів ростуть, і природно з'явилися технології раціонального їх використання, що мають на увазі ізоляцію і нормальну утилізацію ресурсів, що породило віртуальні машини, які вже використовують і на хостингах і дата центрах. Я вже розповідав про все це, якщо цікаво подивіться по посиланнях зліва і вище.

Як ви знаєте іноді деякі ліцензійні програми, вимагаю для роботи usb ключ. Раніше в класичному варіанті, коли були тільки фізичні сервера, з роботою такої схеми проблем не було, але з появою віртуалізації вона виплила на ружу.

На жаль, у деяких гіпервізора, немає можливості прокидати на пряму з сервера USB пристроїва. Прикладом може служити Hyper-V від компанії Microsoft, який з 208 року до сих пір не несе в собі таку можливість, на відміну від компанії vMvare, яка це дозволяє і я вже розповідав як прокинути USB модем в vmware esxi.

Не поспішайте засмучуватися, адепти редмондсого гіганта, на виручку вам приходить технологія USB over IP або AnywhereUSB. USB over IP дозволяє підключити usb через мережу.

AnywhereUSB це невеликий мережевий usb хаб. Нижче приблизні моделі, представлені на ринку.

  • AnywhereUSB / 2 - 2 порти USB


  • AnywhereUSB / 5 - 5 портів USB


  • AnywhereUSB / 14 - 14 портів USB



Налаштування AnywhereUSB

Давайте розглянемо як налаштовується залізяка, для того щоб зробити доступ ЮСБ по мережі.

Ось як це буде виглядати.


Для настройки і управління пристроєм передбачено кілька інтерфейсів:
• Web інтерфейс для налаштування, моніторингу та адміністрування;
• AnywhereUSB утиліта конфігурації;
• Telnet Command-Line Interface;
• Simple Network Management Protocol (SNMP).

Щоб пристрій розглянемо Web інтерфейс - як найбільш зручний і простий варіант.

Управління IP адресою

Існує кілька варіантів присвоєння IP адреси AnywhereUSB:
• Статичний IP;
• Динамічне присвоєння IP - Using Dynamic Host Configuration Protocol (DHCP);
• Auto Private IP Addressing (APIPA), найбільш відомий як Auto-IP;

Як розумієте найправильніший спосіб це статичний ip адресу. Здається він в пункті Network Configuration.


У цьому ж мню дуже зручно задавати мережеві служби, доступні на ньому.



На вкладці Conection Management можна подивитися поточні підключення.



Тепер, що далі потрібно зробити на віртуальній машині, тут все до неподобства логічно, потрібно поставити там драйвера від AnywhereUSB і задати ip адресу пристрою. Як бачите я вже підключив її і у неї є внутрішній Ip адреса.


За допомогою спеціальної утиліти, Anywhere View можна перевірити доступність і зайнятість усіх пристроїв. Мабуть це самий простий і надійний метод проброса токенов, флешок і різних модемів в ваші віртуальні машини, Самі пристрої коштують по різному, але якщо ви вже витратилися на софт і Гіпервізор, думаю при необхідності купіть і це :).


Дуже потужний інструмент в умілих руках. З різних технічних причин віртуальна машина не має прямого доступу до USB-диску за замовчуванням. У цій статті розбираємося, як прокинути USB-диск в віртуальну машину Hyper-V. Реалізація задумки буде нескладною, можна сказати, в два кліка. ніяких додаткових програм, Як іноді радять диванні «гуру» не буде потрібно, використовуємо свої особисті руки і нічого більше.

ВАЖЛИВО. Змінні, тобто removable-пристрої ми прокинути в ВМ не зможемо, хоча і є деякі хитрощі на цей рахунок, але зараз не про це. Наш алгоритм працездатний тільки для USB, які показуються як fixed. Ми не зможемо зробити снапшот для таких дисків.

Приступаємо до маніпуляцій




ВАЖЛИВО. Зовсім не обов'язково відключати ВМ перед додаванням жорсткого диска. Для цього існує спеціальна технологія гарячого додавання і гарячого видалення.

  1. Підключаємося до ВМ через rdp або просто відкриваємо консоль. Заходимо в управління дисками. Якщо новий на місці, значить ми все робимо правильно. Перевіряємо в мережі він. Якщо немає, то виправляємо це, як і раніше, викликом контекстного меню. Точок монтування і букв наші розділи не мають, треба цю справу виправляти. Кількома на будь-який з розділів правою кнопкою і вибираємо пункт «Змінити букву диска або шлях до нього ...». Вибираємо будь-яку вільну.

Проброс USB в віртуальну машину Hyper-V закінчено, тепер ми можемо його використовувати для своїх цілей.

Дані інструкції вірні починаючи з 2, х версій.

Начебто, навіщо ще щось писати, коли є офіційна інструкція? Однак, тут є дещо, чого там немає.

Є два варіант передачі USB-пристрої в гостьову систему:

  • передати «гостю» певний пристрій;
  • передати USB-порт, до якого цей пристрій підключено.

Проброс USB-пристроїв

Якщо є USB ключ захисту, або зовнішній накопичувач, то зручніше передавати в гостьову систему безпосередньо сам пристрій, незалежно від того, до якого USB-порту цей пристрій підключено фізично. Адже при обслуговуванні, ми можемо в наступний раз підключити в інший кінець.

# Lsusb Bus 002 Device 002: ID 8087: 8000 Intel Corp. Bus 002 Device 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087: 8008 Intel Corp. Bus 001 Device 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b: 0003 Linux Foundation 3.0 root hub Bus 003 Device 004: ID 051d: 0002 American Power Conversion Uninterruptible Power Supply Bus 003 Device 003: ID 051d : 0002 American Power Conversion Uninterruptible Power Supply Bus 003 Device 002: ID 046d: c00c Logitech, Inc. Optical Wheel Mouse Bus 003 Device 001: ID 1d6b: 0002 Linux Foundation 2.0 root hub

Знаходимо потрібне нам пристрій і беремо його ID, який і будемо використовувати.

У мене стояла задача прокинути UPS-и.
(Ситуація, насправді не типова, скоріше з серії як бути не повинно: На сервер та мережеве обладнання поставлені 2 самий простих бесперебойніка для робочих станцій. UPS-и опинилися ніжними і починали голосити з приводу і без. Щоб швидко підрізати їм голос і поки не розбиратися з керуванням ДБЖ з Debian і було вирішено підчепити два бесперебойніка до Windows-гостям.)

На цьому етапі я виявив, що обидва потрібних мені пристрої мають однакові ID ... Але пробуємо.

Прокидаємо пристрої прописуються в файлі конфігурації відповідної віртуальної машини.

# Nano /etc/pve/qemu-server/101.conf usb0: host \u003d 051d: 0002

Перезавантажив. Пристрій підчепити, начебто все добре. Але тут згадуємо, що другий пристрій з таким же ідентифікатором. Як їх розрізняти? І дійсно, досвід показав, що якщо в дві віртуальні машини прописати один ідентифікатор, то вони при включенні будуть забирати один в одного одне і те ж пристрій. Не дивлячись на те, що в host-системі є кілька USB-пристроїв з таким ідентифікатором.

Ось тут то ми і згадуємо, що є інший спосіб проброса.

Проброс USB-портів

Необхідно визначити до якого саме порту підключено потрібне нам пристрій.

Перший спосіб:

# Lsusb -t /: Bus 04.Port 1: Dev 1, Class \u003d root_hub, Driver \u003d xhci_hcd / 6p, 5000M /: Bus 03.Port 1: Dev 1, Class \u003d root_hub, Driver \u003d xhci_hcd / 15p, 480M | __ Port 4: Dev 2, If 0, Class \u003d HID, Driver \u003d usbhid, 1.5M | __ Port 7: Dev 3, If 0, Class \u003d HID, Driver \u003d usbfs, 12M | __ Port 8: Dev 4, If 0, Class \u003d HID, Driver \u003d usbfs, 12M /: Bus 02.Port 1: Dev 1, Class \u003d root_hub, Driver \u003d ehci_hcd / 3p, 480M | __ Port 1: Dev 2, If 0, Class \u003d hub, Driver \u003d hub / 8p, 480M /: Bus 01.Port 1: Dev 1, Class \u003d root_hub, Driver \u003d ehci_hcd / 3p, 480M | __ Port 1: Dev 2, If 0, Class \u003d hub, Driver \u003d hub / 6p, 480M

Як пізніше з'ясувалося, потрібні мені пристрої сидять на шині 3, порти 7 і 8. Але поки нам це не очевидно і ось варіант другий:

Qm monitor qm\u003e info usbhost Bus 3, Addr 4, Port 8, Speed \u200b\u200b12 Mb / s Class 00: USB device 051d: 0002, Back-UPS XS 650CI FW: 892.R2.I USB FW: R2 Bus 3, Addr 3, Port 7, Speed \u200b\u200b12 Mb / s Class 00: USB device 051d: 0002, Back-UPS XS 650CI FW: 892.R2.I USB FW: R2 Bus 3, Addr 2, Port 4, Speed \u200b\u200b1.5 Mb / s Class 00: USB device 046d: c00c, USB Optical Mouse

Тут ми наочно бачимо хто є хто. І тепер сміливо:

# Nano /etc/pve/qemu-server/101.conf usb0: host \u003d 3-7

Для повноти картини, доповню інструкцію прикладом з офіційної документації.

Можливий такий варіант:

Qm monitor qm\u003e info usbhost Bus 3, Addr 2, Port 1.2, Speed \u200b\u200b1.5 Mb / s Vendor Specific: USB device 0529: 0001 у HASP 2.17