QEMU/libvirt:客户虚拟机无法正确关闭

QEMU/libvirt:客户虚拟机无法正确关闭

自从我最近从 ubuntu 18.04 升级到 20.04 后,我的客户虚拟机无法正常关闭。以前使用 ubuntu 18.04 时,我没有遇到这些问题。

我有两个客户虚拟机 - 一个运行 ubuntu 18.04 的“标准”客户虚拟机,另一个带有 GPU 直通功能且带有实际物理 SSD(而不是磁盘映像文件)的客户虚拟机,运行 Windows 10。

当我尝试从 geust VM 中关闭它们时,它们都无法正常关闭。我的 ubuntu VM 启动了关闭 - 我可以看到关闭期间的正常消息。我看到的最后消息是

[OK] Stopped target Local File Systems (Pre).
[OK] Stopped Remount Root and Kernel File Systems.
[OK] Stopped Create Static Device Nodes in /dev.
[OK] Reached target Shutdown.
[OK] Reached target Final Step.
Starting Power-Off...
[44.540351] systemd-shutdown[1]: Failed to wait for process: Protocol error

然后客户虚拟机就一直卡在那里,虚拟机管理器中的状态显示“正在关闭”

如果我尝试使用该virsh destroy命令强制关机,我会收到错误

error: Failed to destroy domain ubuntu18.04
error: Failed to terminate process 4736 with SIGTERM: permission denied

我的 Windows VM 也发生了类似的事情。Windows 开始关机,连接到直通 GPU 的屏幕变黑,我回到主机系统。但是,我的虚拟机管理器中的状态停留在“正在关机”状态。

在将主机系统从 ubuntu 18.04 升级到 20.04 时,系统询问我是否要替换一些配置文件或保留我手动调整过的旧配置文件。我记得我手动调整过旧配置文件,所以会保留它们,因为我不想丢失我的自定义设置/配置。保留旧配置文件已经导致我遇到https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/1833040我通过手动编辑 apparmor 抽象文件中的一行解决了这个问题,如错误修复中所述。

因此,我怀疑升级过程中未更新的 ubuntu 18.04 中的一些旧配置文件导致了我的问题。你同意这个观点吗,还是更有可能是其他原因?如果旧配置文件是最可能的原因,我该如何获取新更新的 ubuntu 20.04 配置文件?

答案1

谢谢 Christian Ehrhardt,apparmor 确实是罪魁祸首。我注意到,libvirt-qemu 的新默认抽象已/etc/apparmor.d/abstractions/libvirt-qemu.dpkg-dist在升级过程中保存,因此我可以将新默认抽象中的更改与我的自定义修改合并,而无需重新安装 apparmor。

现在我的虚拟机又能正常关闭了。

相关内容