Сбой загрузки PXE CentOS 7.2 без диска с "Не удалось запустить Switch Root"
Я настраиваю сервер CentOS 7.2, чтобы клиенты могли загружать образ CentOS 7.2 без диска. Я сделал это с CentOS 6.6, и он отлично работает на нескольких серверах и клиентах в течение многих лет. Используя те же параметры конфигурации.
/var/lib/tftpboot/pxelinux.cfg/default содержит:
default menu.c32 подскажите 0 тайм-аут 100 TOTALTIMEOUT 300 ONTIMEOUT CentOS НАЗВАНИЕ МЕНЮ Linux 7.2 PXE Меню загрузки LABEL CentOS МЕНЮ ЭТИКЕТКА CentOS 7.2 x86_64 em1 Изображения KERNEL /centos/x86_64/7.2/vmlinuz-3.10.0-327.el7.x86_64 APPEND initrd=images/centos/x86_64/7.2/diskless_initrd.img ip=dhcp nfs=10.0.0.1:/diskless/centos/7.2/root rw quietКогда PXE загружает клиента, он довольно далеко, но останавливается на:
Запуск Switch Root... Не удалось переключить root: указанный корневой путь /sysroot коммутатора, по-видимому, не является деревом ОС. Файл os-release отсутствует. initrd-switch-root.service: основной процесс завершен, код = завершен, status=1/FAILURE
Это сбрасывает меня в аварийную оболочку, и если я смотрю на /sysroot, это пустой каталог!
Я сохранил diskless_initrd.img используя
dracut -f diskless_initrd.img `uname -r`
и скопировать его в указанное место. Я также попробовал "dracut -d nfs -d network", что некоторые предложили.
Я не понимаю, почему это работает с моим сервером CentOS 6.6, но не здесь, в 7.2.
2 ответа
Ты все еще работаешь над этим? У меня была такая же проблема с RHEL/Centos 7.x. Никогда не было этой проблемы на 5.x или 6.x. Я пробовал и старый, и UEFI режим с одинаковым результатом.
Я нашел проблему в моем процессе. На самом деле две вещи.
Я забыл очистить /etc/sysconfig/network-scripts в моей файловой системе rsync'd. Он все еще содержал скрипты из исходной файловой системы.
У нас есть несколько сетевых карт на наших бездисковых клиентах. Нам не хватало определенных параметров загрузки в сетевых конфигурациях загрузки, например:
APPEND initrd = images / centos / x86_64 / 7.2 / diskless_initrd.img ip = bond1: корень dhcp =nfs:10.0.0.1:/diskless/centos/7.2/root bond=bond1:eth4,eth5:mode=1 biosdevname=0 net.ifnames=0
В вашем случае вы, возможно, не используете связанные сетевые устройства, но вам все равно может понадобиться указать имя устройства сетевой карты, на которой ваш бездисковый клиент получает файловую систему, вот так...
APPEND initrd=images/centos/x86_64/7.2/diskless_initrd.img ip=eth3:dhcp root=nfs:10.0.0.1:/diskless/centos/7.2/root biosdevname=0 net.ifnames=0 rw quiet
Я вернулся к этой проблеме через много месяцев и обнаружил, что мне не хватает - активный брандмауэр. Похоже, что функции PXE/TFTP BOOT могут нормально передавать образы vmlinuz и initrd без запуска правил брандмауэра, но когда пришло время NFS передать корневую файловую систему клиенту, это не удалось.
В Red Hat 7.3 я сначала скопировал файл /etc/sysconfig/iptables с моего сервера CentOS 6.6 (с которого клиент мог загрузиться и смонтировать "бездисковую" файловую систему), а затем выполнил:
systemctl включить firewalld
systemctl начало firewalld
Теперь клиент успешно смонтировал удаленную файловую систему и открыл окно входа в Linux.
Теперь, чтобы выяснить, какие части этого файла iptables мне действительно нужны в этом случае.