在来宾虚拟机 Libvirt 中执行命令

arp*_*shi 5 kvm virtual-machine qemu iostat libvirt

是否可以使用 libvirt 或 virsh 在来宾 VM 内为 eg:iostat 执行命令。我想找出来宾 vm 的 IOPS 但使用 libvirt java api 我无法获得 vm 的 IOPS,因此另一种方法将是在来宾虚拟机中执行类似 iostat 的命令并记录读数。

cas*_*cas 3

  1. 如果您为虚拟机设置了虚拟串行控制台,则可以使用该virsh console命令连接到它。

    您必须使用expect脚本使用用户名和密码登录,运行命令,提取输出,然后注销。

    但请注意,这expect是一种单一用途的语言,在我看来,如果您还不了解它,那么学习/使用它就没有意义。您最好将学习它所需的时间投入到学习通用语言(如perl或 )中python

    这还有一个额外的好处,即使用s或s模块比使用其本身要容易得多。 与或 的功能相比,从会话中提取数据的能力非常有限且原始。perlExpect.pmpythonpexpectexpectexpectperlpython

    顺便说一句,您提到了libvirtJava API - 快速谷歌搜索显示至少有两种不同的类似expectJava 库的实现。可能还有更多。

    https://github.com/ronniedong/Expect-for-Java

    https://github.com/Alexey1Gavrilov/ExpectIt

    我不是 Java 程序员,从未使用过其中任何一个,不知道它们是否有任何好处,并且无法推荐其中一个。

  2. 或者,如果虚拟机具有带 IP 地址的网络接口并且已sshd安装(或者您可以安装),则您ssh可以像访问任何其他主机一样进入该虚拟机。到目前为止,这是实现您想做的事情的最简单、最好的方法。

  • 虚拟机管理程序可以完全访问虚拟机,但不完全了解来宾操作系统的工作原理。对于某些类型的虚拟化,访问级别太低,无法安全地执行系统调用或将命令传递到正在运行的 shell 等操作。 (2认同)