Проброс устройств в виртуальную машину
Проброс устройств в виртуальную машину
Добрый день! Уважаемые читатели и гости популярнейшего компьютерного портала Pyatilistnik.org. Уверен, что среди моих подписчиков и читателей не мало людей у кого дома установлен гипервизор Vmware Workstation 14 и выше, а может и VirtualBox, с помощью которого они запускают внутри своей основной операционной системы, виртуальные машины на различных ОС. Благодаря этому есть возможность на одном железе протестировать много чего, чаще всего это актуально для администраторов, когда они создают целые тестовые стенды или же для программистов. Бывают ситуации, что есть необходимость пробросить внутрь виртуальной машины Vmware Workstation USB флешку или USB принтер, а может и звуковую карту и люди не знают, как это можно сделать. Сегодня я покажу процесс подключения периферийных устройств подключенных к вашему компьютеру внутрь виртуальной машины.
Сценарии применения проброса устройств в Vmware Workstation
Перед тем. как я вам покажу сам не хитрый процесс, я бы хотел привести несколько сценариев, которые применимы к данной задаче.
Применений очень много и, что самое замечательное, если вы сломаете операционную систему внутри виртуальной машины, то это ни как не повлияет на вашу основную ОС.
Как пробросить устройство в виртуальную машину Vmware Workstation
Я в своем примеру покажу вам процесс подключения переносного USB-диска Zalman в виртуальную машину с Windows 10, в качестве гипервизора у меня стоит Vmware Workstation 14. Данный метод похож на то, когда мы прокидывали USB-модем в ESXI. В проводнике моей основной ОС есть локальный диск F: (Zalman), его я хочу подключить внутрь виртуалки. Открываем ваш Vmware Workstation.
У меня есть виртуалка Windows 10 (1809), как видите в ней только один диск.
Щелкаем по ней правым кликом мышки и из контекстного меню выбираем пункт «Съемные устройства (Removable Devices)». Тут у вас будет список устройств, которые вы сможете подключить в вашу виртуальную машину:
Меня интересует именно последний вариант, среди всех доступных USB, я нахожу свой Fujitsu ZM-VE400. Перехожу в правое меню и выбираю пункт «Подключить (Отключить от текущего хоста (Connect «Disconnect from Host»))». Как только вы выберите данный пункт, то произойдет магия и в вашу виртуальную машину будет подключен ваш физический USB диск или любое другое устройство.
Как видим все успешно появилось в Windows 10. Если нужно отключить устройство, то так же заходим в нужное меню, но уже выбираем пункт «Отключить (Disconnect (Connect to host))».
USB passthrough: проброс USB флешки/устройства в виртуальную машину на VMWare ESXi
На хосте 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 нужны несколько основных компонентов:
Чтобы установить USB контроллер для ВМ на VMWare ESXi, откройте ее настройки и добавьте новое устройство — USB контроллер (USB controller). При добавлении USB контроллера нужно выбрать его тип:
USB Passthrough: проброс USB устройства в ВМ на ESXi
В нативном режиме USB Passthrough вы можете подключить физическое USB устройство с хоста в виртуальную машину VMWare.
Основные требования и ограничения такого способа проброса:
После добавления виртуального USB контроллера для ВМ, вы можете пробросить подключенный к хосту USB диск.
Если при добавлении нового 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 устройств:
В выводе команду нужно найти строку USB накопителя, например:
Затем по номеру контроллера (Bus02 в этом случае) определяем root hub и его iSerial:
Если USB диск не определяется ESXi хостом, проверьте что служба запущена:
Соответственно, мы получили номер USB контроллера, который нужно пробросить в ВМ.
В режиме VMDirectPath вы можете пробросить в ВМ до двух PCI устройств.
Проброс нескольких одинаковых устройств USB в виртуальную машину libvirt+QEMU
Конфигурация.
Сервер виртуальных машин на GNU/Linux. Виртуальные машины Windows. Гипервизор QEMU-KVM.
Виртуальные машины запускаются автоматически.
Описание проблемы.
Неудачное решение
Первое, что пришло в голову после изучения документации — указать в конфигурации виртуальной машины все возможные bus и device для этих одинаковых USB-ключей. Но это породило неудобство при просмотре и редактировании виртуальной машины в Virt-Manager.
Окончательное решение.
Разбираться с UDEV желания не было. (Не знаю, можно ли в нём изменить номер устройства на шине USB, а изменить номер шины наверняка невозможно.)
Поэтому было применено максимально универсальное решение: в процессе загрузки после запуска виртуальной машины выполняется скрипт, который выясняет номера шины и номер устройства для каждого из одинаковых электронных ключей, формирует файл-описание устройств для libvirt (формата XML) и добавляет проброс этих устройств в виртуальную машину. Если в скрипте возникнет ошибка, она заносится в syslog и на stderr.
Чтобы не придумывать обработку start/stop/status и проверку зависимостей, скрипт добавлен в rc.local — он заведомо выполняется последним из стартовых скриптов.
Использование этого метода исключает переключение USB-ключей во время работы виртуальной машины — если вытащить ключ и вставить его в другой порт, он не будет подключен повторно. Для сервера это ограничение приемлимо.
Вывод lsusb (для справки), нужные устройства — пятое и шестое на третьей шине:
Пояснение к тексту.
Для простоты программа для AWK передаётся в командной строке. При этом, чтобы избежать сложностей с экранированием кавычек и «$», внутри awk-программы переменные шела не используются. Поэтому сделан переход в созданный временный каталог, а также параметры устройств заданы константами (Vendor ID 0x0a89 и Product ID 0x0008).
Проброс USB устройств в виртуальную машину Hyper-V
Одним из существенных недостатков Hyper-Vперед другими гипервизорами (например, ESXi или Proxmox) являются отсутствие полноценной возможности пробрасывать USB устройства с хоста в виртуальные машины. Начиная с версии Hyper-V 2012 R2 появился ряд изменений, касающихся возможностей USB Passthrouth, однако этот функционал все еще уступает возможностям конкурентов. В этой статье мы расскажем об особенностях проброса USB устройств в Hyper-V.
Особенности USB Passthrough в Hyper-V
Под термином USB passthrough понимается возможность проброса USB устройства из хостового гипервизора (или по сети с другого сервера/устройства) в виртуальную машину. С помощью USB passthrough вы можете прокинуть внутрь ВМ токен, USB ключ, модем или любое другое оборудование, подключенное через USB порт.
Плохая новость в том, что в Hyper-V нет нормальной поддержки проброса USB устройств, вы не сможете пробросить любое USB устройство с физического хоста в виртуальную машину (в VMWare с этим на порядок лучше – см. статью USB passthrough в VMWare ESXi). Есть несколько встроенных возможностей использования USB устройства в Hyper-V, но у всех них есть существенные ограничения. На данный момент можно использовать следующие технологии для проброса USB устройства в Hyper-V.
Проброс USB диска в виртуальную машину Hyper-V
Вы можете довольно просто пробросить подключенный к хосту USB диск напрямую внутрь любой запущенной виртуальной машины Hyper-V. Рассмотрим, как предоставить виртуальной машине Hyper-V прямой доступ к USB диску.
Все! Вы напрямую пробросили внешний USB диск внутрь виртуальной машины Hyper-V и можете его использовать.
Для безопасного извлечения USB диск можно открыть консоль Hyper-V Manager и перейти в окно настроек виртуальной машины. В разделе SCSI Controller выберите жесткий диск, который нужно удалить и нажмите Remove. Сохраните изменения. После этого жесткий диск можно физически извлечь из USB порта хоста Hyper-V.
Проброс USB устройств через Enhanced Session Mode в Hyper-V
Сначала нужно включить Enhanced Session Mode в настройках сервера Hyper-V. Это можно сделать с помощью PowerShell:
Перезапустите службу Hyper-V Virtual Machine Management:
Get-Service vmms | Restart-Service
В разделе Integration Services настроек ВМ нужно включить опцию Guest Services.
Для проброса USB устройства через Enhanced Session Mode нужно запустить консоль Hyper-V, выбрать ВМ и нажать Connect. Либо вы можете запустить утилиту vmconnect.exe (Virtual Machine Connection), указать Hyper-V сервер и имя ВМ (утилита поддерживает некоторые параметры командной строки, поэтому вы можете отдавать пользователям настроенный bat файл).
Выберите USB устройства на вашем компьютере, которое нужно пробросить в ВМ. Если устройства, которое вам нужно, сейчас не подключено, выберите опции Other supported Plug and Play (PnP) devices и Devices that I plug in later.
Теперь все подключённые к вашему компьютеру USB устройства будут автоматически доступны в консольной сессии виртуальной машины Hyper-V.
Основные возможности и ограничения Enhanced Session Mode
Методы проброса USB устройства через сеть (USB over IP или в RDP сессии) позволяют сохранить доступ к USB ключу при миграции виртуальной машины на другой хост (Hyper-V Live Migration /vMotion).
Проброс видеокарты в виртуальную машину
На некоторое время поставил в тупик вопрос: как этой системой рулить? В смысле, должна же быть какая-нибудь консоль управления, желательно под винды? Поковырявшись полдня с условно-штатным OpenXenManager я пришел к мысли, что то ли лыжи не едут, то ли эта кроссплатформенная тулза на винде не живет. Один или два раза она сконнектилась с сервером, но померла где-то в процессе работы, остальные разы глухо висла при коннекте, сливая неудежимый поток исключений в консоль Питона.
К счастью, более широкий взгляд в окружающий интернет открыл мне, что Citrix XenCenter прекрасно может рулить opensource-ным Xen-ом, а сам вполне бесплатен. Правда, при коннекте кричит, что через N дней у вашего сервера истечет Evaluation period, но знающие люди пишут, что это он просто не в курсе насчет opensource редакции сервера, а на самом деле все будет работать.
XenCenter позволяет создавать-включать-гасить виртуалки, а проброс устройств надо настраивать из sysadmin-friendly интерфейса командной строки.
Против ожиданий, проблем тут не случилось. Сделал все по мануалу, и хватило его одного. Вот народ жалуется, что по Xen-у документации мало. Так другой раз и хорошо, что мало, если этого хватает. Сколько я по vSphere прочел, и все без толку… Впрочем, не хочу говорить дурных слов про vSphere. Под ней зато так железо настроилось, что Xen пролетел прямо со свистом.
Итак, с помощью XenCenter я организовал виртуалку о двух ядрах и 4 ГБ памяти, накатил туда седьмую 64-битную винду и пошел пробрасывать.
pciback 0000:01:00.1: secondary bus reset failed for device — all functions need to be co-assigned — err: 6
pciback 0000:01:00.1: FLR functionality not supported; attempts to use secondary bus reset unsuccessful;
pciback 0000:01:00.1: FLR not performed for device
Похоже, что передача карты на горячую нам не светит. Ладно. Дадим гипервизору свой VGA адаптер, благо видеокарт мне теперь хватает. Переставляем Radeon 3450 во второй слот, в первый ставим валяющийся рядом 3470. К каждой карте прицепляем по монитору. Включаем хост, запускаем виртуалку. Винда просит перезагрузки после изменения конфигурации. Ребут. Логинимся…
В консоли XenCenter заставка зависает, и я не сразу соображаю, что правый монитор светится синим
Оно все-таки произошло.
Итого, на Xen срослось за 3 дня (после того, как 3 месяца упражнялся на VMware).
Я залогинился. Картинка на мониторе самая обыкновенная, без особенностей. Разрешение 1920х1200 держит. Не тупит (хотя тестов не гонял). Видео с YouTube проигрывается нормально.
На этой радостной ноте завершу свой правдивый отчет, а сам займусь пробросом клавиатуры, мыши и прочей периферии.
Update:
Пробросил клавиатуру и мышь, пишу из виртуалки под Win7. Здесь ничего, жить можно.
Индекс производительности 3.5
Я даже еще не отключил Aero и прочие визуальные эффекты, вредные нашему делу, но работает шустро.
Проброс USB сделал грубо и цинично:
xe vm-param-set other-config:pci=0/0000:02:00.0,0/0000:02:00.1,0/0000:00:1a.0,0/0000:00:1d.0 uuid=d103a91d-5c38-844f-14d5-64b3c495eb08
То есть пожертвовал виртуалке USB контроллеры. С другой стороны, Xen пока без них обойдется.
Что еще? Поставил XenCenter, Xen нормально администрится (кто бы сомневался). Внешний USB-диск, естественно, тоже нормально прицепляется. Теперь надо понять, как пробрасывать CD-ROM.
К сожалению, ничего не вышло у меня с USB Passthrough, равно как и со справедливо упомянутым в комментариях Xen VGA Passthrough (Scraelos), потому как нет под XCP файла «/etc/xen/ cfgfile». Как прописать необходимые настройки с помощью xe — я не разобрался. Если знатоки Xen помогут, буду очень признателен.
Update 06.02.2012:
dom0 на IGD пересаживаться отказался в категорической форме. Кроме того, повторил попытку пробросить primary VGA adapter — без толку. Вернулся к прежней конфигурации адаптеров.
Уперся в проблему с пробросом CD(DVD)-Writer. CD-ROM пробрасывается штатно, но только RO, а мне надо RW. По этому поводу нашел 2 рекомендации: воткнуть и пробросить отдельный SATA контроллер и использовать USB CD/DVD-Writer (благо USB пробрасывается). К сожалению, даже эти (имхо, костыльные) решения у меня на данный момент не заработали. Контроллер пробрасываться отказался. Попытка подключить штатный SATA CD/DVD привод через переходник USB-SATA ни к чему хорошему не привела. Продолжаю опыты.