Рейтинг:1

CentOS 7 (dracut) находит несогласованные имена сетевых устройств, вызывающие проблемы при кикстарте

флаг id

Я использую параметры загрузки biosdevname=1 net.ifnames=1 чтобы получить согласованные, предсказуемые имена устройств. Я начинаю замечать проблему, когда в некоторых случаях имена сетевых устройств не совпадают. Например, если я зайду в отладочную оболочку dracut и посмотрю вывод rdsosreport.txt, я увижу следующее:

+ ip адрес
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
    инет 127.0.0.1/8 область хоста lo
       valid_lft навсегда
    inet6 :: 1/128 узел области видимости
       valid_lft навсегда
2: p3p1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop состояние DOWN группа по умолчанию qlen 1000
    ссылка/эфир a8:b4:56:50:97:08 брд ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    ссылка/эфир a8:b4:56:50:97:09 brd ff:ff:ff:ff:ff:ff

Обратите внимание, что существует сочетание последовательного (p3p1) и устаревшего стиля (eth1) именования.Однако, если я посмотрю на интерфейсы из отладочной оболочки dracut, я увижу следующее:

initqueue:/run/initramfs# IP-адрес
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    ссылка/петля 00:00:00:00:00:00 брд 00:00:00:00:00:00
    инет 127.0.0.1/8 область хоста lo
       valid_lft навсегда
    inet6 :: 1/128 узел области видимости
       valid_lft навсегда
2: p3p1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop состояние DOWN группа по умолчанию qlen 1000
    ссылка/эфир a8:b4:56:50:97:08 брд ff:ff:ff:ff:ff:ff
3: p3p2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    ссылка/эфир a8:b4:56:50:97:09 brd ff:ff:ff:ff:ff:ff

p3p1/p3p2 — правильные ожидаемые имена. По какой-то причине в начале последовательности initrd они появляются в смешанном формате. Мое предположение состоит в том, что здесь происходит какая-то гонка, и через некоторое время он (udev?) приходит в правильное состояние, но я не уверен, где именно. К сожалению, это вызывает проблемы для некоторых наших автоматических сборок серверов, потому что серверы появляются после (после установки) первой загрузки и пытаются поднять эт1 когда настоящее имя интерфейса р3р2.

Я копался в модулях dracut, чтобы попытаться выяснить, в чем может заключаться проблема, но еще не смог окончательно определить ее, поэтому ищу предложения.

Кроме того, такое поведение не происходит постоянно. Один и тот же сервер, загружающий один и тот же образ, иногда работает нормально, а в других случаях имеет смешанное поведение с именами. Что также как бы говорит мне, что это какая-то гонка — иногда гонка выигрывается, а иногда проигрывается.

Michael Hampton avatar
флаг cz
Верны ли имена при загрузке установленной системы?
guzzijason avatar
флаг id
@Майкл Хэмптон нет. В установленной системе будут файлы конфигурации `ifcfg-p3p1` и `ifcfg-eth1`, но eth1 не будет существовать. Итак, чтобы установленная система работала нормально, мне нужно отредактировать сетевые конфиги вручную. Кроме того, я только что добавил к своему исходному сообщению - поведение непоследовательно, что означает, что иногда проблема возникает, а иногда нет. Что говорит мне, раса.
Michael Hampton avatar
флаг cz
Кажется, что к тому времени, когда вы пройдете initramfs и войдете в установщик, имена устройств уже должны быть установлены задолго до того, что вы могли бы делать в кикстарте. Можете ли вы конкретно указать, что вы делаете, что приводит к этой неудачной конфигурации сети?
guzzijason avatar
флаг id
Да, я использую специально созданный initramfs, который динамически настраивает связывание LACP. У нас есть несколько односетевых хостов, несколько двухдомных и некоторые с несколькими интерфейсами, которые объединяются в единую связь. Это «обычно» работает, за исключением случаев, когда возникает эта проблема.
Michael Hampton avatar
флаг cz
Этот пользовательский материал написан как модуль dracut? Они должны загружаться после того, как имена udev установлены.Также имейте в виду, что dracut может настроить соединение самостоятельно, если для этого есть опция командной строки.
guzzijason avatar
флаг id
Мы внесли изменения в модули dracut 40network для наших пользовательских нужд.
guzzijason avatar
флаг id
Я думаю, что проблема гонки может быть связана с именем biosdev. До сих пор мне не удавалось воспроизвести проблему при использовании `biosdevname=0 net.ifnames=1`, что может подойти нам.
Рейтинг:0
флаг id

Отвечая на мой собственный вопрос здесь. Оказывается, проблема была (частично) в себе.

Часть, которую мы не можем контролировать:

Использование варианта загрузки биосдевнаме=1 может вызвать гонки на этапе переименования интерфейса. Если вы можете жить без него, просто используя net.ifnames=1 biosdevname=0 может быть предпочтительнее, даже если получившиеся имена будут «менее красивыми».

Часть, которую мы МОЖЕМ контролировать:

Наш сайт использует измененный dracut 40сеть модуль. Одна из основных вещей, которую делает наша версия, это то, что она исследует содержимое /sys/класс/сеть/ поиск жизнеспособных интерфейсов для автоматического добавления к связи. (мы не всегда знаем имена устройств заранее, поэтому модулю нужна была некоторая логика, чтобы идентифицировать их самостоятельно). Упомянутая выше гонка может вызвать задержку переименования файлов в /sys/класс/сеть/. Решение было простым: добавить в сценарий 5-секундный сон перед зондированием. /sys/класс/сеть/. Это дает biosdevname (надеюсь, более чем достаточно) времени, чтобы закончить переименование устройств. Тестирование пока кажется A-OK.

Michael Hampton avatar
флаг cz
Интересно. Какие имена вы получаете с `biosdevname=0`? Прошел, наверное, год с тех пор, как я обновил последнюю версию CentOS 7, которая у меня была (до 8).
guzzijason avatar
флаг id
С помощью `net.ifnames=1 biosdevname=1` мы получаем такие имена, как "p3p1", "p3p2" (слот и порт, довольно просто). С `net.ifnames=1 biosdevname=0` эти имена меняются на такие вещи, как "enp193s0f0", "enp193s0f1".
Michael Hampton avatar
флаг cz
А, значит, нормальные имена возвращаются, когда вы используете `biosdevname=0`. Вероятно, лучше вернуться к этому, поскольку все остальные используют его. Эти старые имена были в значительной степени заброшены много лет назад.
guzzijason avatar
флаг id
Я знаю, что унаследованные имена «eth0», «eth1» были заброшены по уважительной причине. `biosdevname=1` на самом деле является поведением по умолчанию на оборудовании Dell, если оно явно не отключено.
Michael Hampton avatar
флаг cz
Извините, я имел в виду, что имена Dell `biosdevname=1` были заброшены. Если для этого параметра установлено значение 0, имена устройств используют одни и те же общие форматы для всех поставщиков оборудования.

Ответить или комментировать

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