- Проброс нескольких одинаковых устройств USB в виртуальную машину libvirt+QEMU
- Конфигурация.
- Описание проблемы.
- Неудачное решение
- Окончательное решение.
- проброс USB: Host —> Guest
- элементарно, но не скажу как
- Linux kvm проброс usb
- Проброс USB устройства внутрь гостевой OS, используя KVM
- Находим, на какой шине находится устройство USB:
- Создаем конфиг для устройства, следующего плана (с учетом данных, полученных ранее):
- Подключаем к VPS:
Проброс нескольких одинаковых устройств 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: Host —> Guest
Здравствуйте. Не могу пробросить USB-фляху из хостовой системы (Ubuntu Server 16.04) в гостевую (Windows 7, Kubuntu 16.04 etc.). Подключаюсь удалённо через virt-manager (1.3.2) по SSH как обычно: добавить оборудование —> USB Host Device —> выбираю подключенную флешку —> Завершить. Слева в перечне железа появляется новое устройство: USB 0781:5567. Загружаю виртуалку — ничего «не видно», никаких новых устройств.
Что я делаю не так или делаю не полностью? Это вообще возможно?
Не устаю повторять, типичный случай, когда обмазываются гуйками и вообще не рубят как работает qemu-kvm.
Это не только возможно, но и элементарно. Хочешь устройство, хочешь порт, а хочешь и целый хаб. Как? Почитай документацию qemu-kvm, а не костылей.
Ничего не надо пробрасывать. В окне запущенной виртуальной машины делаешь «виртуальная машина -> переадресация USB» выбираешь свою флэшку.
элементарно, но не скажу как
Очень информативно с вашей стороны. Если бы документация дала ответ на мой вопрос, я бы здесь его не задавал. И о каких костылях речь, о virt-manager? Так это продукт RedHat. Если это костыль, следовательно qemu/kvm — тоже «костыль»?
А вот мой файл, который соответствует документации для проброса:
$ sudo cat /etc/libvirt/qemu/win7.xml | grep -i «’subsystem’ type=’usb’» -A 6
В окне запущенной виртуальной машины делаешь «виртуальная машина -> переадресация USB» выбираешь свою флэшку.
Уточню. Подключаюсь через virt-manager удалённо по SSH. Если вставить флешку в компьютер, с которого подключаюсь, конечно «переадресация USB» работает. Но флешка вставлена в сервер, на котором крутятся виртуалки и она не отображается в списке предлагаемых для переадресации.
А вот мой файл
xml-лапша, привет из java мира
сравни, черт возьми, порт:
А вписывать-то это куда, после «qemu-system-x86_64-spice -enable-kvm» ? И так каждый раз? А всё остальное железо? И в результате командная строка длинной в километр?
Полный xml-конфиг виртуалки в студию — это раз. Два — как определяешь что ничего не видно в венде? А если загрузиться с live cd и проверить по lsusb?
Готовая виртуалка с Kubuntu. Добавлен USB Host Device в госте. Там же:
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Ну да, запускаешь файл виртуалки, например:
Вот команда запуска моей виртуалки:
Как видно строка:
присутствует. Но нет этого устройства в системе или оно не видно по какой-то причине.
зачем это здесь?
я незнаю почему virt-manager подставляет этот параметр, но с такой километровой командой, если вставить её в терминал, запускаться виртуалка не хочет:
опять костыли? Конечно не знаешь, ведь не ты делаешь, это всё равно, что позволить чему-то генерировать
/.bashrc, fstab и т.п., virt-manager и прочее что угодно могут тебе накостылять, наломать.
Для работы qemu-kvm вообще не нужны virt-manager, libvirt и прочее, только qemu-system-*.
Самый простой способ разобраться, дебажить и т.п. это начинать с простого:
Нет, я конечно понимаю, что в идеале, чтобы всё понимать, нужно вообще выпилить и выбросить графику и сидеть в голом терминале. Но как если нужно сейчас и времени нет на дебаги и тем более постепенные доведения виртуалки до нужной кондиции?
Слушай, я сходил воткнул флэшку в сервер, сейчас подключился к серваку virt-manager-ом, добавил usb host device и виртуальная винда отлично увидела флэшку. virt-manager 1.2.1
Нет, просто чтобы разобраться что не так и почему не работает (это ведь смысл треда?) — нужно понимать, как работает qemu.
Я не могу найти соотв. пример, т.к. у меня температура 38.6 сейчас, но я думаю ты меня понимаешь.
Нет ничего проще qemu, а в терминал идут выхлопы, возможно там найдешь интересующую тебя инфу почему не работает.
Ты уже времени больше потратил на этот тред, чем запуск твоей машины вручную, серьезно. На порядок.
У меня virt-manager 1.3.2, откатиться что-ли.
virt-manager вполне себе удобный инструмент, а вся эта дичь с прямыми вызовами qemu нужна была мне один раз — проброс видеокарты в ВМ.
Ты заметил что ты не потратил время на изучение и в итоге делал это гораздо дольше, чем если бы ты прочел ман? Хорошо в тред зашел slon , а если бы у тебя инета небыло?
Порой конечно вхождение слишком тяжело дается и приходиться начинать с метода тыком. Пока тыкаешь узнаешь как примерно хотя бы рабоатет.
мой virt-manager про usb-флэшку в xml-конфиг добавил вот такой блок:
Какой конкретно мэнуал я должен был прочесть? Везде конкретно указывают править XML-файл с настройками виртуалки. Это я хорошо прочёл. И что я делал гораздо дольше и по сравнению с чем? Моя проблема до сих пор не решена. Что с чем сравнивать? P.S. И да, я рад, если вам хорошо от того, что кто-то зашёл в ветку.
У меня то же самое добавляет. Так, сейчас буду откатываться с PPA.
Проблема не решена? Ошибки есть при старте? Девайс точно правильный пробрасываешь?
Если у тебя такой же конфиг генерит, то, по идее, откат вирт-манагера ничего не даст.
Алсо ты можешь их пробрасывать на лету.
Глянь мои скрипты, вдруг что-то полезное найдешь. Там есть add_mouse.sh и keyboard https://github.com/matrixd/kvm
ТС вроде как русским языком написал, что он хочет virt-manager-ом через libvirt.
ок ок, сваливаю из треда. Удачи вам там с угадыванием проблемы. Суде по всему ТС еще и логи не хочет смотреть.
Cпасибо, буду иметь ввиду и использую.
Там не только он, также и qemu, libvirt.
Так это продукт RedHat. Если это костыль, следовательно qemu/kvm — тоже «костыль»?
virt-manager управляет частью фичеров libvirt, который сам по себе не qemu-kvm а библиотека которая его (и другие гипервизоры) контролирует. Выше пропагандируют отбросить библиотеку и рулить qemu-kvm напрямую, что, имхо — полное красноглазие. Но вот понимать как что работает тем не менее надо. Простой дебаг — запустить машину, посмотреть на ps -ef |grep qemu ее реальный cmdline и сравнить с адресами usb из dmesg
люди отказались от такой наркомании почти 10 лет назад. libvirt-ом надо пользоваться, просто надо понимать что делаешь
Выше пропагандируют отбросить библиотеку и рулить qemu-kvm напрямую, что, имхо — полное красноглазие. Но вот понимать как что работает тем не менее надо.
Простой дебаг — запустить машину, посмотреть на ps -ef |grep qemu ее реальный cmdline и сравнить с адресами usb из dmesg
Сравнил же. Там какая-то другая ошибка вылезает, если запускать из терминала, на файл сокета, который действительно отсутствует. Такое громадное кол-во опций дуплить очень долго придётся.
для начала просто запустить virt-manager локально, хотя бы через ssh -XY, a не подключаться удаленно локальным virt-manager-ом
Локально тоже ничего не происходит, когда я запускаю лежащую на моём локальном компе виртуалку и добавляю в неё USB Host Device. Припоминаю, однажды я уже это пробовал, оно вообще никогда у меня не работало. Поэтому я не понимаю что делать дальше.
dmesg или какие конкретно смотреть?
Логи libvirt, выхлоп qemu monitor
Есть лог локальной виртуалки в /var/log/libvirt/qemu/, с которой сейчас пробую. Но там много всего. Как там можно разобраться? Как запустить этот qemu-monitor я не в курсе.
там как раз оно, логи нетривиальные, но если есть проблемы на уровне qemu то они видны.
вообще, где lsusb с хоста?
Немножко жаль тебя 🙂
я вообще не вижу соответствия между lsusb и адресами в domxml.
Ну, лог я взял из хоста, а lsusb выполнял в госте. Правильно?
Я же писал — lsusb на хосте
ну вроде все правильно, если не работает то может быть флешка уже занята хостовой OS, или же в дистре баг.
Что касается монтирования, то она точно не примонтирована — просто вставлена в порт. Что касается бага, я тоже так подозреваю и подозревал давно, потому что оно у меня ещё где-то год-два назад не работало. Тогда даже заводил репорт на родном трекере virt-manager`а, но его благополучно закопали, мотивируя это тем, что у всех работает — только у меня нет. В общем не могли подтвердить. Поэтому на сей раз завёл тут: https://bugs.launchpad.net/ubuntu/ source/virt-manager/ bug/1603558
В общем спасибо всем за внимание и посильную помощью. Остаётся теперь надеяться на разрабов. А мне это особенно важно, поскольку нужно HASP-ключ пробросить для 1C-баз.
Источник
Linux kvm проброс usb
DirectAdmin — это удобная панель управления хостингом. Легкость в настройке, легкость в использовании!
ДиректАдмин — самая быстрая и нересурсоемкая панель из всех существующих коммерческих панелей управления для хостинга. Бесплатные и регулярные обновления версии панели DirectAdmin на протяжении всего времени ее использования заметно выделяют ее среди других.
Проброс USB устройства внутрь гостевой OS, используя KVM
Появилась задача пробросить USB флешку в гостевую FreeBSD. На сервере используется виртуализация KVM.
После поисков и чтения устаревших постов на форумах, решение таки было найдено в официальной документации по libvirt. Отсюда вывод, начинать надо именно с нее.
USB and PCI devices attached to the host can be passed through to the guest using the hostdev element. since after 0.4.4 for USB and 0.6.0 for PCI (KVM only)
Находим, на какой шине находится устройство USB:
# lsusb
Bus 007 Device 002: ID 058f:6387 Alcor Micro Corp. Transcend JetFlash Flash Drive
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Создаем конфиг для устройства, следующего плана (с учетом данных, полученных ранее):
Подключаем к VPS:
В нашем случае примерно так:
# virsh attach-device vm300 usb.device.xml
Где vm300 — это имя VM (VPS) или домен, как принято называть. А usb.device.xml — это конфиг в формате XML с данными USB устройства.
Таким образом устройство сразу же должно стать доступным внутри гостевой OS. Чтобы закрепить данные, т.е. обновить XML конфиг самой виртуальной машины, делаем:
# virsh dumpxml > /full/path/to/ .xml
# virsh define
Что для нашего пример выглядит так:
# virsh dumpxml vm300 > vm300.xml
# virsh define vm300.xml
Источник