我在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内核模块):
和这个synmlink:
文件标签包含一行文本,如: Ethernet0 , Ethernet1等,并按照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/.* //'