PXE批量装机本质是“一次配置、百台同步”的自动化流程,依赖DHCP(分配IP并指定TFTP地址与引导文件)、TFTP(传输pxelinux.0等小文件)、HTTP(提供系统镜像和Kickstart脚本)三者精准协同,客户端需满足网卡支持PXE、BIOS启用网络启动、同二层广播域等硬性条件。

服务器系统安装通过PXE网络引导实现大规模集群批量装机,本质是把“每台机器插U盘点下一步”的操作,变成一次配置、百台同步的自动化流程。关键不在于单个步骤多复杂,而在于DHCP、TFTP、HTTP三者协同是否精准对齐,以及客户端能否稳定完成从网卡固件到内核加载的链路。
核心服务必须各司其职
DHCP不是只分IP——它必须明确告诉客户端“去哪找引导文件”;TFTP不是随便传个文件——它只负责小而关键的启动组件(pxelinux.0、menu.c32、vmlinuz、initrd.img);HTTP不是可选项——它是传输几GB系统镜像和Kickstart应答文件最稳的方式。
- DHCP配置里next-server必须填PXE服务器的真实IP,filename必须与TFTP根目录下实际存在的引导文件名完全一致(如pxelinux.0或grubx64.efi)
- TFTP根目录(/var/lib/tftpboot)需包含:pxelinux.0(BIOS模式)或grubx64.efi(UEFI模式)、menu.c32、pxelinux.cfg/default菜单文件,以及按路径组织的内核与初始化镜像(如centos7/vmlinuz)
- HTTP服务(如httpd或nginx)的Web根目录要能直接访问ISO解包后的完整结构,例如访问http://192.168.10.10/centos7/能看到repodata、Packages等目录
Kickstart才是无人值守的真正开关
只配好PXE,客户端最多能进安装界面,但分区、时区、root密码、软件包选择仍需人工点击。Kickstart(.ks)文件就是这一步的“自动答题卡”,它必须被HTTP服务托管,并在PXE菜单中通过inst.ks=参数显式引用。
- ks文件需放在HTTP可访问路径下,比如http://192.168.10.10/ks/centos7-ks.cfg
- PXE菜单项中APPEND行必须包含:inst.ks=http://192.168.10.10/ks/centos7-ks.cfg inst.ks.device=eth0
- ks文件里要明确定义硬盘清空策略(clearpart)、分区方案(part / --fstype=xfs --size=10240)、网络配置(network --bootproto=dhcp)、root密码加密(rootpw --iscrypted $6$...)等关键项
客户端启动前必须确认三项硬性条件
再完善的服务器端配置,遇到客户端“不配合”,整个流程就卡在第一步。这不是配置问题,而是物理层和固件层的准入检查。
- 网卡需支持PXE(主流服务器主板默认开启,但部分品牌需在BIOS中手动启用“Network Stack Configuration”或“UEFI Network Stack”)
- 启动顺序中“IPv4 Network Stack”或“PXE Boot to LAN”必须排在硬盘之前,且不能被Secure Boot拦截(UEFI模式下常需临时关闭Secure Boot)
- 客户端和服务端必须处于同一二层广播域——跨VLAN需配置DHCP中继(ip helper-address),否则DHCP Discover包根本收不到响应
调试时优先盯住前三秒的DHCP交互
客户端黑屏不动?大概率卡在DHCP阶段。用另一台同网段Linux机器抓包验证:tcpdump -i eth0 port 67 or port 68 -nn。如果看到客户端发出DHCP Discover但没收到Offer,说明DHCP服务未运行、防火墙拦截、或网络不通;如果收到Offer但后续TFTP失败,则检查next-server IP是否可达、TFTP服务是否由xinetd正确托管、文件权限是否为tftp用户可读。
- 常见陷阱:CentOS Stream 9默认用dnf而非yum,安装dhcp-server要用dnf install dhcp-server,而非旧式yum命令
- SELinux未关闭会导致TFTP拒绝服务,执行setenforce 0并修改/etc/selinux/config为disabled
- 防火墙必须放行UDP 67/68(DHCP)、UDP 69(TFTP)、TCP 80(HTTP),缺一不可











