![virsh snap-create-as 给出“无法执行 QEMU 命令‘transaction’”](https://linux22.com/image/1121259/virsh%20snap-create-as%20%E7%BB%99%E5%87%BA%E2%80%9C%E6%97%A0%E6%B3%95%E6%89%A7%E8%A1%8C%20QEMU%20%E5%91%BD%E4%BB%A4%E2%80%98transaction%E2%80%99%E2%80%9D.png)
我有一台 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
却有帮助,这仍然超出了我的理解范围......