我希望 qemu 启动在用户空间运行的机器,但在开发过程中,我想使用 向它发出命令virtsh
。(请注意,这并不是因为我需要 virtsh,而是 QEMU 开发人员只公开了与 virtsh 一起使用的 API。我想我还可以问“如何通过命令行而不是交互式 qemu 监视会话来操作正在运行的 QEMU 中的快照?”这个 virtsh 问题遵循了 qemu 文档的建议)
手册没有明确说明如何使用和将 qemu 附加到 libvirt 实例qemu:///session
,qemu+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 的文档。