PXE 网络引导技术
PXE 高效批量网络装机
PXE 是由 intel 开发的网络引导技术,工作在 Client/Server 模式,允许计算机通过网络从远程服务器下载引导镜像并加载操作系统,无需依赖本地存储设备(硬盘、U盘、光驱等)。它是数据中心批量部署、无盘工作站和系统救援的核心技术之一。
PXE 是一种标准化的预启动环境规范,作为"Wired for Management"框架的一部分,允许客户端在启动阶段通过网络获取操作系统镜像和配置信息。它依赖于网卡内置的 PXE 固件(BOOTROM 芯片)和网络协议栈,使裸机就能够在无本地系统的情况下完成网络引导。
PXE 工作原理和流程
PXE 引导过程遵循严格的“网络启动链”流程,分为五个核心阶段,依赖三大核心协议(DHCP、TFTP、IP)和关键引导文件。
完整引导流程
客户端开机 → BIOS自检 → 网络启动 → DHCP发现 → TFTP下载引导文件 → 加载内核与initrd → 安装/启动系统
- 阶段一:客户端初始化
- 客户机设置为网络启动优先
- 网卡 PXE 固件激活,初始化网络协议栈
- 发送 DHCP Discover广播包,请求 IP 地址和引导信息
- 阶段二:DHCP 配置获取
- DHCP 服务器响应 DHCP Offer,包含客户端 IP 地址、子网掩码、网关、DNS、TFTP 服务器 IP 地址(引导服务器)、引导文件名(如 pxelinux.0)
- 客户端发送 DHCP Request确认,服务器返回 DHCP ACK完成配置
- 阶段三:TFTP 引导文件下载
- 客户端向 TFTP 服务器请求下载引导文件
- 下载核心引导程序:pxelinux.0
- 引导程序加载 TFTP 服务器上的配置文件
- 阶段四:内核与初始化镜像加载
- 引导程序解析配置文件,获取内核(vmlinuz)和初始化内存盘(initrd.img)路径
- 通过 TFTP 或 HTTP 下载内核与 initrd(HTTP 更适合大文件,速度更快)
- 引导程序将内核加载到内存,传递内核参数(如 ks=…指定 Kickstart 文件)
- 阶段五:系统安装 / 启动
- 内核启动,执行 initrd 中的初始化脚本
- 从 HTTP/NFS/FTP 服务器加载完整系统镜像
- 结合 Kickstart/Preseed 文件自动完成分区、包安装、配置等步骤
- 安装完成后重启,进入本地系统
openEuler PXE 服务搭建
前提与环境配置
- 客户端与 PXE 服务器处于同一局域网、
- 准备 openEuler系统镜像
- 关闭防火墙 / SELinux
- 核心服务:DHCP(IP 分配 + 引导信息)、TFTP(小引导文件传输)、HTTP(系统镜像 + 安装文件传输)
# 关闭firewalld防火墙,禁止开机自启
systemctl stop firewalld && systemctl disable firewalld
# 临时关闭SELinux(重启失效,生产环境可配置规则而非直接关闭)
setenforce 0
# 永久关闭SELinux(可选,需重启生效)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
安装 PXE 必备软件包
dnf install -y dhcp-server tftp-server httpd syslinux
配置 DHCP 服务器(分配 IP + 传递引导信息)
openEuler 的 DHCP 配置文件路径为/etc/dhcp/dhcpd.conf
# 备份默认配置
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
# 编辑新配置文件
vim /etc/dhcp/dhcpd.conf
写入
# 全局配置
default-lease-time 600; # 默认租约时间(秒)
max-lease-time 7200; # 最大租约时间(秒)
option domain-name "local"; # 局域网域名(自定义)
option domain-name-servers 223.5.5.5, 8.8.8.8; # DNS服务器
# 子网配置(必须与PXE服务器自身网段一致)
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.150 192.168.1.200; # 客户端IP地址池(避免与局域网现有IP冲突)
option routers 192.168.1.1; # 局域网网关(替换为自身实际网关)
next-server 192.168.1.100; # Option 66:TFTP服务器IP(即PXE服务器自身静态IP)
filename "pxelinux.0"; # Option 67:PXE核心引导文件名(Legacy BIOS模式固定)
}
启动 DHCP 服务并设置开机自启
# 启动dhcpd服务
systemctl start dhcpd
# 设置开机自启
systemctl enable dhcpd
# 检查服务状态(显示active(running)即为正常)
systemctl status dhcpd
配置 TFTP 服务器(传输引导文件 / 内核 / 初始化镜像)
TFTP 是轻量级 UDP 协议,适合传输小文件,PXE 中用于传递pxelinux.0引导程序、Linux 内核(vmlinuz)和初始化内存盘(initrd.img)。openEuler 的 TFTP 服务默认由xinetd超级守护进程管理。
编辑 TFTP 服务配置文件
配置文件路径/etc/xinetd.d/tftp,修改为开启状态:
vim /etc/xinetd.d/tftp
将关键参数disable = yes改为disable = no,其他保持默认:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot # TFTP根目录(固定路径,无需修改)
disable = no # 核心:改为no,开启TFTP服务
per_source = 11
cps = 100 2
flags = IPv4
}
创建 TFTP 目录结构并复制引导文件
TFTP 根目录为/var/lib/tftpboot(与配置文件中server_args一致),需创建启动菜单配置目录,并复制 syslinux 的 PXE 引导文件:
# 创建TFTP核心目录(pxelinux.cfg用于存放启动菜单配置)
mkdir -p /var/lib/tftpboot/pxelinux.cfg
# 复制PXE核心引导程序pxelinux.0
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
# 复制菜单支持文件(实现图形化启动菜单,缺一不可)
cp /usr/share/syslinux/{menu.c32,vesamenu.c32,ldlinux.c32} /var/lib/tftpboot/
挂载 openEuler 镜像并复制内核 /initrd
# 1. 创建镜像挂载目录和HTTP镜像存储目录
mkdir -p /mnt/openEuler_iso # 镜像临时挂载目录
mkdir -p /var/www/html/openEuler2203 # HTTP服务器的openEuler镜像目录
# 2. 挂载openEuler镜像(这里用的是虚拟机配置中选择的ISO镜像文件)
mount /dev/cdrom /mnt/openEuler_iso
# 3. 复制内核和initrd到TFTP根目录(PXE核心启动文件)
cp /mnt/openEuler_iso/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
# 4. 复制完整镜像文件到HTTP目录(供客户端安装时拉取,HTTP比TFTP快10倍以上)
cp -r /mnt/openEuler_iso/* /var/www/html/openEuler2203/
# 5. 取消挂载(可选,复制完成后即可取消)
umount /mnt/openEuler_iso
启动 TFTP 相关服务
# 启动xinetd(TFTP的管理进程)
systemctl start xinetd
# 设置开机自启
systemctl enable xinetd
# 检查状态(active(running)即为正常)
systemctl status xinetd
配置 HTTP 服务器(提供系统安装源)
HTTP 是文件传输协议,负责向客户端提供完整的 openEuler 安装源、Kickstart 无人值守脚本,相比 TFTP(UDP 无连接),HTTP(TCP 面向连接)传输大文件更稳定、速度更快,是生产环境首选。
启动 HTTP 服务并设置开机自启
# 启动httpd服务
systemctl start httpd
# 设置开机自启
systemctl enable httpd
# 检查状态(active(running)即为正常)
systemctl status httpd
验证 HTTP 安装源可访问
在 PXE 服务器本地执行 curl 命令,验证镜像文件是否可正常访问:
curl http://192.168.1.100/openEuler2203/repodata/repomd.xml
若输出 XML 格式的内容,说明 HTTP 安装源配置正常;若报错,检查文件复制是否完整、httpd 服务是否正常。
配置 PXE 启动菜单(定义客户端启动选项)
启动菜单配置文件存放在 TFTP 的pxelinux.cfg目录下,默认文件名default(客户端会自动加载该文件),用于定义 “安装 openEuler”“救援模式”“本地硬盘启动” 等选项,让客户端开机后显示图形化选择菜单。
编辑启动菜单配置文件
vim /var/lib/tftpboot/pxelinux.cfg/default
写入核心配置
default auto # 默认加载图形化菜单组件
prompt 0 # 关闭手动输入提示(0为关闭,1为开启)
timeout 300 # 菜单超时时间(单位:1/10秒,300=30秒,超时自动选择默认项)
MENU TITLE openEuler PXE Boot Menu # 菜单标题(自定义)
ONTIMEOUT openEuler2203_install # 超时默认执行“安装openEuler”选项
LABEL auto
MENU LABEL Install openEuler 22.03 LTS SP3 # 菜单显示名称
KERNEL vmlinuz # 指向TFTP根目录的内核文件
# 内核参数:指定initrd、HTTP安装源、Kickstart无人值守脚本路径
APPEND initrd=initrd.img inst.repo=http://192.168.1.100/openEuler2203 inst.ks=http://192.168.1.100/ks.cfg
参数说明:
inst.repo:客户端安装源路径,指向 HTTP 服务器的 openEuler 镜像目录,必须与实际 IP 一致;inst.ks:Kickstart 无人值守脚本路径,指向 HTTP 服务器的 ks.cfg 文件,实现自动化安装;- 所有文件路径(vmlinuz、initrd.img)均为TFTP 根目录相对路径,无需写绝对路径。
配置 Kickstart 无人值守脚本(实现自动化安装)
openEuler 基于 RHEL 系,原生支持Kickstart(KS) 无人值守技术,通过 ks.cfg 脚本定义分区方案、root 密码、安装源、网络配置、软件包选择等,客户端 PXE 启动后会自动加载该脚本,全程无需人工干预,实现批量装机。
创建 KS 脚本文件(存放于 HTTP 根目录)
KS 文件需放在 HTTP 可访问路径,让客户端能通过网络拉取,本次放在/var/www/html/(HTTP 根目录):
vim /var/www/html/ks.cfg
写入 openEuler 适配的 KS 核心配置
#version=RHEL9 # 脚本版本,openEuler 22.03兼容
ignoredisk --only-use=sda # 仅使用第一块硬盘(sda),避免多硬盘识别问题
autopart --type=lvm # 自动分区,使用LVM(openEuler默认推荐)
bootloader --location=mbr # 引导程序安装在MBR(Legacy BIOS模式固定)
clearpart --all --initlabel # 清除硬盘所有分区,重新初始化卷标
# 网络配置:DHCP自动获取(与PXE DHCP一致),开机自启
network --bootproto=dhcp --device=eth0 --onboot=on --noipv6
# root密码配置:密码为openEuler@123(已加密,可自行替换)
# 加密密码生成方法:在openEuler终端执行`grub-crypt --sha-512`,输入明文密码后生成
rootpw --iscrypted $6$rounds=656000$k8XaU0eQ$Y1eQ5z0P9X8Y7a6S5d4F3g2H1j0K9L8M7N6O5P4Q3R2S1T0/
# 安装源配置:指向HTTP服务器的openEuler镜像(与PXE菜单中一致)
url --url=http://192.168.1.100/openEuler2203
# 安装完成后操作:重启系统
reboot
# 时区配置:亚洲/上海(东八区)
timezone Asia/Shanghai --utc
# 关闭防火墙和SELinux(生产环境按需配置,此处为简化)
firewall --disabled
selinux --disabled
# 软件包组:最小化安装(仅安装核心系统,按需添加,如@Server带图形化)
%packages
@Minimal
%end
# 安装后脚本(可选,执行自定义命令)
%post
echo "openEuler PXE Auto Install Complete!" > /root/pxe_install.log
%end
验证 KS 脚本语法(可选,避免配置错误)
# 安装语法检查工具
dnf install -y pykickstart
# 验证ks.cfg脚本
ksvalidator /var/www/html/ks.cfg
若无任何输出,说明语法正常;若有报错,根据提示修改对应配置项。
更多推荐
所有评论(0)