virsh snap-create-as 给出“无法执行 QEMU 命令‘transaction’”

virsh snap-create-as 给出“无法执行 QEMU 命令‘transaction’”

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

当我输入

sudo virsh snapshot-create-as test-vm --memspec /var/tmp/test-vm-snapshot

我明白了

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

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

我读到这是由于 AppArmor 造成的,系统日志似乎也证实了这一点。但是,如果我暂时停止 AppArmor,我仍然会收到相同的错误消息,并且系统日志中会出现相同的条目。

如何创建虚拟机到特定文件的内部备份?

答案1

为了暂时摆脱 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

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

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

但为什么/etc/init.d/apparmor stop没有帮助,而更微妙的方法aa-complain却有帮助,这仍然超出了我的理解范围......

相关内容