从 QEMU 到 libvirt(virsh) - 添加 USB 端口

from QEMU to libvirt(virsh) - add USB-port

我想将以下行从 qemu optiones 翻译成 libvirt xml。

-qemu-system-x86_64
-...
-usb -device usb-host,bus=usb-bus.0,hostbus=<bus>,hostport=<port> 

这会为虚拟机添加一个物理 USB 插头。大多数示例都针对 usb-bus/deviceID 进行了显示和详细记录,不适用于此解决方案。

编辑: 工具virsh domxml-from-native qemu-argv MyArgV.sh有如下解决方法:

<qemu:commandline>
  <qemu:arg value='-device'/>
  <qemu:arg value='usb-host,bus=usb-bus.0,hostbus=1,hostport=10'/>
</qemu:commandline>

但这并不是我真正想要的,因为它绕过了libvirt系统。那么如果原生工具找不到任何解决方案,是否有通用的 libvirt 解决方案来传递 USB 端口?

我也尝试过使用 virt-manager GUI 来添加 USB 端口,但我找不到任何可行的方法。

是否有可能制作 运行 qemu 机器的快照并使用 libvirt 即时复制它?

我找到了 this 网页。但是这个描述的是如何 assemble 虚拟机中的 USB 端口层次结构,而不是将主机端口转发到虚拟机。

不幸的是,它没有记录在案,但您可以使用以下语法根据总线 + 设备编号分配 USB 设备:

<hostdev mode='subsystem' type='usb' managed='no'>
  <source>
    <address bus='1' device='NNN'/>
  </source>
</hostdev>

不幸的是,这里的设备号是/dev/usb/bus/NNN号,每次插入时都会改变。目前还不支持基于稳定的主机端口选择设备。

您还可以从您的 USB 设备中找出供应商和产品 ID(通过使用 lsusb),然后使用此信息将您的 USB 设备连接到您的 KVM:

$ lsusb
...
Bus 002 Device 018: ID 03f0:4217 Hewlett-Packard EWS CM1015
...
<hostdev mode='subsystem' type='usb'>
  <source>
    <vendor id='0x03f0'/>
    <product id='0x4217'/>
  </source>
</hostdev>

发现于 https://rolandtapken.de/blog/2011-04/how-auto-hotplug-usb-devices-libvirt-vms-update-1

但是,如果您有多个此类 USB 设备连接到主机,这将不起作用。