Вопрос или проблема
Вот обзор моей установки:
-
У меня есть TFTP-сервер, который размещает файлы vmlinuz и initrd.img. Я использую ядро ubuntu-lowlatency, предназначенное для HPC-машин (https://unix.stackexchange.com/questions/739769/how-do-you-install-the-linux-lowlatency-kernel-and-why-does-it-stops-at-version). Эти файлы были получены из локальной установки на том же устройстве, для которого я пытаюсь настроить загрузку по сети.
-
Файловая система корня обслуживается через NFS. Я получил базовое изображение корня, извлекая ubuntu-server-minimal.squashfs с живого CD. Однако я думаю, что эта информация на данном этапе не имеет значения, поскольку загрузка не достигает этой точки.
Для сетевой загрузки я использую iPXE, и ядро, и файл initrd загружаются, и процесс загрузки начинается нормально. В консоли я вижу сообщения, связанные с загрузкой драйверов mellanox, но сразу после этого появляются следующие строки:
запрос DHCP-соединения
аренда 192.168.1.12 на 7200 секунд
добавление маршрута к 192.168.1.0/24
добавление основного маршрута через 192.168.1.151
выход из-за oneshot
dhcpcd завершен
connect: connection timed out
На этом этапе процесс зависает, и примерно через 5 минут говорит, что не удалось подключиться к серверу nfs, потому что сетевое устройство не готово. Что мне делать, чтобы исправить эту ошибку и продолжить процесс гладкой загрузки?
Ответ или решение
Проблемы с DHCP во время сетевой загрузки Ubuntu, особенно когда dhcpcd (демон DHCP клиента) завершает работу, могут быть источником значительных преград в установке PXE (Preboot Execution Environment) загрузки. Эти проблемы могут быть вызваны множеством факторов, от некорректных настроек DHCP-сервера до неверных конфигураций клиента и сетевых интерфейсов.
Теория
DHCPCD — это daemon, который управляет получением IP-адреса для клиентских устройств через протокол DHCP. "Exiting due to oneshot" указывает на то, что dhcpcd сконфигурирован для "однократного" (oneshot) выполнения, а затем завершает работу. Это поведение приемлемо для среды, где нужна быстрая настройка сети для одноразовых задач, но не подходит для постоянного мониторинга и управления сетевой конфигурацией, особенно в условиях сетевой загрузки.
Пример
Ваш случай — это типичный сценарий, когда начало загрузки проходит успешно, система получает IP-адрес от DHCP-сервера, но затем, по завершении работы dhcpcd, возникает потеря сетевого соединения, прерывая доступ к NFS-серверу для получения корневой файловой системы. Это может быть связано с рядом факторов:
-
Топология сети и маршруты. После получения IP-адреса и добавления маршрутов, отсутствует поддержание соединения, необходимого для продолжения работы NFS.
-
Конфигурация dhcpcd. Ваша конфигурация возможно настроена для одноразового получения IP без поддержания активного соединения.
-
Аппаратное обеспечение. Некорректная работа сетевых драйверов после первичной инициализации может приводить к проблемам с соединением.
-
Настройка NFS. В случае проблем с зависимостями, настройка NFS может не сработать, если соединение теряется на этапе монтирования.
Применение
Чтобы исправить эту проблему и обеспечить корректное функционирование сетевой загрузки, можно предпринять следующие шаги:
-
Проверка и обновление конфигурации dhcpcd.
- Проверьте конфигурационные файлы
dhcpcd.conf
, в которых можно отключить режим "oneshot". Это обеспечит работу dhcpcd в режиме, поддерживающем соединение. - Убедитесь, что настройки позволяют повторное получение и обновление DHCP-аренды, необходимой для долгосрочного поддержания соединения.
Пример конфигурации может выглядеть так:
# тестирование потока DHCP-информации option rapid_commit interface eth0 background persistent lease /var/lib/dhcpcd/dhcpcd-eth0.lease noipv4ll
- Проверьте конфигурационные файлы
-
Настройка сетевых интерфейсов после загрузки ядра.
- Используйте скрипты initrd для повторной активации интерфейса:
Создайте скрипт, выполняющий перезапуск сети после загрузки:#!/bin/sh ifconfig eth0 up dhcpcd --noarp -b eth0
- Используйте скрипты initrd для повторной активации интерфейса:
-
Перепроверка NFS-конфигурации.
- Убедитесь, что ваш NFS-сервер доступен и исправно функционирует. Проверка включает: доступность порта, наличие необходимых полномочий на стороне сервера.
- Убедитесь, что на стороне сервера файл
/etc/exports
корректно настроен и разрешает доступ с клиента на импортируемый каталог.
-
Конфигурация среды загрузки.
- Проверьте конфигурацию PXE и iPXE. Дополнительные параметры загрузки ядра могут быть необходимы, чтобы убедиться, что вся инфраструктура поддерживает долгосрочные подключения.
- Добавьте дополнительные проверочные команды, передаваемые через параметры загрузки ядра:
ip=dhcp root=/dev/nfs nfsroot=192.168.1.151:/srv/nfs/ubuntufs
-
Обновление прошивки и драйверов сетевых адаптеров.
- Обновите все актуальные драйвера сетевых карт, так как несоответствие версии драйверов и ядра может затруднить установление стабильного соединения.
Заключение и применение данных рекомендаций позволит устранить разрыв в процессе загрузки системы, обеспечив бесперебойную работу сетевой загрузки. Все шаги должны быть проделаны в том порядке, в котором они изложены, чтобы эффективно диагностировать и устранить неисправность.