
Infiniband интерфейсы широко применяются в высокопроизводительных вычислительных кластерах и системах хранения данных, где скорость передачи и надежность имеют критическое значение. В отличие от стандартных Ethernet адаптеров, MAC-адрес Infiniband не всегда отображается стандартными сетевыми утилитами, такими как ifconfig или ip addr. Для корректного получения информации требуется использовать специализированные инструменты, работающие напрямую с драйверами Infiniband.
Понимание структуры адреса Infiniband и способов его получения позволяет точно настраивать маршруты, мониторить соединения и выявлять проблемы на уровне адаптера. Следование практическим рекомендациям по использованию команд ibstat, ibdev2netdev и системных файлов /sys/class/infiniband гарантирует получение достоверной информации без ошибок, характерных для попыток чтения адреса стандартными сетевыми утилитами Linux.
Проверка списка доступных Infiniband интерфейсов

Для детальной информации о каждом интерфейсе применяется утилита ibdev2netdev, которая связывает Infiniband-устройства с сетевыми интерфейсами и отображает их MAC-адреса и состояния.
Если нужно получить список интерфейсов с расширенными характеристиками, можно использовать cat /sys/class/infiniband/*/ports/*/state и cat /sys/class/infiniband/*/ports/*/link_layer, чтобы проверить состояние портов и тип канала (InfiniBand или Ethernet).
Регулярная проверка доступных интерфейсов позволяет оперативно выявлять отключенные порты и корректно выбирать интерфейс для последующего определения MAC-адреса.
Использование команды `ibstat` для просмотра MAC адреса

Команда `ibstat` позволяет получить детальную информацию о состоянии Infiniband адаптера, включая его MAC адрес, состояние порта и GUID устройства. Для просмотра MAC адреса необходимо запустить команду с правами пользователя, имеющего доступ к Infiniband интерфейсу.
Пример использования команды:
ibstat
Для точного определения MAC адреса конкретного порта рекомендуется обратить внимание на номер порта, указанный как Port Number. В многопортовых адаптерах каждый порт имеет свой уникальный GUID, который и используется как MAC адрес.
Для автоматического извлечения MAC адреса можно использовать команду:
ibstat | grep "Port GUID"
Это выведет список всех GUID доступных портов. Если необходимо получить MAC адрес одного конкретного порта, можно указать его HCA и порт напрямую через скрипт или дополнительную фильтрацию.
Команда `ibstat` особенно полезна при диагностике состояния сети Infiniband, так как одновременно предоставляет информацию о соединении порта, скорости передачи данных и текущем состоянии интерфейса, что позволяет убедиться, что MAC адрес корректно назначен и интерфейс готов к работе.
Получение MAC через `ifconfig` или `ip link`
Для быстрого получения MAC адреса Infiniband интерфейса в Linux можно использовать стандартные сетевые утилиты `ifconfig` и `ip link`. Они позволяют просмотреть низкоуровневую информацию о сетевых устройствах без установки дополнительных пакетов.
С помощью `ifconfig`:
- Выполните команду
ifconfig -aдля отображения всех интерфейсов, включая Infiniband. - Найдите имя нужного интерфейса, обычно оно начинается с
ib, напримерib0.
С помощью `ip link`:
- Запустите команду
ip link showдля получения списка всех сетевых интерфейсов с их параметрами. - Определите нужный интерфейс по имени, аналогично
ib0. - MAC адрес отображается после слова
link/ether, напримерlink/ether 00:1b:21:bb:3c:5f.
Рекомендуется использовать ip link, так как эта утилита является более современной и поддерживается в новых версиях Linux. Она предоставляет точные данные о состоянии интерфейса, скорости и типе канала, что полезно для диагностики Infiniband сетей.
Для автоматизированного извлечения MAC адреса можно использовать команду с фильтром, например:
ip link show ib0 | grep link/ether | awk '{print $2}'– выведет только сам MAC адрес.
Чтение информации из файлов `/sys/class/infiniband`
Каталог `/sys/class/infiniband` содержит информацию о всех доступных Infiniband устройствах на системе. Каждое устройство представлено отдельной папкой с именем типа `mlx5_0` или `hfi1_0`.
Для получения MAC-адреса интерфейса необходимо перейти в подпапку `ports/<номер_порта>/`. Например, полный путь может выглядеть как `/sys/class/infiniband/mlx5_0/ports/1/`. В этой папке присутствуют файлы `node_guid` и `port_guid`, которые хранят уникальные идентификаторы, используемые как MAC-адреса для Infiniband.
cat /sys/class/infiniband/mlx5_0/ports/1/port_guid
Результат будет представлен в виде шестнадцатеричного значения без разделителей. Это значение соответствует MAC-адресу Infiniband интерфейса и может использоваться для настройки сетевых сервисов или диагностики.
Если в системе несколько устройств или портов, рекомендуется пройтись по каждому пути и сверить `port_guid`, чтобы определить соответствие физического порта и его MAC-адреса.
Сравнение MAC адресов разных интерфейсов

Для анализа сетевых связей в кластере важно уметь различать MAC адреса разных Infiniband интерфейсов. В Linux каждый интерфейс имеет уникальный 64-битный MAC, который можно получить через /sys/class/infiniband/<имя_устройства>/ports/1/ или команды ip link и ifconfig. Сравнивая эти адреса, можно выявить дублирование или конфликты, особенно при настройке мультипортовых адаптеров.
При сравнении следует учитывать структуру MAC: первые 8 символов часто идентифицируют производителя (OUI), а оставшиеся 8 – уникальный идентификатор устройства. Это позволяет определить, какие интерфейсы принадлежат одному адаптеру, а какие – разным узлам.
Особое внимание стоит уделять Infiniband интерфейсам с несколькими портами. MAC каждого порта может различаться, но сохраняет логическую связь с адаптером. Сравнение позволяет корректно настроить балансировку нагрузки и минимизировать конфликты при высокопроизводительных соединениях.
Проверка прав доступа для чтения MAC адреса

