有没有办法确定哪个虚拟接口属于 kvm 主机中的虚拟机?

有没有办法确定哪个虚拟接口属于 kvm 主机中的虚拟机?

我正在使用桥接网络的 qemu/kvm。主机中有多个没有 IP 的“vnetX”网络接口。我正在寻找一种方法来知道哪些 vnetX 属于虚拟机。

我尝试将这些接口上的 MAC 地址值与虚拟机上的 MAC(或定义它们的 XML)进行匹配,但不匹配。

有 brctl show 显示属于桥的 vnet 接口,但这不是有用的信息。

有没有办法知道这种关系?谢谢!!

答案1

这个怎么样(例如vnet13):

$ VNET=vnet13; for vm in $(virsh list | grep running | awk '{print $2}'); do virsh dumpxml $vm|grep -q "$VNET" && echo $vm; done

这里我们使用virsh dumpxml显示有关虚拟机的动态属性,这些属性在 /etc/libvirt/qemu/foo.xml 中虚拟机的静态 XML 定义中不可用。哪个vnetX接口连接到哪个虚拟机就是这样一个动态属性。虚拟机的 MAC 地址也是如此。

答案2

尝试一下virsh dumpxml $domain,你会看到类似这样的内容:

  <interface type='network'>
  <mac address='52:54:00:9d:9d:10'/>
  <source network='default'/>
  <target dev='vnet1'/>
  <model type='e1000'/>
  <alias name='net1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>

alias name是 qemu-kvm 命令行中使用的内容,因此如果您ps -ef |grep qemu|grep net1从我的示例运行,您将看到此界面使用的实际命令语法。

答案3

运行virsh domiflist myVM。此命令将列出与 VM 相关的所有接口我的虚拟机

 Interface   Type      Source      Model    MAC
---------------------------------------------------------------
 vnet0       bridge    mgtbridge   virtio   52:54:00:3c:f3:df
 vnet1       bridge    habridge    virtio   52:54:00:8a:b3:b6
 -           hostdev   -           -        52:54:00:b0:eb:b7
 -           hostdev   -           -        52:54:00:44:26:94

答案4

根据@daff 的回复:

for vm in $(virsh list | grep running | awk '{print $2}'); do echo "$vm: " && virsh dumpxml $vm | grep  "vnet" | sed "s/[^']*'\\([^']*\\)'[^']*/\\t\\1/g"; done

输出示例:

vm1:
    vnet0
vm2:
    vnet1
vm3:
    vnet2
vm4:
    vnet3
    vnet4
vm5:
    vnet5

相关内容