启动虚拟机失败,libvirt/qemu 权限被拒绝

启动虚拟机失败,libvirt/qemu 权限被拒绝

这是我第一次问问题,所以如果我能做得更好,请告诉我。

我不太擅长 Linux 方面的事情,到目前为止,我可以按照指南进行操作,遇到的问题可以通过一些搜索轻松修复,但现在我陷入了困境。我有一个运行 Debian Buster 的小型家庭服务器。我在那里运行了几个带有 libvirt/qemu 的虚拟机。我的问题是 nextcloud 实例:

昨天我的系统断电了。重启后到目前为止一切正常。然后我想启动我的虚拟机,除了一个之外,所有虚拟机都启动得很好。我收到以下错误:

sudo virsh start mydomain 
error: Failed to start domain mydomain 
error: internal error: process exited while connecting to monitor: 
qemu-system-x86_64: -realtime mlock=off: warning: '-realtime mlock=...' is deprecated, please use '-overcommit mem-lock=...' instead 
2022-10-01T13:31:17.160445Z qemu-system-x86_64: -drive file=/path/to/mydomain.snapshot1.snapshot2,format=qcow2,if=none,id=drive-virtio-disk0: 
Could not open backing file: Could not open '/path/to/mydomain.snapshot1': Permission denied

我按照本指南创建了外部快照https://fabianlee.org/2021/01/10/kvm-creating-and-reverting-libvirt-external-snapshots/

我首先认为虚拟机出了问题,所以我尝试恢复到旧的快照(我在断电前只有几个小时)

根据指南,我使用以下步骤进行恢复:

# edit hda path back to original qcow2 disk
virt-xml $thedomain --edit target=$targetdisk --disk path=$backingfile --update

# validate that we are now pointing back at original qcow2 disk
virsh domblklist $thedomain

# delete snapshot metadata
virsh snapshot-delete --metadata $thedomain $snapshotname

# delete snapshot qcow2 file
sudo rm $pooldir/$thedomain.$snapshotname

# start guest domain
virsh start $thedomain

但之后我仍然遇到相同的错误,只是指向快照文件。此外,当我尝试启动虚拟机时,快照文件的所有者和组从“libvirt-qemu”更改为“root”。

我试图寻找问题,但找不到很多。我发现的最接近的是如何配置 AppArmor 以便 KVM 可以启动具有备份文件链的 guest 虚拟机

所以它可能与 apparmor 有关。但我不知道在功率损失后发生了什么变化。但无论如何,我尝试了这些帖子中的建议,但没有效果。

但也有可能是通过更新进行了某些更改,并且仅在重新启动后才生效。到目前为止,服务器运行得很好,并且没有经常关闭。

抱歉文字很长。

预先感谢您的任何帮助

答案1

我找到了一个修复/解决方法。

我添加了虚拟机映像的存储路径

/etc/apparmor.d/abstractions/libvirt-qemu

像这样

/path/to/my/files/* rwk,
/path/to/my/files/ rwk,

现在虚拟机再次启动。但我仍然不知道,最初是什么导致了这个问题。

恢复到旧快照不起作用与我对快照的命名以及通过 libvirt-aa-helper 进行的错误解释有关 - >错误的 apparmor 配置文件和/或虚拟机的 .xml 文件中的错误解释。

当我有时间时,我会深入挖掘。但现在我很高兴它再次发挥作用。

相关内容