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

the*_*ist 14 networking bridge qemu kvm-virtualization

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

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

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

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

daf*_*aff 16

这个怎么样(例如vnet13):

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

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

  • 我使用这个轻微的修改来列出哪个 vm 具有哪个接口:`for vm in $(virsh list | grep running | awk '{print $2}'); 做 echo -n "$vm:"; virsh dumpxml $vm| grep -oP "vnet\d+" ; 完成` (5认同)

dya*_*sny 6

试试看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'/>
Run Code Online (Sandbox Code Playgroud)

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


小智 6

跑步virsh domiflist myVM此命令将列出与 VM myVM相关的所有接口。

 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
Run Code Online (Sandbox Code Playgroud)