我正在使用桥接网络的 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