如何将独立的 QEMU 会话连接到 libvirt 用户会话?

如何将独立的 QEMU 会话连接到 libvirt 用户会话?

我希望 qemu 启动在用户空间运行的机器,但在开发过程中,我想使用 向它发出命令virtsh。(请注意,这并不是因为我需要 virtsh,而是 QEMU 开发人员只公开了与 virtsh 一起使用的 API。我想我还可以问“如何通过命令行而不是交互式 qemu 监视会话来操作正在运行的 QEMU 中的快照?”这个 virtsh 问题遵循了 qemu 文档的建议)

手册没有明确说明如何使用和将 qemu 附加到 libvirt 实例qemu:///sessionqemu+unix:///session它只是假设您将让 libvirt 启动所有钩子,因此它没有解释任何内容。

思考是解决方案,但qemu:///embed极其缺乏细节,而且对非 libvirt 开发人员来说过于晦涩https://libvirt.org/drvqemu.html#embedded-driver

$ ps aux | grep qemu
gcb    ...    qemu-system-x86_64 -machine pc...

$ virsh -c qemu+unix:///session list --all
 Id   Name   State
--------------------

$ virsh -c qemu:///session list --all
 Id   Name   State
--------------------

$ id
uid=1000(gcb) ...

libvirt 究竟如何查找用户会话 qemu?我如何才能简单地使用 virtsh 命令与来自同一用户的正在运行的 qemu 进行交互(如上所示)?

答案1

希望我错了,但在阅读了他们的文档后:

答案是,不可能。

libvirt 是一个 redhat+gnome 项目。因此,它的设计很糟糕(就像 systemd 一样,它从上到下都被推行)。手册中充满了居高临下的段落,他们没有解释他们偷工减料,现在他们担心任何超出他们控制范围的行为都会导致错误,而是责骂用户,说他们没有做任何与获取正在运行的虚拟机的 PID 等基本事情有关的事情。手册的更深层部分是指向 gnome.org 上个人博客的 404 链接。

关于如何为新虚拟机编写配置 xml 的文档很少。您应该依赖 GUI 程序或更糟糕的文档化的黑客脚本 virsh-install。它们都假设您已完成安装,并且系统专门用于运行 libvirtd 和其他服务,并且除非您启动了这些服务,否则将完全拒绝执行任何操作(甚至生成 xml 模板)。他们曾经有一个从 qemu 参数到 xml 的便捷转换器,但那早已不复存在(已经达到了吸引其他项目贡献者的目的)。

除非你的雇主使用 libvirt,否则请避免使用它。目前请继续使用 qemu 前端。

编辑:也许是一种解决方法,目前尚未测试:

virt-install --import --connect qemu://session --qemu-commandline '-m ...' 在没有系统范围的 libvirtd 的情况下启动 qemu 机器。

编辑 2:不,这最终将与虚拟机管理程序交互。此外,截至 2024 年,他们qemu-commandline从文档中删除了 param 的文档。

相关内容