Для получения MAC адреса Infiniband интерфейса требуется доступ к системным файлам в каталоге /sys/class/infiniband и к инструментам, таким как ifconfig или ip link. Основные проверки включают права чтения на файлы node*/ports/*/address и принадлежность пользователя к группе root или infiniband.
Если права ограничены, необходимо выполнить команды с повышенными привилегиями через sudo или добавить пользователя в соответствующую группу. Команда sudo usermod -aG infiniband имя_пользователя добавляет пользователя в группу Infiniband для получения доступа без постоянного использования sudo.
После изменения групп или прав рекомендуется переподключиться или выполнить newgrp infiniband, чтобы новые права вступили в силу. Это обеспечивает корректное чтение MAC адреса через системные файлы и сетевые утилиты.
Использование скриптов для автоматического сбора MAC адресов

Для автоматизации получения MAC адресов Infiniband интерфейсов в Linux можно использовать Bash или Python скрипты. Bash позволяет быстро обходить директории `/sys/class/infiniband` и читать файлы типа `address` для каждого порта:
for iface in /sys/class/infiniband/*/ports/*/address; do cat $iface; done
import glob
for addr_file in glob.glob('/sys/class/infiniband/*/ports/*/address'):
with open(addr_file) as f:
print(f.read().strip())
Python скрипты легко интегрируются с логированием и отправкой результатов на удалённый сервер, что удобно при мониторинге большого количества хостов. В скриптах рекомендуется проверять права доступа к файлам и наличие интерфейсов, чтобы избежать ошибок при выполнении на системах с неполной конфигурацией Infiniband.
Для периодического обновления данных можно настроить cron-задание, которое будет запускать скрипт и сохранять результаты в отдельный лог или базу данных. Такой подход позволяет отслеживать изменения MAC адресов, выявлять новые интерфейсы и централизованно управлять сетевой информацией.
Вопрос-ответ:
Какая команда в Linux позволяет увидеть MAC адрес Infiniband интерфейса без установки дополнительных утилит?
На большинстве современных систем Linux можно использовать команду ip link show. Она выводит список всех сетевых интерфейсов, включая Infiniband, с указанием MAC адреса, который отображается в поле link/ether или link/infiniband. Для фильтрации конкретного интерфейса можно добавить его имя, например: ip link show ib0.
Можно ли получить MAC адрес Infiniband интерфейса через системные файлы?
Да, информация о MAC адресе хранится в каталоге /sys/class/infiniband/. Для конкретного интерфейса, например mlx5_0, путь будет /sys/class/infiniband/mlx5_0/ports/1/. Файл sm_lid и node_guid содержат уникальные идентификаторы, а dev_addr указывает MAC адрес. Его можно прочитать командой cat /sys/class/infiniband/mlx5_0/ports/1/dev_addr.
Как узнать MAC адрес Infiniband интерфейса с помощью утилиты ibstat?
Утилита ibstat отображает подробную информацию о состоянии Infiniband адаптера. Среди прочего вывод содержит Local Identifier (LID) и Node GUID, которые соответствуют уникальным адресам устройства. Для конкретного интерфейса можно использовать команду ibstat ib0, после чего в блоке информации о порте будет указан MAC адрес или GUID, который служит аналогом MAC для Infiniband.
Можно ли автоматически собрать MAC адреса всех Infiniband интерфейсов в системе?
Да, это можно сделать с помощью небольшого скрипта на Bash. Например, цикл по каталогам /sys/class/infiniband/*/ports/*/dev_addr позволит прочитать все MAC адреса и вывести их в список. Такой подход особенно удобен на серверах с несколькими адаптерами, где ручной просмотр каждого интерфейса занимает много времени.
Существуют ли ограничения на доступ к файлам с MAC адресами Infiniband интерфейсов?
Да, для чтения файлов в /sys/class/infiniband обычно требуются права root или членство в группе, которой разрешен доступ к устройствам Infiniband. Попытка прочитать файлы обычным пользователем без соответствующих прав приведет к ошибке «Permission denied». Для проверки прав можно использовать команду ls -l /sys/class/infiniband/.
Какая команда в Linux позволяет узнать MAC адрес Infiniband интерфейса без установки дополнительных пакетов?
В стандартной поставке Linux для просмотра MAC адреса Infiniband интерфейса можно использовать команду cat для чтения соответствующих файлов в каталоге /sys/class/infiniband. Например, если интерфейс называется ib0, MAC адрес хранится в файле /sys/class/infiniband/ib0/ports/1/perm_addr. Достаточно выполнить cat /sys/class/infiniband/ib0/ports/1/perm_addr, чтобы получить адрес в шестнадцатеричном формате. Этот метод не требует установки дополнительных утилит и работает напрямую с данными ядра.
Можно ли получить MAC адрес Infiniband интерфейса через стандартные сетевые команды вроде ip link или ifconfig?
Да, Infiniband интерфейсы отображаются в выводе команд ip link и ifconfig, и их MAC адресы можно прочитать аналогично обычным Ethernet интерфейсам. Например, ip link show ib0 выведет информацию о интерфейсе ib0, включая строку вида link/ether 00:1a:4b:xx:xx:xx:xx:xx. Следует учитывать, что в случае нескольких портов Infiniband, каждая команда покажет адрес только конкретного сетевого интерфейса, поэтому при наличии нескольких интерфейсов лучше уточнять нужный порт.
