我正在寻找有关使用 libvirt 将现有驱动器(USB 驱动器)映射到 KVM 虚拟机的信息。我一直在研究http://libvirt.org/formatstorage.html#StoragePoolTarget。但我不太明白需要什么选项才能将现有设备公开给虚拟机(或者是否有可能)。
据我所知,该target
元素期望将path
元素连接到计算机上的文件夹以存储基于文件的图像。可以是诸如 ?之path
类的设备,/dev/sdc1
带有?type
raw
答案1
请参阅“USB 直通 | 使用 Libvirt”部分这一页来自 Edubuntu wiki。更多信息这里和这里。
如果你不打算在客户机运行时热插拔 USB 驱动器,你也可以尝试添加如下部分
<disk type='block' device='disk'>
<driver name='qemu' type='raw'/>
<source dev='/dev/sdb'/>
<target dev='sdb' bus='scsi'/>
</disk>
到您的虚拟机的 xml 定义文件。只需更改源设备以匹配插入时分配给您的 usb 的设备即可。但是,如果添加或移除其他设备,您无法保证 usb 的设备分配在重启后仍然有效,因此我建议使用上面第一个链接中的方法。
如果链接消失,这里是链接文档的相关 USB 直通部分:
使用 Libvirt
启动一个预先存在的虚拟机
virsh start maverick2
插入 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
但是,如果启用了 apparmor,则此方法无效。您必须禁用 apparmor,或者添加
/dev/bus/usb/*/[0-9]* rw,
(让
/etc/apparmor.d/libvirt-qemu
所有来宾都能完全访问物理主机设备)或/etc/apparmor.d/libvirt/libvirt-<uuid>
这将只允许一位访客访问。(感谢 jdstrand 的帮助。)