PXE 是什么意思?网络启动装机的原理与完整流程
PXE 是 Preboot eXecution Environment 的缩写,中文叫预启动执行环境:服务器还没有操作系统时,由网卡固件发起网络启动,向 DHCP 要地址和引导文件名,再用 TFTP 把引导程序下载到内存里运行。PXE 装机就是借这条路把安装程序和应答文件送到服务器上,不插 U 盘、不用到现场。
PXE 是什么意思?它是由 Intel 主导制定的网络启动规范,全称 Preboot eXecution Environment,预启动执行环境,现在通行的 2.1 版发布于 1999 年。“预启动”说的是操作系统启动之前:服务器硬盘里什么都没有时,网卡固件自己就能上网,从服务器那里下载一个小程序到内存里运行。BIOS 启动菜单里的“PXE 启动”“Network Boot”,指的就是这个功能;“PXE 装机”则是它最常见的用法,借网络启动把安装程序和应答文件送到机器上,无人值守地装完系统。
PXE 是什么:网卡固件里的一段启动程序
PXE 客户端不在操作系统里,而在固件里:
| 启动模式 | PXE 客户端在哪 | 开机时屏幕上的典型字样 |
|---|---|---|
| Legacy(传统 BIOS) | 网卡上的 Option ROM,内含 DHCP 客户端、TFTP 客户端和 UNDI 网卡驱动接口 | 网卡型号、MAC 地址和 PXE 字样 |
| UEFI | 主板固件的网络协议栈,网卡提供 UEFI 驱动 | Start PXE over IPv4(或 IPv6) |
理解 PXE 有一个关键点:PXE 本身只做一件事,就是把第一个程序下载到内存并执行。这个程序叫网络引导程序(NBP,Network Bootstrap Program),常见的有 PXELINUX、GRUB、iPXE,以及 Windows 部署服务(WDS)的 wdsnbp.com(BIOS)和 wdsmgfw.efi(UEFI)。之后显示什么菜单、加载哪个内核、装什么系统,全是 NBP 和安装程序的事,PXE 已经退场了。所以“PXE 装机”其实是三段接力:固件里的 PXE 把 NBP 拉进来,NBP 把内核和安装程序拉进来,安装程序按应答文件把系统装到硬盘上。
几个常被混用的说法:
- PXE 启动:启动方式,和“从硬盘启动”“从 U 盘启动”并列。
- PXE 服务器:提供 DHCP、TFTP、安装源的那台(或那几台)机器,不是某个专门的软件。
- PXE 装机:用 PXE 启动来安装操作系统的整个过程,业内也叫网络装机、网络安装。
PXE 启动的完整流程:从开机到系统装完
- 固件初始化网卡。开机自检后,按启动顺序轮到网卡,固件加载 PXE 客户端,网口链路起来后开始发请求。
- 广播 DHCP Discover。和普通 DHCP 请求不同,PXE 客户端会带上几项特殊选项:选项 60(厂商类别)写着
PXEClient:Arch:00007:UNDI:003016这样的字符串,表明“我是来网络启动的”;选项 93 是客户端架构,0 代表传统 BIOS,x86-64 UEFI 多为 7(部分固件报 9),ARM64 UEFI 为 11;选项 97 是客户端标识,通常就是主板 UUID。 - DHCP 服务器应答。除了 IP 地址,应答里还要有两样东西:TFTP 服务器地址(报文头的 next-server 字段或选项 66)和引导文件名(报文头的 file 字段或选项 67)。DHCP 服务器根据选项 93 判断是 BIOS 还是 UEFI,给出不同的文件名。现网 DHCP 不归你管、改不了时,可以另起一个 proxyDHCP:地址仍由原来的 DHCP 分,proxyDHCP 只补充引导信息,过程中会用到 UDP 4011 端口。
- TFTP 下载网络引导程序。客户端向 TFTP 服务器的 UDP 69 端口发读请求,下载 NBP 到内存并执行。传统 TFTP 每个数据块 512 字节,发一块等一个确认,所以很慢;客户端和服务器支持 blksize 选项(RFC 2348)时可以协商更大的块。
- NBP 读取配置,加载内核和 initrd。以 PXELINUX 为例,它会按固定顺序找配置文件:先找以主板 UUID 命名的,再找
pxelinux.cfg/01-加 MAC 地址(短横线分隔)命名的,再按 IP 地址的十六进制形式逐位缩短查找,最后用pxelinux.cfg/default。这个顺序意味着你可以给某一台机器单独写一份配置,而不影响其他机器。 - 安装程序拉取安装源和应答文件。内核启动后运行安装程序,按启动参数里写的地址,从 HTTP、NFS 或 SMB 下载安装包和应答文件。几 GB 的安装源不走 TFTP,这是 PXE 环境里要再放一个 HTTP 服务的原因。
- 自动安装、重启进入新系统。安装程序按应答文件分区、装包、执行装后脚本,最后重启。这里有一个经典的坑:如果网卡排在启动顺序第一位,重启后又会进 PXE,再装一遍。常见的防法是装机时用 BMC 设置“仅下一次从 PXE 启动”,或者让菜单默认项从本地硬盘启动,装完后删掉这台机器的专属配置。
整个过程的耗时,前四步通常只有十几秒到一分钟,主要时间花在第 6 步下载安装包和第 7 步安装上,取决于安装源的带宽和装多少软件包。
抓包看一次 PXE 启动
排查或学习时,在 PXE 服务器的装机网卡上抓包,能把上面每一步对应起来(ens19 换成你的网卡名,MAC 换成待装机器业务网卡的 MAC):
tcpdump -ni ens19 -vv 'port 67 or port 68 or port 4011 or ether host 3c:ec:ef:12:34:56'
| 顺序 | 看到的报文 | 重点看什么 |
|---|---|---|
| 1 | DHCP Discover(客户端广播) | 选项 60 是否为 PXEClient 开头,选项 93 是 0 还是 7 |
| 2 | DHCP Offer | 是否带了 next-server 和引导文件名,文件名和架构是否对应;有两台服务器同时应答就是 DHCP 抢答 |
| 3 | DHCP Request / ACK | 地址是否确认成功 |
| 4 | 发往 UDP 69 的 TFTP 读请求 | 请求的文件名和服务器上的实际路径是否一致 |
| 5 | 大量 TFTP 数据和确认 | 引导程序、内核、initrd 正在下载 |
| 6 | 到 TCP 80 的 HTTP 请求 | 安装程序开始拉安装源和应答文件,PXE 阶段已经结束 |
哪一步之后再没有下文,问题就出在哪一步。
一套 PXE 装机环境需要哪些组件
| 组件 | 作用 | 常见实现 | 端口 |
|---|---|---|---|
| DHCP | 分配地址,告诉客户端去哪取哪个引导文件 | ISC DHCP、Kea、dnsmasq、Windows DHCP | UDP 67、68 |
| proxyDHCP(可选) | 现网 DHCP 不能改时,只补充引导信息 | dnsmasq、WDS | UDP 67、4011 |
| TFTP | 传送引导程序、菜单、内核和 initrd | tftp-hpa、dnsmasq 内置 | UDP 69,数据走高位端口 |
| 网络引导程序 | 显示菜单,加载内核或 WinPE | PXELINUX、GRUB(UEFI 下通常配 shim)、iPXE | — |
| 安装源 | 系统安装包或镜像内容 | nginx、Apache、NFS、SMB(装 Windows 时) | TCP 80、2049、445 |
| 应答文件 | 替人回答安装程序的所有问题 | Kickstart、preseed、autoinstall、autounattend.xml、ESXi 的 ks.cfg | 跟随安装源 |
| 网络 | 让 DHCP 广播到达服务器 | 独立的装机 VLAN;跨网段时在网关上配 DHCP 中继 | — |
| 触发 | 让服务器这一次从网络启动 | BMC 一次性启动设置、开机按 F12 | UDP 623(IPMI) |
前三项(DHCP、TFTP、引导程序)属于 PXE 本身,后面几项属于“装机”。Cobbler、Foreman、MAAS、iVentoy、WDS 这类工具,把其中几项打包在一起管理,原理并没有不同。
两个和网络有关、常被忽略的细节:
- 交换机端口要开快速转发。接待装机器的端口如果跑经典生成树,链路起来后要经过约 30 秒的侦听和学习才转发数据,PXE 客户端的 DHCP 请求可能在这段时间里超时。把这些端口设为边缘端口(思科叫 PortFast)即可。
- UEFI 安全启动要求整条引导链都有签名。开启安全启动时,NBP、内核都要有合法签名,发行版签过名的 shim 加 GRUB 可以通过,自己编译的 iPXE 一般过不了,要么关闭安全启动,要么换用签名的引导程序。
PXE 也在演进:iPXE 是一个开源的网络引导程序,可以被 PXE 加载后接管,用 HTTP 代替 TFTP 下载、执行脚本,速度和灵活性都好得多;UEFI 2.5 起的 HTTP Boot 则让固件本身直接用 HTTP 下载引导文件,客户端架构码也有对应的取值(x86-64 UEFI HTTP 为 16)。两者都还以 DHCP 为起点,可以看作 PXE 思路的延续。
应答文件:PXE 装机能做到无人值守的关键
PXE 只解决“启动”,真正让装机不用人守着的是应答文件。不同系统的格式不同,指过去的方式也不同:
| 系统 | 应答文件 | 怎么告诉安装程序去哪取 |
|---|---|---|
| Rocky Linux、AlmaLinux、RHEL 8 / 9 | Kickstart | 内核参数 inst.repo=http://10.30.0.2/rocky9 inst.ks=http://10.30.0.2/ks/web.cfg |
| Debian | preseed | 内核参数 auto=true priority=critical url=http://10.30.0.2/preseed/web.cfg |
| Ubuntu Server 20.04 及以后 | autoinstall(cloud-init 格式) | 内核参数加 autoinstall 并指定 nocloud 数据源地址,写法随版本有变化,以 Ubuntu 文档为准 |
| Windows Server | autounattend.xml | WinPE 启动后运行 setup.exe /unattend: 加应答文件路径 |
| VMware ESXi | ks.cfg | 在 boot.cfg 的 kernelopt 一行写 ks=http://10.30.0.2/esxi/ks.cfg |
应答文件里风险最高的是装到哪块盘。一份写着“清空全部磁盘”的应答文件,遇到挂着数据盘的机器会把数据一起清掉。以 Kickstart 为例,显式限定目标盘:
ignoredisk --only-use=sda
clearpart --all --initlabel --drives=sda
autopart --type=lvm
设备名在混插 SATA、NVMe 和阵列卡的机器上并不稳定,sda 不一定是你以为的那块盘。批量装机前先在一台样机上确认安装程序里的盘符,机型不同的分开写应答文件,或改用 /dev/disk/by-path/ 这类按物理位置命名的路径。
PXE 装机和 U 盘、光盘装机怎么选
| 对比项 | PXE 网络装机 | U 盘装机 | 光盘或 BMC 虚拟光驱 |
|---|---|---|---|
| 要不要到现场 | 不用,配合 BMC 远程触发 | 要 | 实体光盘要;虚拟光驱不用 |
| 前期投入 | 搭服务、写菜单和应答文件,首次以天计 | 做一个启动盘,十几分钟 | 准备 ISO |
| 每台的人工 | 设置一次网络启动,几分钟 | 插盘、选启动项、守着安装 | 挂镜像、守着安装 |
| 能否同时装多台 | 能,上限取决于安装源带宽 | 一个 U 盘对应一台 | 每台单独挂镜像,要逐台操作 |
| 结果是否一致 | 同一份应答文件,分区和软件包一致 | 取决于操作的人 | 取决于操作的人 |
| 典型故障 | DHCP 抢答、VLAN 不通、BIOS 与 UEFI 文件不匹配 | 启动盘制作模式不对、USB 口不识别 | 镜像传输慢或中断 |
| 适合 | 批量上架、出租业务反复重装 | 少量机器、新机房网络还没通 | 单台远程救急、装特殊系统 |
要不要搭 PXE,可以算一笔时间账。假设 U 盘装一台,人工要花 30 分钟(走到机柜、插盘、选启动项、回答安装向导);第一次搭好 PXE 环境要 8 小时,之后每台人工 2 分钟。那么 8 × 60 ÷(30 − 2)≈ 17.1,装到第 18 台时,PXE 省下的时间就超过了搭建的投入。如果只是一次性上架十来台,U 盘或虚拟光驱更划算;如果是出租业务,机器退租、换客户、客户要求换系统,同一台机器一年要重装好几次,环境搭一次反复用,PXE 的账很快就算回来了。
以下情况不急着上 PXE:网段里有你管不了的 DHCP,又不方便用 proxyDHCP;一年只装几台机器;必须开启安全启动而手里没有签名的引导链;要装的系统需要大量人工选择,写不成应答文件。
在管理系统里怎么落地
PXE 解决了“机器怎么从网络把安装程序拉起来”,但在机房里,什么时候让哪台机器走 PXE、装完怎么确认、装的是哪个镜像,还要有人调度。Toplink DCIM 的 IPMI 远程管理可以通过 BMC 把服务器的下一次启动设为 PXE、在线 ISO 或硬盘,配合重装系统使用;批量装机时可以一次把多台服务器设为从 PXE 启动,交给任务队列批量重装,后台能看到每台的进度,各机房部署的从节点就近执行重装任务。服务器分配给客户后,客户在自助端选择镜像自行重装,重装属于高危操作,需要输入 OTP 动态口令确认。
常见问题
PXE 启动和无盘启动是一回事吗?
不完全是。PXE 只负责把第一个引导程序送进内存;之后把系统装到本地硬盘就是 PXE 装机,把系统根目录放在网络存储(NFS、iSCSI)上一直这样运行就是无盘启动。无盘工作站、渲染节点的第一步同样是 PXE。
PXE 支持 IPv6 吗?
UEFI 的网络启动支持 IPv6,引导文件地址由 DHCPv6 的启动文件 URL 选项(RFC 5970)下发,BIOS 设置里通常能分别开启 IPv4 和 IPv6 PXE;传统 Legacy 网卡的 Option ROM 基本只支持 IPv4。纯 IPv6 装机网段较少见,服务端和交换机都要另行配置。
服务器一直开着 PXE 启动有安全风险吗?
有。网段里任何能回应 DHCP 的机器都能给它下发引导程序,误装或恶意引导都可能清掉硬盘。装机网段要单独划 VLAN,业务网口的网络启动排在硬盘之后,需要重装时再用 BMC 设置一次性 PXE 启动。