Bug 56710 - Решение проблемы с обновлением ядра Linux и сетевыми интерфейсами
Summary: Решение проблемы с обновлением ядра Linux и сетевыми интерфейсами
Status: NEW
Alias: None
Product: New/proposed packages
Classification: Development
Component: Обычный репозиторий (show other bugs)
Version: не указана
Hardware: x86 Linux
: P5 normal
Assignee: Andrey Cherepanov
QA Contact: Andrey Cherepanov
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-11-02 12:12 MSK by rsrs
Modified: 2025-11-12 16:51 MSK (History)
7 users (show)

See Also:


Attachments
Содержит реализацию функции lock-all-interfaces-name и последовательность действий обновления ядра, не приводящую к ошибке (1.45 KB, text/x-sh)
2025-11-02 12:12 MSK, rsrs
no flags Details
Скрипт для создания systemd link (351 bytes, application/x-shellscript)
2025-11-03 14:21 MSK, Антон Мидюков
no flags Details
eno1.link eno2.link (228 bytes, application/x-7z-compressed)
2025-11-05 09:51 MSK, rsrs
no flags Details
функция create-persistent-network-interface-names (445 bytes, text/x-sh)
2025-11-05 12:37 MSK, rsrs
no flags Details
Вывод lspci -vvk для 4-х машин (11.43 KB, application/x-7z-compressed)
2025-11-10 12:57 MSK, rsrs
no flags Details
Логи после обновления ядра перед перезагрузкой (2.60 MB, application/x-7z-compressed)
2025-11-12 10:11 MSK, rsrs
no flags Details
Логи после обновления ядра после перезагрузки (2.59 MB, application/x-7z-compressed)
2025-11-12 10:11 MSK, rsrs
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description rsrs 2025-11-02 12:12:06 MSK
Created attachment 19981 [details]
Содержит реализацию функции lock-all-interfaces-name и последовательность действий обновления ядра, не приводящую к ошибке

Здравствуйте.

При выполнении процедуры обновления ядра помощью команд

apt-get update
apt-get install update-kernel -y
update-kernel -y
reboot

на некоторых системах возникает критическая ошибка, приводящая к неработоспособности сетевых служб. Данная проблема была зафиксирована в обращении в техническую поддержку "Потеря сети после обновления ядра [#204205]".

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

Для предотвращения ошибки была разработана функция lock-all-interfaces-name, блокирующая переименование сетевых интерфейсов.

Последовательность команд, устраняющая ошибку обновления ядра:

lock-all-interfaces-name  # Блокировка переименования всех сетевых интерфейсов
apt-get update
apt-get install update-kernel
update-kernel
reboot

Предлагается интегрировать функционал блокировки переименования сетевых интерфейсов непосредственно в команду update-kernel. Это позволит фиксировать имена сетевых интерфейсов на момент начала обновления ядра и автоматически предотвращать переименование сетевых интерфейсов при обновлении ядра.

Можно заметить, что непосредственно во время выполнения команды update-kernel исключается возможность изменения количества сетевых интерфейсов или замена сетевых карт в процессе выполнения обновления ядра.

- 

Предлагаемая реализация команды update-kernel обеспечит более надежную и безопасную процедуру обновления системного ядра на большинстве конфигураций, минимизируя риск возникновения проблем с сетевыми службами.

Прилагаю скрипт, содержащий реализацию функции lock-all-interfaces-name.

--

PS:

Предлагаемый вариант функции lock-all-interfaces-name блокирует переименование всех сетевых интерфейсов. Однако, вероятно, имеет смысл фиксировать только физические интерфейсы. Можно, например, так уточнить фильтрацию сетевых интерфейсов:

# Получаем список активных «физических» или «предсказуемых» сетевых интерфейсов
ip -br link show | \
 awk '
 $1 ~ /^(en|eth|wl|ppp|sl|sit0)/ && # eno1, eth0, wlan0, ppp0, sl0
 $1 != "lo"
 {print $1}
 ' | while read -r iface; do
 # ... обработка интерфейса ...
 done

Это позволит:
- Исключить виртуальные и аналогичные интерфейсы
- Учитывать только физические сетевые карты

--

Спасибо.
Comment 1 Антон Мидюков 2025-11-03 10:43:28 MSK
С какой версии ядра на какую версию ядра обновились? Какие интерфейсы сменили имена?

Вместо udev правила, нужно генерировать link-файлы:
https://www.freedesktop.org/software/systemd/man/latest/systemd.link.html

На каждый интерфейс нужно генерировать такой файл командой:
cat>/etc/systemd/network/$iface.link <<EOF
[Match]
MACAddress=$mac

[Link]
Name=$iface
EOF

