Бездисковая загрузка Linux - общий ресурс NFS не монтируется во время загрузки ramdisk
(Это мой первый пост, надеюсь, я правильно его форматирую). Я добавил как можно больше информации, не будучи TL:DR.
Моя основная проблема заключается в том, что я ударился о стену при попытке выполнить бездисковую загрузку PXE на NFS-сервере (CentOS 6.7 или CentOS 7). Я пробовал разные вещи, и я не могу повторить тот успех, который был у меня изначально с сервером и клиентом CentOS7. Каждый раз, когда я слежу за своими записями, я ничего не получаю
Наиболее распространенные ошибки, которые я получаю (в зависимости от того, какой файл initrd.img или initramfs*.img я использую):
A ticker of *** that shows a text-based progress bar and the message
A start job is running for dev-nfs.device (xx s / 1min 30s)
Затем время ожидания и говорит
Timed out waiting for device dev-nfs.device
Dependency failed for File System Check on /dev/nfs
Dependency failed for /sysroot
Dependency failed for Initrd Root File System
Dependency failed for Reload Configuration from the Real Root
Вышеуказанная ошибка возникает, когда я копирую (любой из) initramfs-3.10.*. Img из /boot/ в расположение образа PXE.
Если я пытаюсь сгенерировать новый файл образа initramfs из dracut, он также выдает вышеуказанную ошибку.
dracut initramfsnew.img
Возможно, я либо не знаю, как сгенерировать правильные initramfs, либо я действительно не понимаю функций initrd.img и initramfs. Я считаю, что время ожидания истекает, потому что драйверы NFS еще не загружены на этой стадии процесса загрузки, поэтому клиент не может правильно смонтировать общий ресурс NFS. Я думаю, что причина в том, что я загрузил точно такой же PXE-клиент в его локальную ОС и вручную смонтировал общий ресурс NFS, и он работает на 100%, поэтому общий ресурс NFS активен и работает. Я считаю, что неправильно понимаю, как работают initrd.img и initramfs*.img.
Если я загружаю initrd.img с зеркального сайта CentOS, я получаю 90% пути, а затем ошибка меняется на
No /sbin/init trying fallback
Сейчас я нахожусь в (из-за отсутствия лучшего термина, наполовину загруженной) оболочке, которая дает мне базовую навигацию по общему ресурсу NFS. Я могу зайти в /home/disklessuser/ и даже записать в NFS или прочитать новые файлы из NFS (проверенные простые команды "touch" как на сервере, так и на клиенте). Чего, по-видимому, в первую очередь не хватает, это опция входа в систему в этом случае, а также правильная граница для каталогов (т.е. я, кажется, вошел в систему как root на этом этапе загрузки).
Базовая конфигурация довольно стандартная AFAIK:
/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?
2 ответа
На основании вашей информации трудно сказать, что именно вызывает тайм-аут. Несколько предложений, чтобы попробовать:
- Загрузите систему с отключенным selinux, используя rd.brak для входа в предварительную загрузку initrd.
- Проверьте, что вызывает таймаут. Проверьте, загружен ли сетевой драйвер и сработало ли назначение dhcp. Посмотрите, удастся ли вручную смонтировать nfs. Попробуйте вручную запустить dev-nfs.device.
- Проверьте свои действия в отношении различных документов, например, http://www.iram.fr/~blanchet/tutorials/diskless-centos-7.pdf
- Попробуйте полностью понять процесс загрузки и создания файлов initramfs.
Несколько слов о загрузке экземпляра:
- vmlinux / vmlinuz содержит только образ ядра с драйверами
- initramfs содержит базовую корневую файловую систему, которая полностью загружена в ram.
- Обычно (в настольных и серверных системах) обязанности initramfs подготавливают ядро (например, загружает соответствующие драйверы ядра), монтируют корневую файловую систему (обычно в rhel 7 реальный root fs находится в /sysroot после rd.break), а затем передает загрузиться с настоящей корневой файловой системой.
- В этом случае я предполагаю, что при подготовке ядра что-то идет не так, похоже, что купольная камера отсутствует или не может быть найдена внутри initramfs. в конце концов, драйверы NFS.
Вы можете загрузить 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
источник серва
Вы можете легко изменить его на NFS, если это действительно необходимо