networking适​​配器到vmware的eth编号映射

我在ESXi 5.5上安装了6个e1000接口的ubuntu vm。 在创build虚拟机时,我为它们分配一个不同的networking,并启动它。

当我login到Linux时,我看到eth0-eth5,但顺序不是我所期望的。 我期望networking适配器1映射到eth0,networking适配器2映射到eth1等等

任何想法,为什么这是如此,如何解决它,请?

我学到的两种方法是:

  • 您可以查看每个NIC的vmwarenetworking设置上的MAC地址,并在控制台上执行ifconfig检查。

  • 如果你有六条线路断开其中的五个这种方式。 首先编辑configuration文件,并突出显示networking适配器1至5.在设置下,取消选中“连接”button。 然后:

     cd /sys/class/net grep "" eth0/* 

    查找载体处于1或0(零)状态。 处于1状态的那个是你要找的那个。 然后您可以分配所需的VLAN或IP。

    为每个列出的eth0,eth1,eth2等的网卡执行此操作

这两个操作都允许您查看MAC地址,但第二个操作允许您查看更多configuration详细信息。

我们也有这个问题。 我们假设它与vNIC所在的虚拟PCI插槽有关.Iirc,前三个vNIC没有问题,但是更多的顺序是奇怪的。

我们从来没有真正解决这个问题,因为我们很快就能摆脱这么多vNIC的虚拟机。

我不知道Ubuntu,但看看在/etc/udev/rules.d/下是否有一个名为“persistent”和“net”的文件。 从您的vNIC获取MAC地址,并将其映射到您select的ethX。 你应该find像这样的规则

 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:50:56:01:02:03", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" 

如果您希望MAC地址为00:50:56:01:02:03的vNIC为eth1,只需将NAME="eth0"更改为NAME="eth1"然后重新启动。

编辑:

今天,我部署了3个SCSI控制器和2个vNIC的虚拟机。 对于BIOS,第一个vNIC是NIC 2,第二个vNIC是NIC 1.我将vmx文件与另一个(2个vNICS,但只有1个SCSI控制器)进行了比较。 “正常”的虚拟机看起来像这样:

 ethernet0.pciSlotNumber = "192" ethernet1.pciSlotNumber = "224" 

“怪异”的虚拟机看起来像这样:

 scsi1.pciSlotNumber = "192" scsi2.pciSlotNumber = "224" ethernet0.pciSlotNumber = "256" ethernet1.pciSlotNumber = "1184" 

如您所见,额外的SCSI控制器占用vNIC在另一个VM中的插槽。 所以看起来真的和虚拟PCI插槽有关。

这在vmware下适用于我,这里经常有这些文件(可能需要vmware内核模块):

  • /sys/bus/pci/devices/0000:…/label
  • /sys/bus/pci/devices/0000:…/acpi_index

和这个synmlink:

  • /sys/bus/pci/devices/0000:…/firmware_node

文件标签包含一行文本,如: Ethernet0Ethernet1等,并按照OVF文件中的原始编号进行编号。

文件acpi_index有一个数字(可能是long int),sorting时的数字与OVF文件中接口的原始顺序相匹配,或者与VM中定义的顺序相匹配。

符号链接firmware_node的目的地的文件名部分也按照与原始OVF文件中的接口相同的顺序进行sorting。

例如../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:8b/device:8c

你可以在shell下使用readlink阅读。

最有用的可能是标签文件,因为它很容易提取名称的数字部分并将其用作设备名称。

你可以像这样阅读$dev的标签:

read label < /sys/bus/pci/devices/$dev/label

然后提取数字后缀,如下所示: ${label#Ethernet}

作为一个没有标签的对联,

read label < /sys/bus/pci/devices/$dev/label && echo ${label#Ethernet}

如果要处理所有设备以获得订单,则可以按照总线顺序读取以太网设备,如下所示:

lspci -D -mm | sed -n -e 's/ "Ethernet controller".*//;T;p'

那么你可以将它pipe入这个段来标签的前缀

while read dev ; do read label < /sys/bus/pci/devices/$dev/label ; echo ${label#Ethernet} $dev ; done

然后你可以sorting,并删除这样的标签: sort | sed -e 's/.* //' sort | sed -e 's/.* //'

以VMWARE定义的顺序排列所有以太网设备的整个expression式是:

lspci -D -mm | sed -n -e 's/ "Ethernet controller".*//;T;p' | while read dev ; do read label < /sys/bus/pci/devices/$dev/label ; echo ${label#Ethernet} $dev ; done | sort | sed -e 's/.* //'