PXE服务的搭建全过程
PXE(预启动执行环境)是一种革命性的网络引导技术,它让计算机无需依赖本地存储设备即可通过网络启动操作系统。本文将从 PXE 的基本原理、核心组件讲起,详细介绍其工作流程、配置文件示例,并提供一个在 Ubuntu 22.04 上搭建完整 PXE 服务端的实战部署指南,帮助读者全面掌握这项自动化运维的关键技术。
1. 什么是 PXE?
PXE(Preboot eXecution Environment,预启动执行环境)是由 Intel 公司开发的一种网络引导技术。它允许计算机通过网络从远程服务器下载并启动操作系统镜像,而无需依赖本地存储设备(如硬盘、U盘或光驱)。
核心思想:将启动过程分为两个阶段。第一阶段由网卡上的 ROM 芯片(或 UEFI 固件)中的 PXE 客户端完成,它通过 DHCP/TFTP 协议获取初始引导文件;第二阶段则执行更复杂的引导程序(如 GRUB、iPXE),最终通过网络加载完整的操作系统。
2. PXE 的工作原理与流程
一次典型的 PXE 启动过程涉及以下组件和步骤:
- 客户端开机:支持 PXE 的网卡(或主板固件)广播一个 DHCP Discover 报文。
- DHCP 服务器响应:
- 返回客户端的 IP 地址、子网掩码、网关等网络配置。
- 关键:在 DHCP Offer 或 Ack 报文中包含
next-server(TFTP 服务器地址)和filename(初始引导文件,如pxelinux.0或bootx64.efi)选项。
- 获取引导文件:客户端根据
next-server和filename,通过 TFTP 协议从指定的 TFTP 服务器下载初始引导文件。 - 执行引导程序:客户端执行下载的引导文件(如 SYSLINUX 的 PXELINUX、GRUB2 的
grubnetx64.efi或功能更强大的 iPXE)。 - 加载配置文件与内核:引导程序通常会再次通过 TFTP(或升级到 HTTP、NFS 等更高效的协议)下载其配置文件(如
pxelinux.cfg/default)、内核(vmlinuz)和初始内存盘(initrd.img)。 - 启动操作系统:引导程序将控制权交给操作系统内核,完成后续的系统启动过程。
3. 核心组件与协议
- DHCP 协议:用于动态分配 IP 地址,并传递引导服务器地址(
next-server)和引导文件名(filename)。 - TFTP 协议:一种简单的文件传输协议,用于传输初始引导文件和配置文件。因其简单,常被集成在网卡 ROM 中,但效率较低,不适合传输大文件。
- 引导程序:
- PXELINUX:SYSLINUX 项目的一部分,是经典的 PXE 引导加载器。
- GRUB2:支持 PXE 引导,功能强大,配置文件更灵活。
- iPXE:开源的网络引导固件,可以替换或链式加载原有的 PXE ROM。它支持 HTTP、iSCSI、AoE 等更多协议,大大提升了网络引导的效率和能力。
- 服务器:需要部署 DHCP 服务器(如
isc-dhcp-server)、TFTP 服务器(如tftpd-hpa)以及用于存放系统镜像的文件服务器(如 HTTP/NFS/Samba)。
4. 配置文件示例
4.1 DHCP 服务器配置 (ISC DHCP)
# /etc/dhcp/dhcpd.conf
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 subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8;
# PXE 引导关键配置
next-server 192.168.1.10; # TFTP 服务器 IP
filename "pxelinux.0"; # 引导文件名 (BIOS 模式)
# 针对 UEFI 客户端的配置 (Class匹配)
if option arch = 00:07 or option arch = 00:09 {
filename "bootx64.efi";
}
}
4.2 PXELINUX 配置文件
# /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
PROMPT 0
TIMEOUT 50
LABEL linux
MENU LABEL ^Install CentOS 7
KERNEL centos7/vmlinuz
APPEND initrd=centos7/initrd.img inst.repo=http://192.168.1.10/centos7 ks=http://192.168.1.10/ks.cfg
LABEL local
MENU LABEL ^Boot from local drive
LOCALBOOT 0
5. 应用场景与优缺点
应用场景:
- 大规模操作系统部署:如数据中心、网吧、学校机房的无盘系统。
- 系统恢复与维护:快速将故障机器引导至恢复环境。
- 磁盘克隆(结合 Clonezilla 等工具)。
- 运行轻量级 Live 环境。
优点:
- 无需物理介质:摆脱光驱、U盘的限制。
- 集中化管理:镜像和配置在服务器端,更新维护方便。
- 支持异构硬件:同一套镜像可引导不同型号的机器。
缺点:
- 依赖网络:网络故障会导致启动失败。
- 配置复杂:需要搭建并协调 DHCP、TFTP、文件服务器。
- 启动速度:受网络速度和服务器性能影响,比本地启动慢。
6. 常见问题与排查
- 客户端获取不到 IP 地址
- 检查 DHCP 服务器是否运行,防火墙是否放行 UDP 67/68 端口。
- 确认客户端和服务器在同一广播域(VLAN)。
- 客户端报错 “TFTP Open failed” 或 “File not found”
- 检查
next-server的 IP 地址是否正确。 - 检查 TFTP 服务器根目录(如
/var/lib/tftpboot)下是否存在filename指定的文件。 - 检查 TFTP 服务器权限,确保文件可读。
- 检查
- 启动过程卡在 loading kernel…
- 检查内核 (
vmlinuz) 和 initrd (initrd.img) 文件路径是否正确。 - 确认 APPEND 参数中的
inst.repo等网络路径可访问。
- 检查内核 (
- UEFI 客户端无法引导
- 确认 DHCP 配置中为 UEFI 客户端(
arch选项)指定了正确的.efi引导文件(如bootx64.efi)。 - 确保 TFTP 服务器上存在对应的 EFI 引导文件。
- 确认 DHCP 配置中为 UEFI 客户端(
7. 总结
PXE 是实现自动化、规模化网络系统部署的基石技术。理解其 DHCP+TFTP 的两阶段引导模型,掌握相关服务器配置和排错方法,是进行高效运维的关键。现代实践中,常会使用 iPXE 来增强其功能,或与 Cobbler、Foreman、WDS(Windows)等自动化部署工具结合,构建更完善的无人值守安装体系。
8. 实战部署步骤
以下是在 Ubuntu 22.04 服务器上快速搭建一个最小化 PXE 服务端(包含 DHCP、TFTP、HTTP)的具体命令和关键配置。请确保您拥有 root 或 sudo 权限,并已连接到互联网。
8.1 环境准备与网络规划
-
服务器信息:
- 操作系统:Ubuntu 22.04 LTS
- IP 地址:
192.168.1.10(请根据您的实际网络环境修改) - 网卡:
ens33(请使用ip a命令确认您的网卡名称)
-
关闭冲突服务:如果系统已运行其他 DHCP 服务(如
dnsmasq的 DHCP 功能),请先停止并禁用它们。
8.2 安装必要软件包
执行以下命令安装 DHCP、TFTP、HTTP 服务器以及 PXE 引导文件:
sudo apt update
sudo apt install -y isc-dhcp-server tftpd-hpa apache2 syslinux-common pxelinux
8.3 配置 DHCP 服务器
-
编辑 DHCP 主配置文件:
sudo nano /etc/dhcp/dhcpd.conf -
清空原内容,替换为以下配置(请根据您的网络修改
subnet、range、routers和next-server):# /etc/dhcp/dhcpd.conf authoritative; default-lease-time 600; max-lease-time 7200; 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 subnet-mask 255.255.255.0; option domain-name-servers 8.8.8.8; # PXE 引导关键配置 next-server 192.168.1.10; # TFTP 服务器 IP(本机) filename "pxelinux.0"; # BIOS 引导文件 # 针对 UEFI 客户端的配置 if option arch = 00:07 or option arch = 00:09 { filename "bootx64.efi"; } } -
指定 DHCP 服务监听的网卡:
sudo nano /etc/default/isc-dhcp-server找到
INTERFACESv4=""行,修改为(例如网卡名为ens33):INTERFACESv4="ens33"
8.4 配置 TFTP 服务器
-
编辑 TFTP 配置文件:
sudo nano /etc/default/tftpd-hpa -
修改为以下内容:
TFTP_USERNAME="tftp" TFTP_DIRECTORY="/var/lib/tftpboot" TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure --create" RUN_DAEMON="yes" -
创建 TFTP 根目录并设置权限:
sudo mkdir -p /var/lib/tftpboot sudo chown -R tftp:tftp /var/lib/tftpboot sudo chmod -R 755 /var/lib/tftpboot -
复制 PXE 引导文件到 TFTP 目录:
sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/ sudo cp /usr/lib/syslinux/modules/bios/{ldlinux.c32,libutil.c32,menu.c32} /var/lib/tftpboot/ # 对于 UEFI,需要准备 bootx64.efi(可从 syslinux-efi 包获取或从发行版镜像提取) # 此处以复制 shim 和 grub 为例(如果已安装 grub-efi-amd64-signed) sudo cp /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /var/lib/tftpboot/bootx64.efi -
创建 PXE 菜单配置目录和文件:
sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg sudo nano /var/lib/tftpboot/pxelinux.cfg/default -
写入一个简单的 PXE 菜单配置:
DEFAULT menu.c32 PROMPT 0 TIMEOUT 50 LABEL local MENU LABEL ^Boot from local hard drive LOCALBOOT 0 LABEL memtest MENU LABEL ^Run Memtest86+ KERNEL memtest
8.5 配置 HTTP 服务器(用于存放安装镜像)
-
创建镜像存放目录并设置权限:
sudo mkdir -p /var/www/html/iso sudo chown -R www-data:www-data /var/www/html/iso -
(可选)下载一个 Live CD 或安装镜像,例如 Ubuntu 22.04 Live Server:
sudo wget -P /var/www/html/iso/ https://releases.ubuntu.com/22.04/ubuntu-22.04.4-live-server-amd64.iso -
提取内核和 initrd(以 Ubuntu 为例):
cd /var/www/html/iso sudo mount -o loop ubuntu-22.04.4-live-server-amd64.iso /mnt sudo cp /mnt/casper/{vmlinuz,initrd} . sudo umount /mnt -
在 PXE 菜单中添加对应条目(编辑
/var/lib/tftpboot/pxelinux.cfg/default):LABEL ubuntu-live MENU LABEL ^Install Ubuntu 22.04 Live Server KERNEL http://192.168.1.10/iso/vmlinuz APPEND initrd=http://192.168.1.10/iso/initrd root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://192.168.1.10/iso/ubuntu-22.04.4-live-server-amd64.iso
8.6 启动服务并验证
-
重启相关服务并设置开机自启:
sudo systemctl restart isc-dhcp-server tftpd-hpa apache2 sudo systemctl enable isc-dhcp-server tftpd-hpa apache2 -
检查服务状态:
sudo systemctl status isc-dhcp-server tftpd-hpa apache2 -
验证 TFTP 文件可访问:
tftp 192.168.1.10 -c get pxelinux.0 /tmp/test.pxe ls -lh /tmp/test.pxe -
验证 HTTP 文件可访问:
curl -I http://192.168.1.10/iso/vmlinuz
8.7 客户端测试
- 将目标客户端设置为 网络引导(PXE) 优先。
- 开机后,客户端应自动从 DHCP 服务器获取 IP,并从 TFTP 服务器加载
pxelinux.0。 - 随后会出现 PXE 菜单,选择对应的条目(如 “Install Ubuntu 22.04 Live Server”)即可开始网络安装。
8.8 防火墙配置(如果启用)
如果系统防火墙(ufw)已启用,需要放行相关端口:
sudo ufw allow 69/udp # TFTP
sudo ufw allow 80/tcp # HTTP (Apache)
sudo ufw allow 67/udp # DHCP
sudo ufw reload
至此,一个最小化的 PXE 服务端环境已搭建完成。您可以根据需要,在 HTTP 目录中添加更多系统镜像,并相应更新 PXE 菜单配置文件。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)