PXE 启动 CentOS 7.2 无盘失败,提示“无法启动 Switch Root”

PXE 启动 CentOS 7.2 无盘失败,提示“无法启动 Switch Root”

我正在设置 CentOS 7.2 服务器,以便客户端可以启动无盘 CentOS 7.2 映像。我已经使用 CentOS 6.6 完成了此操作,多年来它在多个服务器和客户端上运行良好。使用相同的配置参数。/var/lib/tftpboot/pxelinux.cfg/default
包含:

默认菜单.c32
提示 0
超时 100
总超时时间 300
超时 CentOS
菜单标题 Linux 7.2 PXE 启动菜单
标签 CentOS
        菜单标签 CentOS 7.2 x86_64 em1
        内核映像/centos/x86_64/7.2/vmlinuz-3.10.0-327.el7.x86_64
        附加 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...
切换根目录失败:指定的切换根路径 /sysroot 似乎不是操作系统树。缺少 os-release 文件。
initrd-switch-root.service:主进程已退出,代码=已退出,状态=1/FAILURE

这会将我带入紧急 shell,如果我查看 /sysroot,它是一个空目录!

我使用以下方法保存了 diskless_initrd.img

dracut -f 无盘初始化.img `uname -r`

并将其复制到指定位置。我还尝试了有人建议的“dracut -d nfs -d network”。

我不明白为什么这在我的 CentOS 6.6 服务器上有效,但在 7.2 上却不行。

答案1

您还在解决这个问题吗?我在使用 RHEL/Centos 7.x 时也遇到了同样的问题。在 5.x 或 6.x 上从未遇到过此问题。我尝试了传统模式和 UEFI 模式,结果相同。

我在自己的过程中发现了问题。其实是两件事。

  1. 我忘记清理 rsync 文件系统中的 /etc/sysconfig/network-scripts。它仍然包含来自源文件系统的脚本。

  2. 我们的无盘客户端上有多个 NIC。我们在网络启动配置中缺少某些启动参数,例如:

附加 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

在您的情况下,您可能没有使用绑定网络设备,但您可能仍需要指定无盘客户端获取文件系统的 NIC 的设备名称,如下所示...

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

答案2

几个月后我又回到这个问题,我发现我缺少的是什么——一个活动的防火墙。看来 PXE/TFTP BOOT 功能能够在没有运行防火墙规则的情况下顺利传输 vmlinuz 和 initrd 映像,但当需要通过 NFS 将根文件系统传输到客户端时,它却无法做到这一点。

在 Red Hat 7.3 中,我首先从我的 CentOS 6.6 服务器(客户端可以从中启动并挂载“无盘”文件系统)复制 /etc/sysconfig/iptables 文件,然后执行:

systemctl 启用防火墙

systemctl 启动防火墙

客户端现已成功挂载远程文件系统并出现 Linux 登录提示。

现在要弄清楚在这个例子中我真正需要该 iptables 文件的哪些部分。

相关内容