Безжесткий загрузка Linux – NFS-ресурс не монтируется во время загрузки ramdisk

Вопрос или проблема

(Это мой первый пост, надеюсь, я правильно его оформляю). Я добавил как можно больше информации, не делая это слишком длинным.

В чем заключается моя основная проблема, так это в том, что я сталкиваюсь с трудностями при попытке выполнить бездисковую загрузку PXE на NFS-сервер (CentOS 6.7 или CentOS 7). Я пробовал различные вещи, и мне не удается воспроизвести тот успех, который у меня изначально был с сервером и клиентом CentOS7. Каждый раз, следуя своим заметкам, я никуда не продвигаюсь.

Наиболее распространенные ошибки, которые я получаю (в зависимости от того, какой файл initrd.img или initramfs*.img я использую), это

Тикер *** с текстовой строкой состояния и сообщением

Запущена стартовая задача для dev-nfs.device (xx с / 1мин 30с)

Затем происходит тайм-аут, и появляется сообщение

Тайм-аут ожидания устройства dev-nfs.device
Неудовлетворенная зависимость для проверки файловой системы на /dev/nfs
Неудовлетворенная зависимость для /sysroot
Неудовлетворенная зависимость для корневой файловой системы Initrd
Неудовлетворенная зависимость для перезагрузки конфигурации из реального корня

Указанная ошибка возникает, когда я копирую (любой из) файлов initramfs-3.10.*.img из /boot/ в местоположение PXE-образа.

Если я пытаюсь сгенерировать новый образ initramfs с помощью dracut, также возникает вышеуказанная ошибка.

dracut initramfsnew.img

Возможно, я либо не знаю, как правильно создать initramfs, либо действительно не понимаю функций initrd.img и initramfs. Я считаю, что тайм-аут происходит из-за того, что драйверы NFS еще не загружены на этом этапе загрузки, и клиент не может правильно смонтировать общий доступ к NFS. Я думаю, что ошибка заключается в том, что я неправильно понимаю, как работают initrd.img и initramfs*.img.

Если я загружаю initrd.img с зеркального сайта CentOS, я доходил до 90% и затем ошибка меняется на

Нет /sbin/init, выполняю попытку возврата

Теперь я нахожусь в (в поисках лучшего термина, полузагруженной) оболочке, которая дает мне базовую навигацию по NFS. Я могу зайти в /home/disklessuser/ и даже записывать в NFS или читать новые файлы с NFS (проделал простые команды ‘touch’ как на сервере, так и на клиенте). Что, похоже, отсутствует, в первую очередь, это возможность входа в систему в этом случае, а также правильная граница для директорий (т.е. я, похоже, вошел как root на данном этапе загрузки).

Основная конфигурация довольно стандартная, как я знаю:

/var/lib/tftpboot/pxelinux.cfg/default содержит (я опустил те части, которые, как я знаю, работают – PXE работает и указывает на правильный образ и т.д.):

menu label ^1) CentOS 7
  kernel /images/centos7/vmlinuz
  append root=/dev/nfs initrd=/images/centos7/initrd.img nfsroot=10.10.10.10:/srv/nfs/diskless/images/centos7/root rw selinux=0

Я пробовал варианты выше, заменив initrd.img на initramfs3.10*.img (различные версии находятся в /boot/ сервера) и пробовал добавлять такие параметры, как

ip=dhcp

поскольку документация dracut предполагает, что это сообщит ему получить путь nfsroot через DHCP, а не через меню PXE.

В настоящий момент я настроил свой DHCP следующим образом:

subnet 10.10.10.0 netmask 255.255.255.0 {
   option broadcast-address 10.10.10.255;
   option routers 10.10.10.1;
   range 10.10.10.100 10.10.10.150;

   next-server 10.10.10.10;
   option root-path "10.10.10.10:/var/lib/tftpboot";
   filename "pxelinux.0";
}

Возможно, это конфликтует с общим доступом к NFS, предписанным в меню PXE?

В любом случае, я буду признателен за любые рекомендации – возможно, для меня наибольшее значение имеет то, что делать с initrd или initramfs. Я предполагаю, что между ними нет больших различий, но как можно сгенерировать новый, который должен (надеюсь) включать базовые сетевые драйверы для разрешения загрузки NFS?

Во-вторых, почему отсутствует /sbin/init, когда я так близок к решению, используя initrd.img, хранящийся в каталоге зеркала CentOS под /os/x86_64/isolinux?

вы можете загрузить CentOS-7.0-1406-x86_64-DVD.iso с помощью HTML вместо NFS с

kernel   = /NWA_PXE/$HEAD_DIR$/images/pxeboot/vmlinuz 
append   = initrd=/NWA_PXE/$HEAD_DIR$/images/pxeboot/initrd.img root=live:http://$IP_BSRV$/$HEAD_DIR$/LiveOS/squashfs.img ksdevice=bootif repo=http://$IP_BSRV$/$HEAD_DIR$/ 
ipappend = 2

Источник Serva

вы можете легко изменить это на NFS, если это действительно необходимо

