Назад | Перейти на главную страницу

Ошибка загрузки PXE без диска CentOS 7.2 с сообщением «Не удалось запустить Switch Root»

Я настраиваю сервер CentOS 7.2, чтобы клиенты могли загружать бездисковый образ CentOS 7.2. Я сделал это с CentOS 6.6, и он отлично работает на нескольких серверах и клиентах на протяжении многих лет. Используя те же параметры конфигурации.
/var/lib/tftpboot/pxelinux.cfg/default содержит:

default menu.c32
prompt 0
timeout 100
TOTALTIMEOUT 300
ONTIMEOUT CentOS
MENU TITLE Linux 7.2 PXE Boot Menu 
LABEL CentOS
        MENU LABEL CentOS 7.2 x86_64 em1
        KERNEL images/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
When PXE booting the client it gets quite far, but stops at:
Starting Switch Root...
Failed to switch root: Specified switch root path /sysroot does not seem to be an OS tree. os-release file is missing.
initrd-switch-root.service: main process exited, code=exited, status=1/FAILURE

Это помещает меня в аварийную оболочку, и если я смотрю на / sysroot, это пустой каталог!

Я сохранил diskless_initrd.img с помощью

dracut -f diskless_initrd.img `uname -r`

и копируя его в указанное место. Я также пробовал "dracut -d nfs -d network", который некоторые предлагали.

Я не понимаю, почему это работает с моим сервером CentOS 6.6, но не здесь, в 7.2.

Я вернулся к этому вопросу через много месяцев и обнаружил, чего мне не хватало - активного межсетевого экрана. Похоже, что функции PXE / TFTP BOOT могут нормально передавать образы vmlinuz и initrd без выполнения правил брандмауэра, но когда пришло время NFS передать корневую файловую систему клиенту, это было невозможно.

В Red Hat 7.3 я сначала скопировал файл / etc / sysconfig / iptables с моего сервера CentOS 6.6 (с которого клиент мог загружаться и смонтировать "бездисковую" файловую систему), а затем выполнил:

systemctl включить firewalld

systemctl запускает firewalld

Теперь клиент успешно смонтировал удаленную файловую систему и перешел к приглашению входа в систему Linux.

Теперь выясним, какие части файла iptables мне действительно нужны в данном случае.

Вы все еще работаете над этим? У меня была такая же проблема с RHEL / Centos 7.x. Никогда не было этой проблемы на 5.x или 6.x. Я пробовал как устаревший, так и режим UEFI с тем же результатом.

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

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

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

APPEND initrd=images/centos/x86_64/7.2/diskless_initrd.img ip=bond1:dhcp root=nfs:10.0.0.1:/diskless/centos/7.2/root bond=bond1:eth4,eth5:mode=1 biosdevname=0 net.ifnames=0 rw quiet

В вашем случае вы можете не использовать связанные сетевые устройства, но вам все равно может потребоваться указать имя устройства сетевой карты, на которой ваш бездисковый клиент получает файловую систему, например, так ...

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