pxe能批量装机,但需四点严格对齐:next-server和filename必须正确配置、tftp根目录权限无误、安装源协议与ks.cfg路径一致、裸机bios设为网络启动第一项,缺一则客户端卡在pxe-e53或tftp超时。

直接上结论:PXE 能批量装机,但不是“配完就能用”,关键在四点对齐——next-server 和 filename 必须写对、TFTP 根目录权限不能错、安装源协议(FTP/HTTP)要和 ks.cfg 里写的路径一致、裸机 BIOS 必须设为网络启动第一项。漏一个,客户端就卡在“PXE-E53: No boot filename received”或“TFTP timeout”。
为什么 DHCP 的 next-server 和 filename 必须手动指定
DHCP 默认只分配 IP,不参与 PXE 引导。客户端拿到 IP 后,会再发一次 DHCPDISCOVER,带 PXE 扩展标识,这时必须由服务端明确告诉它:“去哪下引导文件”。否则 TFTP 请求根本不会发出。
-
next-server填的是 TFTP 服务器的 IP(不是 DHCP 自己的 IP),且必须和客户端在同一子网; -
filename在 Legacy BIOS 模式下是"pxelinux.0",UEFI 模式下是"bootx64.efi"(部分华为/戴尔服务器还可能是"grubx64.efi"); - 配置位置是
/etc/dhcp/dhcpd.conf的 subnet 段内,不能写在全局段; - 改完必须
systemctl restart dhcpd,dhcpd -t只校验语法,不检查 PXE 字段是否生效。
TFTP 服务起不来?大概率是 xinetd + 权限双坑
tftp-server 不是独立守护进程,它靠 xinetd 拉起。很多人装完就 systemctl start tftp,结果没反应——因为默认是 disabled 状态。
- 先确认
/etc/xinetd.d/tftp里disabled = no,不是yes或注释掉; - TFTP 根目录默认是
/var/lib/tftpboot,必须确保:chown -R root:root /var/lib/tftpboot,且chmod -R 755 /var/lib/tftpboot; -
pxelinux.0、vmlinuz、initrd.img这三个文件必须放在该目录下,不能套子目录; - UEFI 模式还需额外放
bootx64.efi和grub.cfg,路径结构和 Legacy 完全不同,混用必失败。
安装源用 FTP 还是 HTTP?看 ks.cfg 里怎么写的
客户端内核加载后,会按 append 行里的 inst.stage2= 和 ks= 参数去拉镜像和应答文件。这两个地址协议必须和服务实际开启的服务匹配。
- 如果用 FTP,
inst.stage2=ftp://192.168.10.101/euler,就要确保vsftpd已启,且/var/ftp/euler下有完整 ISO 解包内容; - 如果用 HTTP,
inst.stage2=http://192.168.10.101/euler,就要systemctl start httpd,且/var/www/html/euler是软链或复制的镜像目录; -
ks=路径必须可公开访问,不能放/root/下;FTP 模式下若需匿名访问,vsftpd.conf中anonymous_enable=YES必须打开; - 常见错误:
Failed to download stage2 image,基本就是协议/路径/服务三者没对上。
ks.cfg 文件里最容易被忽略的三个硬性字段
kickstart 不是写完保存就生效。客户端解析时,任何语法错或缺失关键项都会退回到交互式安装,等于无人值守失效。
-
url --url="http://192.168.10.101/euler"(或 ftp)必须存在,且指向真实可用的安装源根目录; -
network --bootproto=dhcp --device=link要显式声明网卡获取方式,否则可能卡在“Configure Network”界面; -
rootpw --iscrypted $6$xxx必须是加密后的密码串,直接写明文rootpw 123456会被忽略,导致装完无法登录;生成方式:python3 -c "import crypt; print(crypt.crypt('yourpwd', crypt.mksalt(crypt.METHOD_SHA512)))"。
真正难的不是搭服务,而是裸机每次开机都得进 BIOS 按 F12/F10/F2 切启动顺序——这个动作没法自动化。如果批量上百台,建议提前和厂商沟通刷写 UEFI 启动项策略,或者用 IPMI 批量下发 BootOrder,否则 PXE 再稳,也卡在第一步。