Основываясь на вашей информации, трудно сказать, что конкретно вызывает тайм-аут. Несколько предложений для попытки:

  • Загрузите систему с выключенным selinux, используя rd.break для входа в initrd перед загрузкой.
  • Проверьте, что вызывает тайм-аут. Убедитесь, что драйвер сети загружен и назначение dhcp сработало. Посмотрите, удастся ли вручную смонтировать nfs. Попробуйте вручную запустить dev-nfs.device.
  • Проверьте ваши шаги по различным документациям, например http://www.iram.fr/~blanchet/tutorials/diskless-centos-7.pdf
  • Попробуйте полностью понять процесс загрузки и создание файлов initramfs.

Несколько слов о загрузке экземпляра:

  • vmlinux/vmlinuz содержит только образ ядра с драйверами
  • initramfs содержит базовую файловую систему корня, которая полностью загружается в ОЗУ
  • Как правило (на настольных и серверных системах) обязанности initramfs заключаются в подготовке ядра (например, загрузка соответствующих драйверов ядра), монтировании файловой системы корня (в rhel 7, как правило, реальная файловая система корня будет в /sysroot после rd.break) и затем передаче загрузки реальной файловой системе корня.
  • В этом случае я предполагаю, что что-то идет не так при подготовке ядра, похоже, что что-то отсутствует или не может быть найдено внутри initramfs. Возможно, модули драйвера nfs.

Ответ или решение

Постановка задачи в области загрузки без диска Linux через NFS (Network File System) может быть непростой задачей, особенно когда дело доходит до настройки и отладки процессов инициализации системы. Рассмотрим основные аспекты, которые помогут вам справиться с проблемой неудачной монтировки NFS на виртуальной машине во время загрузки из RAM.

Анализ проблемы

Ваша проблема заключается в том, что при попытке загрузиться с PXE (Preboot Execution Environment) происходит таймаут монтирования NFS, а система не может продолжить инициализацию. Код ошибок, который вы получаете, указывает на то, что система ожидает монтирования устройства NFS, но не может его обнаружить в рамках установленного времени.

Возможные причины этой проблемы могут быть следующими:

  1. Отсутствующие модули NFS в инициализационном RAM-диске.
  2. Неправильная настройка DHCP или TFTP.
  3. Конфликты с SELinux или другими настройками безопасности.
  4. Проблемы с сетью или драйверами, необходимыми для доступа к NFS.

Рекомендации по решению проблемы

1. Проверьте конфигурацию DHCP и TFTP

Убедитесь, что ваша DHCP-настройка правильно передает параметры PXE. Обратите внимание на директиву next-server, которая указывает TFTP-сервер. Проверьте, что IP-адрес NFS-сервера (в данном случае 10.10.10.10) доступен и доступен для клиентской машины. Проверьте, правильно ли настроен TFTP-сервер и доступна ли необходимая информация в директориях /var/lib/tftpboot.

2. Пересоздание initramfs

  Для работы с NFS при загрузке из RAM-устройств необходимо, чтобы в инициализационном RAM-диске были включены соответствующие драйверы и инструменты. Таким образом, необходимо заново создать initramfs, убедившись, что он содержит необходимые модули. Используйте следующую команду, чтобы создать initramfs с правильными параметрами:

dracut --force initramfs-$(uname -r).img $(uname -r)

Убедитесь, что в процессе создания вы не забыли добавить необходимые пакеты, например, nfs-utils, которые понадобятся для работы с NFS.

3. Убедитесь в доступности сети

На этапе загрузки проверьте, загружаются ли сетевые драйверы и доступен ли ваш DHCP-сервер. Вы можете использовать rd.break в ваших параметрах загрузки, чтобы войти в режим отладки и проверить состояние сети:

append root=/dev/nfs initrd=/images/centos7/initrd.img nfsroot=10.10.10.10:/srv/nfs/diskless/images/centos7/root rw selinux=0 rd.break

4. Параметры для ядра и инициализационного RAM-диска

Попробуйте добавить параметр ip=dhcp, чтобы заставить систему получать сетевые параметры непосредственно от DHCP-сервера. Также полезно использовать параметр debug, чтобы собрать дополнительную диагностику для анализа:

append root=/dev/nfs initrd=/images/centos7/initrd.img nfsroot=10.10.10.10:/srv/nfs/diskless/images/centos7/root rw selinux=0 ip=dhcp debug

5. Исследование ошибок загрузки

Если вы видите сообщение о блокировке на этапе монтирования NFS, войдите в режим отладки rd.break и пытаетесь вручную монтировать NFS. Это может дать больше информации о том, почему загрузка не выполняется.

mount -o nolock 10.10.10.10:/srv/nfs/diskless/images/centos7/root /mnt

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

Заключение

Загрузка систем на базе Linux с использованием PXE и NFS требует тщательной настройки и понимания компонентов, участвующих в инициализации. Регулярные проверки конфигурации DHCP, корректное создание initramfs, проверка сетевых соединений и детальная отладка процессов будут ключом к успешному решению вашей проблемы. Если все рекомендованные шаги не сработают, возможно, вы захотите обратить внимание на документацию CentOS или сообщества для поиска специфических решений, вариантов и рекомендаций по данной теме.

Оцените материал
Добавить комментарий

Капча загружается...