将 USB 驱动器直接映射到 libvirt KVM 虚拟机?

And*_*inn 9 libvirt kvm-virtualization

我正在搜索有关使用 libvirt 将现有驱动器(USB 驱动器)映射到 KVM 虚拟机的信息。我一直在浏览http://libvirt.org/formatstorage.html#StoragePoolTarget。但我不太明白将现有设备暴露给 VM 需要哪些选项(或者甚至可能的话)。

从我正在阅读的target内容来看,该元素期望path机器上的文件夹中有一个元素来存储基于文件的图像。可以是path这样的设备/dev/sdc1吗?用typeraw

ned*_*edm 9

查看“USB 直通” | 使用来自 Edubuntu wiki 的本页的Libvirt 部分。更多信息在这里这里

如果您不打算在来宾运行时热插拔 USB 驱动器,您还可以尝试添加一个部分,如

<disk type='block' device='disk'>
  <driver name='qemu' type='raw'/>
  <source dev='/dev/sdb'/>
  <target dev='sdb' bus='scsi'/>
</disk>
Run Code Online (Sandbox Code Playgroud)

到您的 VM 的 xml 定义文件。只需更改源 dev 以匹配插入 USB 时分配给您的 USB 的内容。但是,如果添加或删除其他设备,您不能保证 USB 的 dev 分配会在重新启动后继续存在,因此我建议使用代替上面的第一个链接。

如果链接消失,这里是链接文档的相关 USB 直通部分:

使用 Libvirt

启动了一个预先存在的虚拟机

virsh start maverick2
Run Code Online (Sandbox Code Playgroud)

插入 USB 驱动器
找到了使用的 USB 地址lsusb,这给了我
{{ Bus 002 Device 006: ID 1058:1023 Western Digital Technologies, Inc. }}}

定义了一个带有设备信息的 xml 文件:

<hostdev mode='subsystem' type='usb'> <source> <vendor id='0x1058'/> <product id='0x1023'/> </source> </hostdev>
将 USB 驱动器传递给虚拟机

sudo virsh attach-device maverick2 /tmp/a.xml
Run Code Online (Sandbox Code Playgroud)

但是,这不适用于启用 apparmor。您必须禁用 apparmor,或添加

/dev/bus/usb/*/[0-9]* rw,
Run Code Online (Sandbox Code Playgroud)

要么/etc/apparmor.d/libvirt-qemu(这使所有客人都可以完全访问物理主机设备)或

/etc/apparmor.d/libvirt/libvirt-<uuid>
Run Code Online (Sandbox Code Playgroud)

这将只给一位客人访问。(感谢 jdstrand 帮助解决这个问题。)