Генерировать нужно только на интерфейсы ethernet: en*.
Comment 2 Антон Мидюков 2025-11-03 14:21:24 MSK
Created attachment 19984 [details]
Скрипт для создания systemd link
Comment 3 rsrs 2025-11-03 15:32:31 MSK
(Ответ для Антон Мидюков на комментарий #1)
> С какой версии ядра на какую версию ядра обновились? Какие интерфейсы
> сменили имена?
> 

6.1.114-un-def-alt0.c10f.2 -> 6.12.51-alt0.c10f.2

"Поломанный" интерфейс: eno1

> Вместо udev правила, нужно генерировать link-файлы:
> https://www.freedesktop.org/software/systemd/man/latest/systemd.link.html
> 
> На каждый интерфейс нужно генерировать такой файл командой:
> cat>/etc/systemd/network/$iface.link <<EOF
> [Match]
> MACAddress=$mac
> 
> [Link]
> Name=$iface
> EOF
> 
> Генерировать нужно только на интерфейсы ethernet: en*.

Т.е. это скрипт выполнять ВМЕСТО предложенного НЕПОСРЕДСТВЕННО перед обновлением ядра, верно?

Чем это решение лучше?
Comment 4 Антон Мидюков 2025-11-03 15:42:42 MSK
(Ответ для rsrs на комментарий #3)
> (Ответ для Антон Мидюков на комментарий #1)
> > С какой версии ядра на какую версию ядра обновились? Какие интерфейсы
> > сменили имена?
> > 
> 
> 6.1.114-un-def-alt0.c10f.2 -> 6.12.51-alt0.c10f.2
> 
> "Поломанный" интерфейс: eno1

А на какое имя сменилось?

> 
> > Вместо udev правила, нужно генерировать link-файлы:
> > https://www.freedesktop.org/software/systemd/man/latest/systemd.link.html
> > 
> > На каждый интерфейс нужно генерировать такой файл командой:
> > cat>/etc/systemd/network/$iface.link <<EOF
> > [Match]
> > MACAddress=$mac
> > 
> > [Link]
> > Name=$iface
> > EOF
> > 
> > Генерировать нужно только на интерфейсы ethernet: en*.
> 
> Т.е. это скрипт выполнять ВМЕСТО предложенного НЕПОСРЕДСТВЕННО перед
> обновлением ядра, верно?
> 

Эти link файлы нужно один раз создать, желательно сразу после установки системы. И добавлять link-файлы по мере появления новых сетевых карт. 


> Чем это решение лучше?

Тем, что это штатное решение для фиксации имён сетевых интерфейсов в udev.
Кроме того, вы зачем-то предлагаете фиксировать вообще все сетевые интерфейсы, что не требуется, и может быть даже вредно.
Comment 5 rsrs 2025-11-03 19:23:02 MSK
(Ответ для Антон Мидюков на комментарий #4)
> (Ответ для rsrs на комментарий #3)
> > (Ответ для Антон Мидюков на комментарий #1)
> > > С какой версии ядра на какую версию ядра обновились? Какие интерфейсы
> > > сменили имена?
> > > 
> > 
> > 6.1.114-un-def-alt0.c10f.2 -> 6.12.51-alt0.c10f.2
> > 
> > "Поломанный" интерфейс: eno1
> 
> А на какое имя сменилось?

Сейчас не могу сказать. Мб. получится повторить позже.

> 
> > 
> > > Вместо udev правила, нужно генерировать link-файлы:
> > > https://www.freedesktop.org/software/systemd/man/latest/systemd.link.html
> > > 
> > > На каждый интерфейс нужно генерировать такой файл командой:
> > > cat>/etc/systemd/network/$iface.link <<EOF
> > > [Match]
> > > MACAddress=$mac
> > > 
> > > [Link]
> > > Name=$iface
> > > EOF
> > > 

Ок, спасибо.

> > > Генерировать нужно только на интерфейсы ethernet: en*.

Кстати, возможно же именование и eth*, в том числе (https://www.altlinux.org/NetworkDevicesName)?
Именно поэтому была сделана попытка захватить более широкий диапазон именования интерфейсов.
Хотя, согласен, может быть избыточно "широко".

> > 
> > Т.е. это скрипт выполнять ВМЕСТО предложенного НЕПОСРЕДСТВЕННО перед
> > обновлением ядра, верно?
> > 
> 
> Эти link файлы нужно один раз создать, желательно сразу после установки
> системы. И добавлять link-файлы по мере появления новых сетевых карт. 
> 
> 
> > Чем это решение лучше?
> 
> Тем, что это штатное решение для фиксации имён сетевых интерфейсов в udev.

Ок, попробую этот вариант после праздников.

> Кроме того, вы зачем-то предлагаете фиксировать вообще все сетевые
> интерфейсы, что не требуется

Хотелось сделать максимально универсальное решение, захватывающие все возможные варианты именования - "сделал и забыл".
Хотя, повторюсь, может быть, действительно, достаточно только фильтровать en* и eth*.

>, и может быть даже вредно.

Да, возможно Вы правы.

--

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

Поэтому, думаю, было бы правильно либо интегрировать в функционал команды update-kernel предварительную блокировку имён интерфейсов, либо решить это каким-то иным способом в процедуре обновления ядра, чтобы пользователи совершенно неожиданно на длительное время не оставались с мёртвой системой в поисках скорейшего устранения проблемы (как это произошло в моём случае).

--

Ещё раз спасибо.
Comment 6 rsrs 2025-11-04 12:45:36 MSK
Здравствуйте.

> > 
> > "Поломанный" интерфейс: eno1
> 
> А на какое имя сменилось?
> 

Нашёл логи. Переименование: eno1 -> eno1np0

Из логов перед обновлением ядра:
--- Все сетевые интерфейсы ---
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 3c:ec:ef:72:31:06 brd ff:ff:ff:ff:ff:ff
    altname enp26s0f0
3: eno2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 3c:ec:ef:72:31:07 brd ff:ff:ff:ff:ff:ff
    altname enp26s0f1

После обновления ядра:
--- Все сетевые интерфейсы ---
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1np0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 3c:ec:ef:72:31:06 brd ff:ff:ff:ff:ff:ff
    altname enp26s0f0np0
3: eno2np1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 3c:ec:ef:72:31:07 brd ff:ff:ff:ff:ff:ff
    altname enp26s0f1np1


Более полные логи, собранные перед и после обновления ядра можно найти во вложении к обращению в ТП "Потеря сети после обновления ядра [#204205]".
Comment 7 rsrs 2025-11-05 09:20:08 MSK
(Ответ для Антон Мидюков на комментарий #1)
> С какой версии ядра на какую версию ядра обновились? Какие интерфейсы
> сменили имена?
> 
> Вместо udev правила, нужно генерировать link-файлы:
> https://www.freedesktop.org/software/systemd/man/latest/systemd.link.html
> 
> На каждый интерфейс нужно генерировать такой файл командой:
> cat>/etc/systemd/network/$iface.link <<EOF
> [Match]
> MACAddress=$mac
> 
> [Link]
> Name=$iface
> EOF
> 
> Генерировать нужно только на интерфейсы ethernet: en*.

Это решение не сработало. При наличии созданных link-файлов после перезагрузки сеть недоступна.

Т.е. на текущий момент вариант с функцией lock-all-interfaces-name является единственно рабочим.
Comment 8 rsrs 2025-11-05 09:28:00 MSK
Если в этом есть необходимость, в течение некоторого ближайшего времени у меня есть возможность воспроизвести ситуацию с ошибкой обновления ядра и собрать необходимую дополнительную отладочную информацию до и после обновления.

Если такая потребность имеется - пришлите необходимые диагностические скрипты и инструкцию с последовательностью их выполнения.

В любом случае, дайте, пожалуйста, знать держать ли мне некоторое время сервер под отладку или отдавать его в эксплуатацию с применением функции lock-all-interfaces-name перед обновлением ядра, после чего воспроизвести проблему уже не получится.
Comment 9 Антон Мидюков 2025-11-05 09:35:48 MSK
(Ответ для rsrs на комментарий #7)
> (Ответ для Антон Мидюков на комментарий #1)
> > С какой версии ядра на какую версию ядра обновились? Какие интерфейсы
> > сменили имена?
> > 
> > Вместо udev правила, нужно генерировать link-файлы:
> > https://www.freedesktop.org/software/systemd/man/latest/systemd.link.html
> > 
> > На каждый интерфейс нужно генерировать такой файл командой:
> > cat>/etc/systemd/network/$iface.link <<EOF
> > [Match]
> > MACAddress=$mac
> > 
> > [Link]
> > Name=$iface
> > EOF
> > 
> > Генерировать нужно только на интерфейсы ethernet: en*.
> 
> Это решение не сработало. При наличии созданных link-файлов после
> перезагрузки сеть недоступна.
> 
> Т.е. на текущий момент вариант с функцией lock-all-interfaces-name является
> единственно рабочим.

Покажите link-файлы.
Comment 10 rsrs 2025-11-05 09:51:12 MSK
Created attachment 19991 [details]
eno1.link eno2.link
Comment 11 rsrs 2025-11-05 09:52:11 MSK
> Покажите link-файлы.
Приложил выше
Comment 12 rsrs 2025-11-05 12:37:55 MSK
Created attachment 19993 [details]
функция create-persistent-network-interface-names
Comment 13 rsrs 2025-11-05 12:39:16 MSK
Такой вариант сработал, сеть после обновления ядра не сломалась:

function create-persistent-network-interface-names () {
    # Bind network interface names of ethernet to MAC addresses
    ip -br link show | grep -E '^(en|eth)' | awk '{print $1}' | while read -r iface; do
        local mac=$(ip -br link show "$iface" 2>/dev/null | awk '{print $3}')
        [ -n "$mac" ] || continue
        cat >/etc/systemd/network/10-$iface.link <<-EOF
		[Match]
		MACAddress=$mac

		[Link]
		Name=$iface
		EOF
    done
}
Comment 14 Антон Мидюков 2025-11-05 22:30:59 MSK
(Ответ для rsrs на комментарий #13)
> Такой вариант сработал, сеть после обновления ядра не сломалась:
> 
> function create-persistent-network-interface-names () {
>     # Bind network interface names of ethernet to MAC addresses
>     ip -br link show | grep -E '^(en|eth)' | awk '{print $1}' | while read
> -r iface; do
>         local mac=$(ip -br link show "$iface" 2>/dev/null | awk '{print $3}')
>         [ -n "$mac" ] || continue
>         cat >/etc/systemd/network/10-$iface.link <<-EOF
> 		[Match]
> 		MACAddress=$mac
> 
> 		[Link]
> 		Name=$iface
> 		EOF
>     done
> }

То есть помогло переименование link файлов (добавлена приставка 10-)?
Сохранять имена eth* не нужно, потому что их не может быть.
Comment 15 rsrs 2025-11-05 22:32:07 MSK
(Ответ для Антон Мидюков на комментарий #14)
> (Ответ для rsrs на комментарий #13)
> > Такой вариант сработал, сеть после обновления ядра не сломалась:
> > 
> > function create-persistent-network-interface-names () {
> >     # Bind network interface names of ethernet to MAC addresses
> >     ip -br link show | grep -E '^(en|eth)' | awk '{print $1}' | while read
> > -r iface; do
> >         local mac=$(ip -br link show "$iface" 2>/dev/null | awk '{print $3}')
> >         [ -n "$mac" ] || continue
> >         cat >/etc/systemd/network/10-$iface.link <<-EOF
> > 		[Match]
> > 		MACAddress=$mac
> > 
> > 		[Link]
> > 		Name=$iface
> > 		EOF
> >     done
> > }
> 
> То есть помогло переименование link файлов (добавлена приставка 10-)?
> Сохранять имена eth* не нужно, потому что их не может быть.

Да, по совету ТП ;)
Comment 16 rsrs 2025-11-05 22:35:19 MSK
(Ответ для Антон Мидюков на комментарий #14)
> (Ответ для rsrs на комментарий #13)
> > Такой вариант сработал, сеть после обновления ядра не сломалась:
> > 
> > function create-persistent-network-interface-names () {
> >     # Bind network interface names of ethernet to MAC addresses
> >     ip -br link show | grep -E '^(en|eth)' | awk '{print $1}' | while read
> > -r iface; do
> >         local mac=$(ip -br link show "$iface" 2>/dev/null | awk '{print $3}')
> >         [ -n "$mac" ] || continue
> >         cat >/etc/systemd/network/10-$iface.link <<-EOF
> > 		[Match]
> > 		MACAddress=$mac
> > 
> > 		[Link]
> > 		Name=$iface
> > 		EOF
> >     done
> > }
> 
> То есть помогло переименование link файлов (добавлена приставка 10-)?
> Сохранять имена eth* не нужно, потому что их не может быть.

Но, конечно, этот скрипт - просто костыль.

На самом деле нужно чинить команду update-kernel. Обновление ядра, переименовывающее интерфейсы и не корректирующее все соответствующие зависимости в системе нельзя назвать корректным.
Comment 17 Антон Мидюков 2025-11-05 23:15:19 MSK
(Ответ для rsrs на комментарий #16)
> (Ответ для Антон Мидюков на комментарий #14)
> > (Ответ для rsrs на комментарий #13)
> > > Такой вариант сработал, сеть после обновления ядра не сломалась:
> > > 
> > > function create-persistent-network-interface-names () {
> > >     # Bind network interface names of ethernet to MAC addresses
> > >     ip -br link show | grep -E '^(en|eth)' | awk '{print $1}' | while read
> > > -r iface; do
> > >         local mac=$(ip -br link show "$iface" 2>/dev/null | awk '{print $3}')
> > >         [ -n "$mac" ] || continue
> > >         cat >/etc/systemd/network/10-$iface.link <<-EOF
> > > 		[Match]
> > > 		MACAddress=$mac
> > > 
> > > 		[Link]
> > > 		Name=$iface
> > > 		EOF
> > >     done
> > > }
> > 
> > То есть помогло переименование link файлов (добавлена приставка 10-)?
> > Сохранять имена eth* не нужно, потому что их не может быть.
> 
> Но, конечно, этот скрипт - просто костыль.
> 
> На самом деле нужно чинить команду update-kernel. Обновление ядра,
> переименовывающее интерфейсы и не корректирующее все соответствующие
> зависимости в системе нельзя назвать корректным.

update-kernel тут ни при чём. Этот скрипт стоит в конце установки выполнять.

Такой перескок может происходить при смене драйверов.
Предполагаю, что имя интерфейсов поменялось из-за того, что в ядре 6.1 использовался сторонний модуль сети ixgbe, а в 6.12 апстримный.
Comment 18 rsrs 2025-11-06 16:16:53 MSK
(Ответ для Антон Мидюков на комментарий #17)
> 
> update-kernel тут ни при чём. Этот скрипт стоит в конце установки выполнять.

Да, сейчас так и сделаю.
> 
> Такой перескок может происходить при смене драйверов.
> Предполагаю, что имя интерфейсов поменялось из-за того, что в ядре 6.1
> использовался сторонний модуль сети ixgbe, а в 6.12 апстримный.

Да, вероятно. Но для пользователя это выглядит так, что "update-kernel вдруг поломал систему".

Поэтому если известен вариант поломки и способ её устранения, то необходимо фиксить именно действия в модуле update-kernel, чтобы пользователь и не догадывался о том, "что имя интерфейсов поменялось из-за того, что в ядре 6.1
> использовался сторонний модуль сети ixgbe, а в 6.12 апстримный".

Пользователю нужна исправная система, а не объяснения причины поломки и поиск способа решения в то время, как разработчику этот способ в данном случае уже известен.
Comment 19 Leonid Krivoshein 2025-11-09 01:33:54 MSK
(In reply to rsrs from comment #18)
> Да, вероятно. Но для пользователя это выглядит так, что "update-kernel вдруг
> поломал систему".
Здесь пользователь = администратор, который в исходной заявке РМ утверждал, что это произошло на одной машине и не случилось на трёх других. Так надо просто разобраться в причинах, они явно не в дистрибутиве. Начните с того, что сравните пакетную базу на предмет udev rules, посмотрите настройки именования в systemd.

Лично я тут ошибки не вижу. Ошибка на ядро? Нет, ваш dmesg подтвердит, что оно не имеет никакого отношения к переименованию интерфейсов. Их переименовывает systemd или udevd, в зависимости от настроек. Именно в них отличия. Менялось ядро, менялись systemd и udevd, но если почитать документацию и настроить всё изначально так, чтобы ничего при обновлении не переименовывалось, никаких дополнительных костылей не потребуется.
Comment 20 rsrs 2025-11-10 12:23:05 MSK
(Ответ для Leonid Krivoshein на комментарий #19)
> (In reply to rsrs from comment #18)
> > Да, вероятно. Но для пользователя это выглядит так, что "update-kernel вдруг
> > поломал систему".
> Здесь пользователь = администратор, который в исходной заявке РМ утверждал,
> что это произошло на одной машине и не случилось на трёх других. Так надо
> просто разобраться в причинах, они явно не в дистрибутиве. 

Проблемы явно в либо в дистрибутиве, либо в реализации команды update-kernel.

Это следует из того, что на всех 4-х компьютерах
1. установка ОС выполнялась из ОДНОГО и ТОГО же ISO-образа дистрибутива Альт СП Сервер 10.2 с ИДЕНТИЧНЫМ выбором параметров в мастере установки ОС.
2. На всех свежеустановленных ОС не было выполнено НИКАКИХ изменений, КРОМЕ установки пакета timeshift. После чего на каждом компьютере выполнена последовательность:
apt-get update
apt-get install update-kernel -y
update-kernel -y
reboot

После выполнения такой последовательности обновления ядра и перезагрузки на одной из 4-х машин сеть оказывается неработоспособной. Только фиксация имён сетевых интерфейсов перед обновлением ядра устраняет проблему.

> Начните с того,
> что сравните пакетную базу на предмет udev rules, посмотрите настройки
> именования в systemd.
> 
> Лично я тут ошибки не вижу. Ошибка на ядро? Нет, ваш dmesg подтвердит, что
> оно не имеет никакого отношения к переименованию интерфейсов. Их
> переименовывает systemd или udevd, в зависимости от настроек. Именно в них
> отличия. Менялось ядро, менялись systemd и udevd, но если почитать
> документацию и настроить всё изначально так, чтобы ничего при обновлении не
> переименовывалось, никаких дополнительных костылей не потребуется.

Повторюсь ещё раз. Никаких изменений в ОС после её установки с моей стороны не производилось - мной НИЧЕГО не настраивалось.
(*) Выполнено только лишь 
apt-get update
apt-get install timeshift
apt-get install update-kernel 
update-kernel 
reboot

ВСЁ!

Т.е. совокупность (Установка из одного браза ОС)+timeshift+update-kernel+update-kernel на одной машине из 4-х приводит к поломке сети.

Влияние администратора (моё) состоит лишь в последовательном запуске (*).
Comment 21 Антон Мидюков 2025-11-10 12:27:03 MSK
(Ответ для rsrs на комментарий #20)
> (Ответ для Leonid Krivoshein на комментарий #19)
> > (In reply to rsrs from comment #18)
> > > Да, вероятно. Но для пользователя это выглядит так, что "update-kernel вдруг
> > > поломал систему".
> > Здесь пользователь = администратор, который в исходной заявке РМ утверждал,
> > что это произошло на одной машине и не случилось на трёх других. Так надо
> > просто разобраться в причинах, они явно не в дистрибутиве. 
> 
> Проблемы явно в либо в дистрибутиве, либо в реализации команды update-kernel.
> 
> Это следует из того, что на всех 4-х компьютерах
> 1. установка ОС выполнялась из ОДНОГО и ТОГО же ISO-образа дистрибутива Альт
> СП Сервер 10.2 с ИДЕНТИЧНЫМ выбором параметров в мастере установки ОС.
> 2. На всех свежеустановленных ОС не было выполнено НИКАКИХ изменений, КРОМЕ
> установки пакета timeshift. После чего на каждом компьютере выполнена
> последовательность:
> apt-get update
> apt-get install update-kernel -y
> update-kernel -y
> reboot
> 
> После выполнения такой последовательности обновления ядра и перезагрузки на
> одной из 4-х машин сеть оказывается неработоспособной. Только фиксация имён
> сетевых интерфейсов перед обновлением ядра устраняет проблему.
> 
> > Начните с того,
> > что сравните пакетную базу на предмет udev rules, посмотрите настройки
> > именования в systemd.
> > 
> > Лично я тут ошибки не вижу. Ошибка на ядро? Нет, ваш dmesg подтвердит, что
> > оно не имеет никакого отношения к переименованию интерфейсов. Их
> > переименовывает systemd или udevd, в зависимости от настроек. Именно в них
> > отличия. Менялось ядро, менялись systemd и udevd, но если почитать
> > документацию и настроить всё изначально так, чтобы ничего при обновлении не
> > переименовывалось, никаких дополнительных костылей не потребуется.
> 
> Повторюсь ещё раз. Никаких изменений в ОС после её установки с моей стороны
> не производилось - мной НИЧЕГО не настраивалось.
> (*) Выполнено только лишь 
> apt-get update
> apt-get install timeshift
> apt-get install update-kernel 
> update-kernel 
> reboot
> 
> ВСЁ!
> 
> Т.е. совокупность (Установка из одного браза
> ОС)+timeshift+update-kernel+update-kernel на одной машине из 4-х приводит к
> поломке сети.
> 
> Влияние администратора (моё) состоит лишь в последовательном запуске (*).

Сетевая карта на данной машине какая? А какие на тех?
Comment 22 rsrs 2025-11-10 12:37:23 MSK
Я вполне допускаю, что проблема не частая и с трудом мб воспроизводима на стенде. В этом случае одним из простейших решений видится, как минимум, пятистрочное дополнение программы update-kernel, выполняющая блокировку переименования сетевых интерфейсов перед запуском основного функционала программы.
Comment 23 rsrs 2025-11-10 12:40:27 MSK
(Ответ для Антон Мидюков на комментарий #21)
> (Ответ для rsrs на комментарий #20)
> > (Ответ для Leonid Krivoshein на комментарий #19)
> > > (In reply to rsrs from comment #18)
> > > > Да, вероятно. Но для пользователя это выглядит так, что "update-kernel вдруг
> > > > поломал систему".
> > > Здесь пользователь = администратор, который в исходной заявке РМ утверждал,
> > > что это произошло на одной машине и не случилось на трёх других. Так надо
> > > просто разобраться в причинах, они явно не в дистрибутиве. 
> > 
> > Проблемы явно в либо в дистрибутиве, либо в реализации команды update-kernel.
> > 
> > Это следует из того, что на всех 4-х компьютерах
> > 1. установка ОС выполнялась из ОДНОГО и ТОГО же ISO-образа дистрибутива Альт
> > СП Сервер 10.2 с ИДЕНТИЧНЫМ выбором параметров в мастере установки ОС.
> > 2. На всех свежеустановленных ОС не было выполнено НИКАКИХ изменений, КРОМЕ
> > установки пакета timeshift. После чего на каждом компьютере выполнена
> > последовательность:
> > apt-get update
> > apt-get install update-kernel -y
> > update-kernel -y
> > reboot
> > 
> > После выполнения такой последовательности обновления ядра и перезагрузки на
> > одной из 4-х машин сеть оказывается неработоспособной. Только фиксация имён
> > сетевых интерфейсов перед обновлением ядра устраняет проблему.
> > 
> > > Начните с того,
> > > что сравните пакетную базу на предмет udev rules, посмотрите настройки
> > > именования в systemd.
> > > 
> > > Лично я тут ошибки не вижу. Ошибка на ядро? Нет, ваш dmesg подтвердит, что
> > > оно не имеет никакого отношения к переименованию интерфейсов. Их
> > > переименовывает systemd или udevd, в зависимости от настроек. Именно в них
> > > отличия. Менялось ядро, менялись systemd и udevd, но если почитать
> > > документацию и настроить всё изначально так, чтобы ничего при обновлении не
> > > переименовывалось, никаких дополнительных костылей не потребуется.
> > 
> > Повторюсь ещё раз. Никаких изменений в ОС после её установки с моей стороны
> > не производилось - мной НИЧЕГО не настраивалось.
> > (*) Выполнено только лишь 
> > apt-get update
> > apt-get install timeshift
> > apt-get install update-kernel 
> > update-kernel 
> > reboot
> > 
> > ВСЁ!
> > 
> > Т.е. совокупность (Установка из одного браза
> > ОС)+timeshift+update-kernel+update-kernel на одной машине из 4-х приводит к
> > поломке сети.
> > 
> > Влияние администратора (моё) состоит лишь в последовательном запуске (*).
> 
> Сетевая карта на данной машине какая? А какие на тех?

Сетевые карты разные.

Если нужно, я могу выполнить требуемые действия по сбору информации об оборудовании на всех 4-х серверах.
Comment 24 Антон Мидюков 2025-11-10 12:47:21 MSK
(Ответ для rsrs на комментарий #23)
> (Ответ для Антон Мидюков на комментарий #21)
> > Сетевая карта на данной машине какая? А какие на тех?
> 
> Сетевые карты разные.
> 
> Если нужно, я могу выполнить требуемые действия по сбору информации об
> оборудовании на всех 4-х серверах.

Предоставьте, пожалуйста, вывод команды:
lspci -vvk
Comment 25 rsrs 2025-11-10 12:57:14 MSK
Created attachment 20032 [details]
Вывод lspci -vvk для 4-х машин
Comment 26 rsrs 2025-11-10 12:58:13 MSK
(Ответ для rsrs на комментарий #25)
> Создано вложение 20032 [details] [подробности]
> Вывод lspci -vvk для 4-х машин

data2.lspci-vvk.log - лог с проблемной машины
Comment 27 Антон Мидюков 2025-11-10 13:03:13 MSK
Возможно позволит понять, что случилось, следующее:

Со старым ядром:
# udevadm test-builtin net_id /sys/class/net/eno1
# udevadm test-builtin net_id /sys/class/net/eno2


И с новым:
# udevadm test-builtin net_id /sys/class/net/eno1np0
# udevadm test-builtin net_id /sys/class/net/eno2np1
Comment 28 rsrs 2025-11-10 13:22:58 MSK
(Ответ для Антон Мидюков на комментарий #27)
> Возможно позволит понять, что случилось, следующее:

Возможно это и позволило бы. Но так долго держать сервер в тестовом режиме было нельзя, поэтому сервер уже отдан в эксплуатацию и посмотреть на его состояние со старым ядром уже не получится.


Могу лишь отметить, что достаточно большой объём файлов с логам перед обновлением ядра и после, собранный на проблемной машине, находится в обращении в техническую поддержку "Потеря сети после обновления ядра [#204205]".

Там можно найти подробную информацию.
> 
> Со старым ядром:
> # udevadm test-builtin net_id /sys/class/net/eno1
> # udevadm test-builtin net_id /sys/class/net/eno2
> 
> 
> И с новым:
> # udevadm test-builtin net_id /sys/class/net/eno1np0
> # udevadm test-builtin net_id /sys/class/net/eno2np1
Comment 29 Leonid Krivoshein 2025-11-10 15:27:39 MSK
(In reply to rsrs from comment #23)
> Сетевые карты разные.
Различия могут быть как в оборудовании, так и в настройках.

> Если нужно, я могу выполнить требуемые действия по сбору информации об
> оборудовании на всех 4-х серверах.
Я смотрел эту заявку и видел, что она не доработана. Вы (и мы) не доразобрались в причинах, а это первоочередное. Болячки полагается лечить, когда диагноз известен. Нужно сравнить две ситуации, два отчёта sosreport.
Comment 30 rsrs 2025-11-10 15:58:47 MSK
(Ответ для Leonid Krivoshein на комментарий #29)
> (In reply to rsrs from comment #23)
> > Сетевые карты разные.
> Различия могут быть как в оборудовании, так и в настройках.
> 
> > Если нужно, я могу выполнить требуемые действия по сбору информации об
> > оборудовании на всех 4-х серверах.
> Я смотрел эту заявку и видел, что она не доработана. Вы (и мы) не
> доразобрались в причинах, а это первоочередное. Болячки полагается лечить,
> когда диагноз известен. Нужно сравнить две ситуации, два отчёта sosreport.

Сервер уже в эксплуатации. 
Есть шанс забрать его на минимальное время для тестирования.

Поэтому нужна подробная инструкция без необходимости уточнений в ходе её исполнения — чтобы успеть собрать все данные в ограниченное время.
Comment 31 rsrs 2025-11-11 12:18:57 MSK
(Ответ для Leonid Krivoshein на комментарий #29)
> (In reply to rsrs from comment #23)
> > Сетевые карты разные.
> Различия могут быть как в оборудовании, так и в настройках.
> 
> > Если нужно, я могу выполнить требуемые действия по сбору информации об
> > оборудовании на всех 4-х серверах.
> Я смотрел эту заявку и видел, что она не доработана. Вы (и мы) не
> доразобрались в причинах, а это первоочередное. Болячки полагается лечить,
> когда диагноз известен. Нужно сравнить две ситуации, два отчёта sosreport.

Обнаружилось любопытное ;)

Логи ввиду размера прикрепить не удалось, поэтому ссылка вложения к этому сообщению: https://disk.yandex.ru/d/PL0_uTbMkMsezw

Если обновлять ядро непосредственно из репозиториев с зеркал Альта, то ядро 6.12 не предлагается к установке.
Во вложении лог "repo update.altsp.su-ALTLinux-c10f2.log"

--

Если обновлять ядро из локального зеркала репозитория, то ядро обновляется до 6.12.
Во вложении:
  - лог "repo 192.168.0.21-mirror c10f2.log" 
  - папка "192.168.0.21-mirror c10f2" с настройками и логами локального зеркала репозитория

--

Во вложении:
  Скрипты
    - "01 install timeshift.sh": выполнен непосредственно после установки ОС
    - "02 update-kernel.sh": выполнен непосредственно после "01 install timeshift.sh"
  В папке "-update-kernel-error-logs-"
    - логи, собранные до обновления ядра
    - логи, собранные после обновления ядра перед перезагрузкой
    - логи, собранные после обновления ядра после перезагрузки
Comment 32 Leonid Krivoshein 2025-11-11 22:02:15 MSK
(In reply to rsrs from comment #31)
> Если обновлять ядро непосредственно из репозиториев с зеркал Альта, то ядро
> 6.12 не предлагается к установке.
На эту тему стоит завести отдельный баг с шагами воспроизведения. Лог вывода не соответсвует скрипту, вывод apt-repo в логах не показан. По командам кажется, что добавляется репозиторий rsync: это значит, что список репозиториев был пуст перед этим либо выполняется смешение репозиториев, что недопустимо, даже с репозиторием диска. Вполне возможно, что update-kernel и не рассчитана на rsync. Тем не менее, в определённом окружении мне удалось добиться странного поведения update-kernel в результате которого ядро un-def не обновляется на 6.12. Что-то из окружения влияло на make-initrd, который ругался вылетая, но это не отрабатывало как ошибка в update-kernel. Помогало решить проблему предварительное перемонтирование /tmp с опцией exec.
Comment 33 Leonid Krivoshein 2025-11-11 22:24:32 MSK
А в логе "01 install timeshift.log" показан полный вывод, по нему уже понятней, но вот это точно ошибка:

# apt-repo
rpm [cert8] rsync://update.altsp.su/ALTLinux c10f2/branch/x86_64 classic gostcrypto
rpm [cert8] rsync://update.altsp.su/ALTLinux c10f2/branch/x86_64-i586 classic
rpm [cert8] rsync://update.altsp.su/ALTLinux c10f2/branch/noarch classic
rpm cdrom:[ALT SP Server 10.2 11100-01 x86_64 build 2024-11-27]/ ALTLinux main

Смешение репозиториев, не учтена особенность дистрибутива, не выполнено переключение на Интернет репозиторий с репозитория диска, где одновременно меняется disttag для многих уже установленных пакетов.
Comment 34 rsrs 2025-11-11 22:42:35 MSK
(Ответ для Leonid Krivoshein на комментарий #33)
> А в логе "01 install timeshift.log" показан полный вывод, по нему уже
> понятней, но вот это точно ошибка:
> 
> # apt-repo
> rpm [cert8] rsync://update.altsp.su/ALTLinux c10f2/branch/x86_64 classic
> gostcrypto
> rpm [cert8] rsync://update.altsp.su/ALTLinux c10f2/branch/x86_64-i586 classic
> rpm [cert8] rsync://update.altsp.su/ALTLinux c10f2/branch/noarch classic
> rpm cdrom:[ALT SP Server 10.2 11100-01 x86_64 build 2024-11-27]/ ALTLinux
> main
> 
> Смешение репозиториев, не учтена особенность дистрибутива, не выполнено
> переключение на Интернет репозиторий с репозитория диска, где одновременно
> меняется disttag для многих уже установленных пакетов.

Там нет физически ни dvd-привода, ни собственно диска, поэтому смешения быть не может.
Comment 35 rsrs 2025-11-11 22:44:11 MSK
(Ответ для Leonid Krivoshein на комментарий #33)
> А в логе "01 install timeshift.log" показан полный вывод, по нему уже
> понятней, но вот это точно ошибка:
> 
> # apt-repo
> rpm [cert8] rsync://update.altsp.su/ALTLinux c10f2/branch/x86_64 classic
> gostcrypto
> rpm [cert8] rsync://update.altsp.su/ALTLinux c10f2/branch/x86_64-i586 classic
> rpm [cert8] rsync://update.altsp.su/ALTLinux c10f2/branch/noarch classic
> rpm cdrom:[ALT SP Server 10.2 11100-01 x86_64 build 2024-11-27]/ ALTLinux
> main
> 
> Смешение репозиториев, не учтена особенность дистрибутива, не выполнено
> переключение на Интернет репозиторий с репозитория диска, где одновременно
> меняется disttag для многих уже установленных пакетов.

Думаю завтра попробовать варианты на виртуальной машине.
Comment 36 Leonid Krivoshein 2025-11-11 23:53:14 MSK
По логам уже почти всё понятно, но лучше всего дать такую команду:

su-
export SYSTEMD_LOG_LEVEL=debug
udevadm test-builtin net_setup_link /sys/class/net/eno1np0

Именно в таком варианте она покажет не только получившиеся значения, но и причины их получения. Сравнивать надо только после обновления на двух машинах. Так мы увидим, почему не отрабатывает NamePolicy=keep, введённая в v241.
Comment 37 Leonid Krivoshein 2025-11-12 01:28:49 MSK
Приведу здесь выжимку из логов...

99-default.link (не отличается):

[Match]
OriginalName=*

[Link]
NamePolicy=keep kernel database onboard slot path
AlternativeNamesPolicy=database onboard slot path
MACAddressPolicy=persistent

Внутриядерные зависимости модуля (не отличаются):

kernel/drivers/net/ethernet/intel/i40e/i40e.ko:
kernel/drivers/infiniband/hw/irdma/irdma.ko: kernel/drivers/net/ethernet/intel/i40e/i40e.ko kernel/drivers/net/ethernet/intel/ice/ice.ko kernel/drivers/infiniband/core/ib_uverbs.ko kernel/drivers/infiniband/core/ib_core.ko

udev/systemd без отличий:

libgudev-237-alt1.x86_64
libudev1-249.17-alt3.x86_64
systemd-249.17-alt3.x86_64
udev-249.17-alt3.x86_64
udev-rules-hotplug-cpu-1.0-alt1.noarch
udev-rules-sgutils-1.47-alt1.noarch

Кроме последнего, после обновления:
udev-rules-sgutils-1.48-alt1.c10.1.noarch

Всё остальное отличается...

Ядро до: 6.1.114-un-def-alt0.c10f.2
Ядро после: 6.12.56-6.12-alt0.c10f.2

lsmod до:
i40e                  520192  1 irdma

lsmod после:
i40e                  593920  1 irdma
libie                   8192  2 i40e,ice

udevadm test-builtin net_id ... |grep ID_ до:
ID_NET_NAMING_SCHEME=v249
ID_NET_NAME_MAC=enx3cecef723106
ID_OUI_FROM_DATABASE=Super Micro Computer, Inc.
ID_NET_NAME_ONBOARD=eno1
ID_NET_LABEL_ONBOARD=Intel LAN X557 #1
ID_NET_NAME_PATH=enp26s0f0

udevadm test-builtin net_id ... |grep ID_ после:
ID_NET_NAMING_SCHEME=v249
ID_NET_NAME_MAC=enx3cecef723106
ID_OUI_FROM_DATABASE=Super Micro Computer, Inc.
ID_NET_NAME_ONBOARD=eno1np0
ID_NET_LABEL_ONBOARD=Intel LAN X557 #1
ID_NET_NAME_PATH=enp26s0f0np0

$ ip addr show dev eno1 |head -n3 до:
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 3c:ec:ef:72:31:06 brd ff:ff:ff:ff:ff:ff
    altname enp26s0f0

$ ip addr show dev eno1np0 |head -n3 после:
2: eno1np0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 3c:ec:ef:72:31:06 brd ff:ff:ff:ff:ff:ff
    altname enp26s0f0np0

То есть, версии udev и systemd не изменились, не поменялась политика наименования, в плохом случае политика keep почему-то не отработала, но видимо отработала какая-то из следующих за ней. Например, если ядро утверждает, что выдаёт предсказуемое имя, могла отработать политика kernel. Но по dmesg видно, что ядро дало имя eth0, переименование произошло уже после запуска systemd на 27-й секунде загрузки. Ядро у нас действительно поменялось и оно стало дополнительно сообщать через sysfs имя физического порта (np0). Вот что об этом сказано в документации:

When creating names for network cards, some naming schemes use data from sysfs populated by the kernel. This means that although a specific naming scheme in udev(7) is picked, the network card's name can still change when a new kernel version adds a new sysfs attribute. For example, if kernel starts setting the phys_port_name, udev will append the "nphys_port_name" suffix to the device name.

Можно ограничинить получение дополнительных атрибутов в sysfs через /etc/udev/hwdb.d/50-net-naming-allowlist.hwdb и /etc/udev/hwdb.d/50-net-naming-denylist.hwdb, как это сделать говорится здесь: https://www.freedesktop.org/software/systemd/man/latest/systemd.net-naming-scheme.html . Зачем-то копируется 99-default.link, хотя он есть в c10f2 в составе udev. Осталось понять, почему в плохом случае политика отрабатывает именно так, а не иначе, как предлагалось в предыдущем комментарии. Также нужно будет внимательней изучить содержимое /etc/udev/hwdb.d/, оно не попало в sosreport.

Забегая вперёд: то, что пытаетесь реализовать, это политика mac, которую задвинули аж на последнее место. Есть много причин на неё не ориентироваться. Да и вообще в этом багрепорте речь идёт об изобретении того, что уже сделано в systemd штатными средствами.
Comment 38 Leonid Krivoshein 2025-11-12 01:45:27 MSK
https://github.com/flatcar/Flatcar/issues/36#issuecomment-595249283 -- к слову, были в 2020 подобные жалобы, всё давно исправили, т.е. с v240 схемы именования должны работать. Как раз нужно пригледеться к отладочному выводу вида "Device already has a name given by userspace, not renaming", возможно проблема как раз в том, что отрабатывает keep сразу с новым значением.
Comment 39 Leonid Krivoshein 2025-11-12 02:03:22 MSK
https://github.com/systemd/systemd/issues/9006#issuecomment-389928989 -- и забегая совсем вперёд, тут больше для Антона: у нас нет systemd в initrd, но если переименование кто-то делает там, например, с dracut, то все созданные .link файлы тоже должны попасть в stage1 при его генерации.
Comment 40 rsrs 2025-11-12 07:16:04 MSK
(Ответ для Leonid Krivoshein на комментарий #36)
> По логам уже почти всё понятно, но лучше всего дать такую команду:
> 
> su-
> export SYSTEMD_LOG_LEVEL=debug
> udevadm test-builtin net_setup_link /sys/class/net/eno1np0
> 
> Именно в таком варианте она покажет не только получившиеся значения, но и
> причины их получения. Сравнивать надо только после обновления на двух
> машинах. Так мы увидим, почему не отрабатывает NamePolicy=keep, введённая в
> v241.

Уточните, пожалуйста, о каких двух машинах идёт речь? Проблемной и беспроблемной? 

Собрать эту информацию после обновления ядра до перезагрузки или после?
Comment 41 Антон Мидюков 2025-11-12 08:00:51 MSK
(Ответ для Leonid Krivoshein на комментарий #39)
> https://github.com/systemd/systemd/issues/9006#issuecomment-389928989 -- и
> забегая совсем вперёд, тут больше для Антона: у нас нет systemd в initrd, но
> если переименование кто-то делает там, например, с dracut, то все созданные
> .link файлы тоже должны попасть в stage1 при его генерации.

В initrd модули ядра для поддержки сети не попадают. dracut не используется.
Comment 42 Антон Мидюков 2025-11-12 08:04:45 MSK
>Ядро у нас действительно поменялось и оно стало дополнительно сообщать через sysfs имя физического порта (np0).

Ну вот и причина. Я бы хотел понять, поменялся используемый драйвер сети со стороннего на апстримный или нет.
Comment 43 rsrs 2025-11-12 10:11:18 MSK
Created attachment 20049 [details]
Логи после обновления ядра перед перезагрузкой
Comment 44 rsrs 2025-11-12 10:11:54 MSK
Created attachment 20050 [details]
Логи после обновления ядра после перезагрузки
Comment 45 rsrs 2025-11-12 10:12:50 MSK
(Ответ для Leonid Krivoshein на комментарий #36)
> По логам уже почти всё понятно, но лучше всего дать такую команду:
> 
> su-
> export SYSTEMD_LOG_LEVEL=debug
> udevadm test-builtin net_setup_link /sys/class/net/eno1np0
> 
> Именно в таком варианте она покажет не только получившиеся значения, но и
> причины их получения. Сравнивать надо только после обновления на двух
> машинах. Так мы увидим, почему не отрабатывает NamePolicy=keep, введённая в
> v241.

Выложил 
  after-update-kernel-after-reboot-20251112-095435.7z
  after-update-kernel-before-reboot-20251112-094917.7z
Comment 46 rsrs 2025-11-12 10:13:44 MSK
(Ответ для Антон Мидюков на комментарий #42)
> >Ядро у нас действительно поменялось и оно стало дополнительно сообщать через sysfs имя физического порта (np0).
> 
> Ну вот и причина. Я бы хотел понять, поменялся используемый драйвер сети со
> стороннего на апстримный или нет.

Какую информацию и в какой момент следует собрать?
Comment 47 rsrs 2025-11-12 10:15:08 MSK
(Ответ для rsrs на комментарий #45)
> (Ответ для Leonid Krivoshein на комментарий #36)
> > По логам уже почти всё понятно, но лучше всего дать такую команду:
> > 
> > su-
> > export SYSTEMD_LOG_LEVEL=debug
> > udevadm test-builtin net_setup_link /sys/class/net/eno1np0
> > 
> > Именно в таком варианте она покажет не только получившиеся значения, но и
> > причины их получения. Сравнивать надо только после обновления на двух
> > машинах. Так мы увидим, почему не отрабатывает NamePolicy=keep, введённая в
> > v241.
> 
> Выложил 
>   after-update-kernel-after-reboot-20251112-095435.7z
>   after-update-kernel-before-reboot-20251112-094917.7z

Это логи с проблемной машины.
Этого достаточно?
Comment 48 Leonid Krivoshein 2025-11-12 11:50:51 MSK
(In reply to rsrs from comment #40)
> Уточните, пожалуйста, о каких двух машинах идёт речь? Проблемной и
> беспроблемной? 
Верно.

> Собрать эту информацию после обновления ядра до перезагрузки или после?
Только после.

(In reply to Антон Мидюков from comment #42)
> Ну вот и причина. Я бы хотел понять, поменялся используемый драйвер сети со
> стороннего на апстримный или нет.
Можно уточнить у vt@ насчёт i40e. Внешне разница есть только в lsmod. Скорее какая-то настройка в BIOS вокруг IOMMU / SR-IOV на отличающейся машине стала добавлять "np0" к пути и к имени интерфейса в более новой версии драйвера, о чём как раз говорится в документации systemd.

Настройки BIOS/UEFI в любом случае стоит самостоятельно сравнить. И чего тут не было сделано -- вывод с -nnk:

lspci -nnk -s <PCI SLOT>

Интересует, отличаются ли PCI ID i40e у машин с разными результатами?
Comment 49 rsrs 2025-11-12 12:00:29 MSK
(Ответ для Leonid Krivoshein на комментарий #48)
> (In reply to rsrs from comment #40)
> > Уточните, пожалуйста, о каких двух машинах идёт речь? Проблемной и
> > беспроблемной? 
> Верно.
> 
> > Собрать эту информацию после обновления ядра до перезагрузки или после?
> Только после.
> 
> (In reply to Антон Мидюков from comment #42)
> > Ну вот и причина. Я бы хотел понять, поменялся используемый драйвер сети со
> > стороннего на апстримный или нет.
> Можно уточнить у vt@ насчёт i40e. Внешне разница есть только в lsmod. Скорее
> какая-то настройка в BIOS вокруг IOMMU / SR-IOV на отличающейся машине стала
> добавлять "np0" к пути и к имени интерфейса в более новой версии драйвера, о
> чём как раз говорится в документации systemd.
> 
> Настройки BIOS/UEFI в любом случае стоит самостоятельно сравнить. И чего тут
> не было сделано -- вывод с -nnk:
> 
> lspci -nnk -s <PCI SLOT>
> 

Что подставить вместо <PCI SLOT>? Можно точную командную строку?
Comment 50 rsrs 2025-11-12 12:03:57 MSK
(Ответ для rsrs на комментарий #49)
> (Ответ для Leonid Krivoshein на комментарий #48)
> > (In reply to rsrs from comment #40)
> > > Уточните, пожалуйста, о каких двух машинах идёт речь? Проблемной и
> > > беспроблемной? 
> > Верно.
> > 
> > > Собрать эту информацию после обновления ядра до перезагрузки или после?
> > Только после.
> > 
> > (In reply to Антон Мидюков from comment #42)
> > > Ну вот и причина. Я бы хотел понять, поменялся используемый драйвер сети со
> > > стороннего на апстримный или нет.
> > Можно уточнить у vt@ насчёт i40e. Внешне разница есть только в lsmod. Скорее
> > какая-то настройка в BIOS вокруг IOMMU / SR-IOV на отличающейся машине стала
> > добавлять "np0" к пути и к имени интерфейса в более новой версии драйвера, о
> > чём как раз говорится в документации systemd.
> > 
> > Настройки BIOS/UEFI в любом случае стоит самостоятельно сравнить. И чего тут
> > не было сделано -- вывод с -nnk:
> > 
> > lspci -nnk -s <PCI SLOT>
> > 
> 
> Что подставить вместо <PCI SLOT>? Можно точную командную строку?

Требуется это:

# lspci -nnk | grep -i eth
1a:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection X722 for 1GbE [8086:37d1] (rev 09)
1a:00.1 Ethernet controller [0200]: Intel Corporation Ethernet Connection X722 for 1GbE [8086:37d1] (rev 09)

?
Comment 51 rsrs 2025-11-12 12:48:20 MSK
(Ответ для Leonid Krivoshein на комментарий #48)
> (In reply to rsrs from comment #40)
> > Уточните, пожалуйста, о каких двух машинах идёт речь? Проблемной и
> > беспроблемной? 
> Верно.
> 
> > Собрать эту информацию после обновления ядра до перезагрузки или после?
> Только после.
> 
> Настройки BIOS/UEFI в любом случае стоит самостоятельно сравнить. И чего тут
> не было сделано -- вывод с -nnk:
> 
> lspci -nnk -s <PCI SLOT>
> 

Логи с машины без ошибки: https://disk.yandex.ru/d/YWW2Tu886nR3OA
Логи с машины с ошибкой: https://disk.yandex.ru/d/ypnKbbSuumKDeg
Comment 52 Leonid Krivoshein 2025-11-12 13:15:39 MSK
(In reply to rsrs from comment #50)
> Требуется это:
Да, сойдёт! На будущее: lspci -nnk -s 1a:00.0 покажет сразу subID + модуль ядра.

> # lspci -nnk | grep -i eth
> 1a:00.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection
> X722 for 1GbE [8086:37d1] (rev 09)
https://cateee.net/lkddb/web-lkddb/NET_VENDOR_INTEL.html
Ищите на странице "37d1" в нижней части -- поддержка с апстримных ядер 4.3+.
Comment 53 Leonid Krivoshein 2025-11-12 14:19:29 MSK
Обнаружил недостачу (2 shaba@)!

В убунтовском udev есть такой файл: /lib/systemd/network/73-usb-net-by-mac.link:

[Match]
Path=*-usb-*

[Link]
NamePolicy=mac

Интересно, есть ли он в апстримной версии? У нас даже в Сизифе его нет. Отладка показывает, что на ряде конфигураций применяется именно он и при его отсутсвии как раз ожидаются проблемы с некоторыми Ethernet'ами.
Comment 54 Leonid Krivoshein 2025-11-12 14:40:08 MSK
(In reply to Leonid Krivoshein from comment #53)
> Интересно, есть ли он в апстримной версии? У нас даже в Сизифе его нет.
В апстримной версии его тоже нет. Однако и в Debian он тоже имеется. Пример:

# export SYSTEMD_LOG_LEVEL=debug
# udevadm test-builtin net_setup_link /sys/class/net/enx180f76011320
SELinux enabled state cached to: disabled
Trying to open "/etc/systemd/hwdb/hwdb.bin"...
Trying to open "/etc/udev/hwdb.bin"...
Trying to open "/usr/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/systemd/hwdb/hwdb.bin"...
Trying to open "/lib/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          249
file size:        11619158 bytes
header size             80 bytes
strings            2383646 bytes
nodes              9235432 bytes
Load module index
Found cgroup2 on /sys/fs/cgroup/, full unified hierarchy
Found container virtualization none.
Loaded timestamp for '/etc/systemd/network'.
Loaded timestamp for '/usr/lib/systemd/network'.
Parsed configuration file /usr/lib/systemd/network/99-default.link
Parsed configuration file /usr/lib/systemd/network/73-usb-net-by-mac.link
Created link configuration context.
ID_NET_DRIVER=ax88179_178a
enx180f76011320: Device has name_assign_type=4
enx180f76011320: Config file /usr/lib/systemd/network/73-usb-net-by-mac.link is applied
enx180f76011320: Failed to get ACTION= property: No such file or directory
enx180f76011320: Could not apply link configuration, ignoring: No such file or directory
ID_NET_LINK_FILE=/usr/lib/systemd/network/73-usb-net-by-mac.link
Unload module index
Unloaded link configuration context.

Схема именовния та же, что в c10f2: v249.
Comment 55 Leonid Krivoshein 2025-11-12 16:51:26 MSK
Если верить документации, при отладке мы должны были увидеть что-то вроде:

https://git.altlinux.org/gears/s/systemd.git?p=systemd.git;a=blob;f=man/systemd.link.xml#l1554

Т.е., даже при наличии других файлов .link, не совпадающих по условиям, успешное применение 99-default.link. Но мы видим какие-то ошибки с не очень внятной диагностикой по типу вывода выше и ниже:

...
ID_NET_DRIVER=virtio_net
ens5: Device has name_assign_type=4
ens5: Config file /lib/systemd/network/99-default.link is applied
ens5: Failed to get ACTION= property: No such file or directory
ens5: Could not apply link configuration, ignoring: No such file or directory
ID_NET_LINK_FILE=/lib/systemd/network/99-default.link
...

...
eno2np1: Device has name_assign_type=4
eno2np1: Config file /lib/systemd/network/99-default.link is applied
eno2np1: Failed to get ACTION= property: No such file or directory
eno2np1: Could not apply link configuration, ignoring: No such file or directory
ID_NET_DRIVER=i40e
ID_NET_LINK_FILE=/lib/systemd/network/99-default.link
...

Could not apply link configuration, ignoring

Я проверил, такое происходит не только в ОС Альт. Возможно это нормально, поскольку здесь речь не о финальном конфигурировании, это про builtin, но всё же интересно, почему так происходит? Почему не применяются настройки из дефолтного .link-файла, хотя по документации должны?

Ковыряние в исходниках привело к тому, что для полной диагностики нужно поднять ещё и уровень логирования udev.log_level=debug или через udev_log=debug в конфиге /etc/udev/udev.conf + make-initrd. Но это тоже ничего не дало, даже при запуске udevadm -d..., т.е. уровень udev никак не хочет диагностироваться. Возможно, где-то настройка логирования udev перебивается при загрузке.

https://git.altlinux.org/gears/s/systemd.git?p=systemd.git;a=blob;f=src/udev/net/link-config.c;hb=3b49d02584ae8c69a5de4c0d5484fc81aaf5bfb7#l603

https://git.altlinux.org/gears/s/systemd.git?p=systemd.git;a=blob;f=src/libsystemd/sd-device/sd-device.c;hb=3b49d02584ae8c69a5de4c0d5484fc81aaf5bfb7#l1121

По исходникам видно, что вылет почти сразу из-за отсутсвия действия add/remove/change, что логично, т.к. со стороны udev нет такого эвента. -ENOENT это и есть No such file or directory из-за device->action < 0.

Всё же интересно сравнить PCI ID/SUB ID между нормой и плохим случаем. Можно выложить вывод прямо в баг (всего три строки) или просто сказать -- совпадают ID или нет. Также стоит сравнить настройки BIOS. По отладочному выводу видно, что 99-default.link не применяется в обоих случаях, но я мог запутаться в изобилии логов. Хорошо бы ещё сравнить вывод udevadm -d test /sys/class/net/<iface> -- вот он единственный, кто сейчас показал причину, почему так происходит, как отрабатывают политики, также видно, что многое приезжает из udev hwdb.