Сбой загрузки 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 режим с одинаковым результатом.

Я нашел проблему в моем процессе. На самом деле две вещи.

  1. Я забыл очистить /etc/sysconfig/network-scripts в моей файловой системе rsync'd. Он все еще содержал скрипты из исходной файловой системы.

  2. У нас есть несколько сетевых карт на наших бездисковых клиентах. Нам не хватало определенных параметров загрузки в сетевых конфигурациях загрузки, например:

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 мне действительно нужны в этом случае.

Другие вопросы по тегам