Сетевой адаптер для сопоставления номеров Eth для VMware

У меня есть Ubuntu VM на ESXi 5.5 с 6 интерфейсами e1000. И при создании виртуальной машины я назначаю им другую сеть и включаю ее.

Когда я вхожу в Linux, я вижу eth0-eth5, но порядок не тот, который я ожидал. Я ожидал, что сетевой адаптер 1 будет сопоставлен с eth0, а сетевой адаптер 2 - с eth1 и т. Д.

Любая идея, почему это так и как это исправить, пожалуйста?

3 ответа

Два способа, которыми я научился, были:

  • Вы можете посмотреть MAC-адрес в настройках сети на vmware для каждого сетевого адаптера и сделать ifconfig проверить их на консоли.

  • Если у вас шесть линий, отключите 5 из них таким образом. Сначала отредактируйте профиль и выделите сетевой адаптер с 1 по 5. В настройках снимите флажок "подключить". Затем:

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

    Посмотрите, находится ли оператор в состоянии 1 или 0 (ноль). Тот, который находится в 1 состоянии, тот, который вы ищете. Затем вы можете назначить VLAN или IP-адрес.

    Сделайте это для каждого из перечисленных сетевых карт eth0, eth1, eth2 и т. Д.

Оба действия позволяют вам видеть MAC-адрес, но второе позволяет вам увидеть больше деталей конфигурации.

У нас тоже была эта проблема. Мы предположили, что это связано с виртуальными слотами PCI, в которых были vNIC. Iirc, первые три vNIC были в порядке, но с большим количеством порядка эти были странными.

Мы никогда не исправляли это, потому что мы смогли избавиться от виртуальных машин с таким количеством виртуальных сетевых адаптеров в ближайшее время.

Я не знаю Ubuntu, но посмотрите, есть ли файл с именем "persistent" и "net" в /etc/udev/rules.d/. Получите MAC-адреса от ваших vNIC и сопоставьте их с ethX по вашему выбору. Вы должны найти такие правила, как

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

Если вы хотите vNIC с MAC-адресом 00:50:56:01:02:03 чтобы быть 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 занимают слоты, в которых находятся виртуальные сетевые адаптеры в другой виртуальной машине. Так что, похоже, это действительно связано с виртуальными слотами PCI.

Это работало для меня под vmware, где часто есть эти файлы (возможно, вам нужны модули ядра vmware):

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

и эта синхронная ссылка:

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

Метка файла содержит строку текста, такую ​​как: Ethernet0, Ethernet1 и т. Д., И нумеруется в соответствии с исходным номером в файле OVF.

Файл acpi_index имеет номер (вероятно, long int), и номера при сортировке соответствуют исходному порядку интерфейсов в файле OVF или порядку, определенному в виртуальной машине.

Часть имени файла назначения символической ссылки firmware_node также сопоставляется в том же порядке, что и интерфейсы в исходном файле OVF.

например ../../../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:8b/device:8c

Вы можете прочитать это с readlink под оболочкой.

Наиболее полезным, вероятно, является файл метки, поскольку было бы просто извлечь числовую часть имени и использовать ее в качестве имени устройства.

Вы можете прочитать этикетку для $dev как это:

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

и затем извлеките числовой суффикс следующим образом: ${label#Ethernet}

Как куплет, который ничего не делает, если не было метки:

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

Если вы хотите обработать все устройства, чтобы получить заказ, вы можете прочитать ваши Ethernet-устройства в порядке шины, например:

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/.* //'

Полное выражение для передачи всех устройств Ethernet в определенном порядке VMWARE:

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/.* //'

Другие вопросы по тегам