PXE(Preboot eXecution Environment)网络装机是运维工作中非常实用的一项技术,尤其在需要给几十台甚至上百台机器批量安装系统时,它能彻底摆脱U盘和光驱的限制。整个过程只需要一台配置好的PXE服务器,客户端机器开机后从网络启动,就能自动获取安装文件并完成系统部署。本文将以一次完整的实验为例,把搭建流程和常见误区一次讲清楚。

一、PXE网络装机的基本原理
要理解PXE装机,先要弄清楚它的工作流程。客户端主机的网卡必须支持PXE功能,也就是常说的网络启动。当机器开机时,网卡里的PXE芯片会先通过网络发出DHCP请求,从服务器获取一个IP地址,同时拿到TFTP服务器的地址和启动文件名。
接下来,客户端通过TFTP协议下载引导文件(比如pxelinux.0),加载启动菜单,再根据菜单配置下载内核文件vmlinuz和初始化镜像initrd.img。这两个文件加载完成后,系统内核就开始运行,之后再通过HTTP、FTP或NFS等服务获取完整的安装镜像和自动应答文件,最终完成整个安装过程。
从这个流程可以看出,一台PXE服务器至少需要三个核心服务:DHCP负责分配地址,TFTP负责传输引导文件,再加上HTTP或FTP提供系统镜像下载。这三者缺一不可,排查故障时也要按这个顺序逐层检查。
二、实验环境准备与服务安装
本实验以CentOS系统为例,服务器IP假设为192.168.10.10,需要关闭或正确配置防火墙和SELinux,这是新手最容易忽略的一步。首先安装所需的软件包,执行yum install -y dhcp tftp-server httpd syslinux,其中syslinux包提供pxelinux.0引导文件。
安装完成后,先把系统镜像文件挂载到某个目录,比如执行mount /dev/cdrom /mnt命令。然后把镜像中的所有内容复制到HTTP服务的根目录/var/www/html/下,这样客户端安装时就能通过HTTP下载安装源。
接着把引导相关文件复制到TFTP根目录/var/lib/tftpboot/下,包括pxelinux.0、vmlinuz和initrd.img。注意vmlinuz和initrd.img要从镜像的images/pxeboot目录里复制,不要拿错文件,否则客户端启动时会直接报错。
三、DHCP与TFTP服务配置
DHCP的配置文件位于/etc/dhcp/dhcpd.conf,需要定义地址池、子网掩码、默认网关,最关键的是要加上next-server和filename这两个参数。next-server指定TFTP服务器的地址,filename指定启动文件名pxelinux.0。漏写这两个参数是最常见的错误,表现为客户端能拿到IP但一直卡在PXE启动界面,提示TFTP超时。
配置完成后用systemctl start dhcpd启动服务,并用systemctl enable dhcpd设置开机自启。如果启动失败,多半是配置文件里有语法错误或者地址池与服务器自身IP不在同一网段。
TFTP服务默认由xinetd管理或直接以systemd服务运行,确认其监听UDP 69端口即可。可以在服务器本机执行ss -ulnp | grep 69来验证端口是否开放。TFTP根目录的权限也要注意,保证匿名用户有读取权限。
四、启动菜单与Kickstart自动应答
引导文件就位后,还需要在TFTP根目录创建pxelinux.cfg目录,并在其中新建default文件作为启动菜单。菜单文件里要写清楚label标签、内核路径、安装源地址。安装源写成http://192.168.10.10这样的形式,客户端内核启动后会从这里下载软件包。
如果不想手动点击安装界面,可以配合Kickstart实现全自动安装。Kickstart文件是一个记录安装选项的应答文件,里面定义了分区方案、root密码、软件包选择、安装后执行的脚本等。把它放到HTTP目录下,在启动菜单的append行加上ks=http://192.168.10.10/ks.cfg参数,客户端就会全自动完成安装。
Kickstart文件可以手动编写,也可以在装好一台机器后,参考系统自动生成的/root/anaconda-ks.cfg来改,后者更省事也更不容易出错。
五、常见误区与排坑指南
第一个大坑是防火墙和SELinux没关。DHCP的67、68端口,TFTP的69端口,HTTP的80端口,任何一个被防火墙拦截都会导致装机失败。建议实验阶段直接执行systemctl stop firewalld和setenforce 0,生产环境再按需放行。
第二个坑是网络里有多个DHCP服务器。如果局域网中存在路由器的DHCP功能,客户端可能拿到错误的地址和引导信息,表现时好时坏。做实验时一定要关闭其他DHCP服务。
| 故障现象 | 可能原因 | 解决方法 |
|---|---|---|
| 获取不到IP地址 | DHCP服务未启动或网段不符 | 检查dhcpd服务状态与地址池配置 |
| 卡在PXE-E11或TFTP超时 | next-server或filename写错 | 核对DHCP配置中的两个参数 |
| 启动菜单不显示 | default文件路径错误 | 确认pxelinux.cfg目录名拼写正确 |
| 找不到安装源 | HTTP服务未启动或镜像未复制完整 | 检查httpd服务和镜像目录内容 |
第三个坑是pxelinux.cfg这个目录名,很多人手滑写成pxelinuc.cfg或者大小写搞混。Linux对大小写敏感,目录名不对,客户端就找不到菜单文件。另外客户端主板的网络启动选项也要记得开启,有些机器默认禁用PXE启动,需要进BIOS手动打开。
最后提醒一点,实验完成后建议用虚拟机测试通过后再上物理机,避免配置问题影响生产网络。整个流程跑通一次之后,你会发现批量装机其实并没有想象中复杂,关键是理解每个服务的职责,出了问题按DHCP、TFTP、HTTP的顺序逐层排查,基本都能快速定位。