是否可以使用 libvirt 或 virsh 在来宾虚拟机内执行例如:iostat 的命令。我想找出来宾虚拟机的 IOPS,但使用 libvirt java api 我无法获取虚拟机的 IOPS,因此需要另一种方法将是在来宾虚拟机内执行类似 iostat 的命令并记下读数。
答案1
如果您为虚拟机设置了虚拟串行控制台,则可以使用该
virsh console
命令连接到它。您必须使用
expect
脚本使用用户名和密码登录,运行命令,提取输出,然后注销。但请注意,这
expect
是一种单一用途的语言,在我看来,如果您还不了解它,那么学习/使用它就没有意义。您最好将学习它所需的时间投入到学习通用语言(如perl
或 )中python
。这还有一个额外的好处,那就是你想做的将是很多
perl
使用Expect.pm
或python
的pexpect
模块比使用其本身更容易expect
。expect
从会话中提取数据的能力与 或perl
所python
能做的相比非常有限且原始。顺便说一句,您提到了
libvirt
Java API - 快速谷歌搜索显示至少有两种不同的expect
类似 Java 库的实现。可能还有更多。https://github.com/ronniedong/Expect-for-Java
https://github.com/Alexey1Gavrilov/ExpectIt
我不是 Java 程序员,从未使用过其中任何一个,不知道它们是否有任何好处,并且无法推荐其中一个。
或者,如果虚拟机具有带 IP 地址的网络接口并且已
sshd
安装(或者您可以安装),则您可以ssh
像访问任何其他主机一样进入该虚拟机。到目前为止,这是实现您想做的事情的最简单、最好的方法。