1. PXE网络装机技术概述
PXE(Preboot eXecution Environment)是一种让计算机在没有本地存储设备的情况下通过网络启动操作系统的技术标准。这项技术最早由Intel在1999年提出,现已成为企业IT环境中批量部署操作系统的标准方案。
在实际运维工作中,我们经常遇到需要同时为几十甚至上百台服务器安装操作系统的情况。传统的光盘或U盘安装方式效率低下,而PXE网络装机可以完美解决这个问题。通过搭建PXE服务器,新设备只需接入网络并设置为PXE启动,就能自动获取安装镜像并完成系统部署,整个过程无需人工干预。
提示:PXE协议基于DHCP和TFTP协议实现,客户端设备通过广播方式发现PXE服务器并获取启动文件。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. PXE装机系统架构设计
2.1 核心组件解析
一个完整的PXE装机系统包含以下关键组件:
- DHCP服务器:负责分配IP地址并告知客户端TFTP服务器地址
- TFTP服务器:提供启动加载程序(如pxelinux.0)和内核镜像
- 文件服务器:存储完整的操作系统安装文件(通常使用HTTP/NFS/FTP)
- 配置管理工具:自动化安装配置(如Kickstart/Preseed)
2.2 网络拓扑设计建议
对于不同规模的环境,网络架构需要相应调整:
- 小型环境(<50台):单台服务器集成所有服务
- 中型环境(50-200台):分离DHCP和文件服务
- 大型环境(>200台):部署多台PXE服务器并配置负载均衡
注意:生产环境中建议将PXE服务部署在独立VLAN中,避免与业务网络产生冲突。
3. 详细部署步骤
3.1 基础环境准备
以CentOS 7为例,安装必要软件包:
bash复制yum install -y dhcp tftp-server syslinux httpd
配置防火墙放行相关端口:
bash复制firewall-cmd --add-service={dhcp,tftp,http} --permanent
firewall-cmd --reload
3.2 DHCP服务器配置
编辑/etc/dhcp/dhcpd.conf配置文件:
bash复制subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.200;
option routers 192.168.1.1;
option domain-name-servers 8.8.8.8;
next-server 192.168.1.10; # TFTP服务器IP
filename "pxelinux.0"; # 启动加载程序
}
启动服务:
bash复制systemctl enable dhcpd --now
3.3 TFTP服务配置
设置TFTP根目录并复制必要文件:
bash复制mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
配置默认启动菜单/var/lib/tftpboot/pxelinux.cfg/default:
bash复制DEFAULT menu.c32
PROMPT 0
TIMEOUT 300
LABEL centos7
MENU LABEL Install CentOS 7
KERNEL images/centos7/vmlinuz
APPEND initrd=images/centos7/initrd.img ks=http://192.168.1.10/ks.cfg
3.4 安装镜像准备
挂载ISO镜像并复制内核文件:
bash复制mount -o loop CentOS-7-x86_64-DVD-2009.iso /mnt
mkdir -p /var/lib/tftpboot/images/centos7
cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/images/centos7/
设置HTTP文件服务:
bash复制mkdir -p /var/www/html/centos7
cp -r /mnt/* /var/www/html/centos7/
4. 自动化配置进阶
4.1 Kickstart自动应答文件
创建/var/www/html/ks.cfg实现无人值守安装:
bash复制#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Use network installation
url --url="http://192.168.1.10/centos7"
# System language
lang en_US.UTF-8
# Keyboard layouts
keyboard us
# Network information
network --onboot yes --device eth0 --bootproto dhcp
# Root password
rootpw --plaintext yourpassword
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part / --fstype="xfs" --size=20480
part swap --size=4096
part /var --fstype="xfs" --size=10240
%packages
@^minimal
@core
%end
%post
# 安装后脚本
%end
4.2 多系统支持配置
通过修改PXE菜单支持多种操作系统安装:
bash复制LABEL ubuntu2004
MENU LABEL Install Ubuntu 20.04 LTS
KERNEL images/ubuntu2004/linux
APPEND initrd=images/ubuntu2004/initrd.gz auto=true url=http://192.168.1.10/ubuntu2004/preseed.cfg
5. 性能优化与问题排查
5.1 批量装机性能优化
-
TFTP调优:
bash复制# 修改/etc/xinetd.d/tftp server_args = -v -s /var/lib/tftpboot -B 1468 -
HTTP并发优化:
bash复制# 修改/etc/httpd/conf/httpd.conf StartServers 10 MinSpareServers 10 MaxSpareServers 20 ServerLimit 256 MaxClients 256 -
PXE缓存代理:对于超大规模部署,可考虑部署Squid缓存代理
5.2 常见问题排查指南
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 客户端获取不到IP | DHCP服务未启动/配置错误 | 检查dhcpd服务状态和配置文件 |
| TFTP超时 | 防火墙阻止/路径错误 | 验证tftp连接tftp 192.168.1.10 |
| 启动菜单不显示 | menu.c32缺失/配置错误 | 检查pxelinux.cfg/default文件权限 |
| 安装过程卡住 | 镜像损坏/网络中断 | 验证镜像MD5校验值 |
6. 安全加固措施
-
PXE访问控制:
bash复制# 在dhcpd.conf中添加 host pxeclient { hardware ethernet 00:0c:29:xx:xx:xx; fixed-address 192.168.1.101; } -
文件完整性校验:
bash复制find /var/lib/tftpboot -type f -exec md5sum {} \; > /etc/pxe-checksums -
日志监控:
bash复制# 配置rsyslog单独记录PXE相关日志 if $programname == 'dhcpd' then /var/log/pxe.log
在实际生产环境中,我们通常会结合Ansible等自动化工具进一步扩展PXE功能。例如通过API动态生成Kickstart文件,或者根据MAC地址自动分配不同的安装配置。经过优化后,单台PXE服务器每小时可完成上百台设备的系统部署,相比传统方式效率提升超过10倍。
