根据这篇文章:https ://www.linux-kvm.org/page/USB 我可以创建一个磁盘映像并将其作为 USB 驱动器附加到我正在运行的 VM 上。
我试过这个,通过qemu-monitor-command
选项virsh
,但不知何故,无论我把img
文件放在哪里,它都无法访问!
$ sudo virsh qemu-monitor-command --hmp MyVM1 'drive_add 0 id=my_usb_disk,if=none,file=/tmp/usb.img'
Could not open '/tmp/usb.img': Permission denied
$ ls -l /tmp/usb.img
-rwxrwxrwx 1 libvirt-qemu kvm 8388608000 Apr 16 19:02 /tmp/usb.img
除非我运行这个,否则我认为我做不到device_add
?!
这是我的 qemu 版本(在 Bionic - 18.04 上):
$ qemu-system-x86_64 --version
QEMU emulator version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.4)
有没有其他方式(比如libvirt
XML)可以将原始图像附加为 USB 驱动器?(我在 libvirt 文档中搜索,找不到任何示例)
我在这里想念什么?
- 谢谢
您没有概述这样做的原因,在帮助之前我想让您知道在大多数情况下“连接为 USB”是一个错误的决定,大多数其他方式(virtio 磁盘、scsi 磁盘、直通...)很多最好将块设备(如果由文件或真实支持)传递给来宾。将 USB 传递给访客通常仅用于将真实设备传递给访客。
但是你可能有一个特定的测试,所以现在让我假设这里使用 USB 是有原因的 :-) 如果你需要一个图像作为 USB 磁盘,有两件事要做。
首先,如果你使用 libvirt,你也可以在这里使用它,而不仅仅是传递你的命令。它为您完成最复杂的工作(这就是它的用途):
当然,您可以将其转换为 XML(或直接使用 XML)以获得更编程的方法,但上述方法可以正常工作。
几秒钟后,您需要了解常见和不常见的路径。如果您只是碰巧将文件附加到 qemu,它将被 apparmor 隔离阻止 - 请参阅服务器指南中的部分。您需要告诉 libvirt 您使用什么路径以使其允许该路径。在我上面的示例中,一切都已为您完成并且可以正常工作。定义了一组路径,所有这些都可以自动发生,例如 /var/lib/libvirt/images + 告诉 libvirt 你用 attach-disk 做什么就是其中之一。
如果需要让它在其他路径上运行,您需要额外的 virt-aa-helper 规则
/etc/apparmor.d/local/usr.lib.libvirt.virt-aa-helper
。如果您进一步“坚持”必须通过 libvirt 手动执行此操作,则需要添加一条规则,允许来宾将给定路径/文件添加到 /etc/apparmor.d/libvirt/libvirt- 然后重新加载该配置文件(或重新启动来宾)。然后将允许 qemu 访问该路径。