Сетевой адаптер для сопоставления номеров 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/.* //'