我正在设置 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 模式,结果相同。
我在自己的过程中发现了问题。其实是两件事。
我忘记清理 rsync 文件系统中的 /etc/sysconfig/network-scripts。它仍然包含来自源文件系统的脚本。
我们的无盘客户端上有多个 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 文件的哪些部分。