virsh snapshot-create-as 给出“无法执行 QEMU 命令`transaction`”

S.L*_*rth 5 kvm snapshot

我有一个托管多个虚拟机的 Ubuntu 12.04 服务器。我想使用快照机制备份这些 VM。
这些快照的目的是在外部设备上进行备份。我目前正在尝试在 /var/tmp 中简单地创建备份。

当我打字

sudo virsh snapshot-create-as test-vm --memspec /var/tmp/test-vm-snapshot
Run Code Online (Sandbox Code Playgroud)

我收到消息

错误:内部错误:无法执行 QEMU 命令“事务”:无法打开“/var/lib/libvirt/images/test-vm.img”:权限被拒绝

我试图通过临时授予读/写权限 (chmod og+rw) 来解决这个问题,但随后我收到了相同的消息。

我读到这是由于 AppArmor 造成的,这似乎得到了系统日志的确认。但是,如果我暂时停止 AppArmor,我仍然会收到相同的错误消息,以及 syslog 中的相同条目。

如何创建 VM 到特定文件的内部备份?

S.L*_*rth 11

为了让 AppArmor(暂时)脱离图片,我使用了aa-complain,它告诉 AppArmor 不要在某些进程上强制执行它的策略,但仍然在日志中输入一个条目。这需要sudo apt-get install apparmor-utils.

首先,我曾经sudo aa-status查看哪些进程处于“强制”模式。这些相关进程是 libvirtd 和 VM。然后我将这些设置为“抱怨”模式并制作了快照:

sudo aa-complain /usr/sbin/libvirtd
sudo aa-complain /etc/apparmor.d/libvirt/libvirt-20683be9-691f-42f2-9fd7-7f44ab423c1e
sudo virsh snapshot-create-as test-vm --memspec /var/tmp/test-vm-snapshot
Run Code Online (Sandbox Code Playgroud)

这样,在/var/tmp 中创建了一个文件“test-vm-snapshot”。

之后,我曾经sudo aa-enforce将这些进程重新置于“强制”模式。

但是为什么/etc/init.d/apparmor stop没有帮助,而更微妙的帮助,aa-complain我仍然无法理解......

  • 谢谢,完美运行。为了向其他读者澄清,可以通过运行 `virsh dumpxml <vm-name> | 来获取有关 VM 的来自 `sudo aa-complain /etc/apparmor.d/libvirt/libvirt-<UUID>` 的 UUID。grep uuid`。 (3认同)