Вопрос или проблема
(Это мой первый пост, надеюсь, я правильно его оформляю). Я добавил как можно больше информации, не делая это слишком длинным.
В чем заключается моя основная проблема, так это в том, что я сталкиваюсь с трудностями при попытке выполнить бездисковую загрузку 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, но не может его обнаружить в рамках установленного времени.
Возможные причины этой проблемы могут быть следующими:
- Отсутствующие модули NFS в инициализационном RAM-диске.
- Неправильная настройка DHCP или TFTP.
- Конфликты с SELinux или другими настройками безопасности.
- Проблемы с сетью или драйверами, необходимыми для доступа к 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 или сообщества для поиска специфических решений, вариантов и рекомендаций по данной теме.