PXE 和 FLEXBOOT 的启动差别以及如何配置

在现代数据中心和企业 IT 环境中,无盘启动(diskless boot)和远程操作系统部署已成为提升运维效率的重要手段。其中,PXE(Preboot eXecution Environment)是最广为人知的网络引导协议,而 FLEXBOOT 则是一个相对较少被提及但同样具备实用价值的替代方案。本文将从工作原理、功能差异、适用场景以及基础配置方法等方面,对比分析 PXE 与 FLEXBOOT,并提供相应的配置指导。

什么是 PXE?

PXE 是由 Intel 在 1999 年提出的一种标准化网络引导机制,允许计算机通过网络从远程服务器加载操作系统镜像或安装程序。它依赖于 DHCP、TFTP 和可选的 HTTP/NFS 等协议协同工作。

PXE 启动流程简述

  1. 客户端开机:启用网络引导(通常在 BIOS/UEFI 中设置)。
  2. DHCP 请求:客户端广播 DHCPDISCOVER 请求,寻找可用的 IP 地址。
  3. DHCP 响应 + PXE 扩展:DHCP 服务器不仅分配 IP 地址,还通过特定选项(如 Option 66 指定 TFTP 服务器地址,Option 67 指定引导文件名)告知客户端下一步操作。
  4. TFTP 下载引导文件:客户端使用 TFTP 协议从指定服务器下载 NBP(Network Bootstrap Program),例如 pxelinux.0grubx64.efi
  5. 执行引导程序:NBP 被加载到内存并执行,进而加载内核、initrd 或其他操作系统组件。

PXE 支持 Legacy BIOS 和 UEFI 两种启动模式,广泛用于 Linux 安装(如 Kickstart)、Windows 部署(如 WDS)及无盘工作站等场景。

什么是 FLEXBOOT?

FLEXBOOT 并非一个官方标准协议,而是某些厂商(如 Dell、HP)在其定制固件或网络引导解决方案中使用的术语,有时也指代基于 iPXE(原 gPXE)的增强型网络引导实现。需要特别说明的是,“FLEXBOOT”这一名称在公开技术文档中并不统一,其具体含义可能因上下文而异。

在实际使用中,FLEXBOOT 通常指以下两种情况之一:

  • 厂商定制的网络引导环境:例如 Dell 的“FlexAddress”或某些 BIOS 设置项中的“FlexBoot”选项,主要用于管理 MAC 地址或启用高级网络功能。
  • 基于 iPXE 的灵活引导方案:部分用户或文档将支持脚本化、HTTP 下载、链式加载等功能的 iPXE 引导称为“FlexBoot”,强调其相较于传统 PXE 的灵活性。

为避免混淆,本文讨论的“FLEXBOOT”主要指 基于 iPXE 的增强网络引导机制,这是目前社区和企业中最接近“FLEXBOOT”概念的通用实现。

PXE 与 FLEXBOOT(iPXE)的核心差异

虽然两者都用于网络启动,但在协议支持、功能扩展性和配置复杂度上存在显著区别。

1. 协议支持能力

特性 PXE(传统) FLEXBOOT(iPXE)
TFTP 支持 ✅ 必需 ✅ 支持
HTTP/HTTPS 支持 ❌ 不支持 ✅ 原生支持
NFS/SMB 支持 ❌(需后续阶段支持) ✅(部分版本支持)
脚本化引导 ❌ 有限(依赖 pxelinux.cfg) ✅ 支持嵌入式脚本或远程脚本
链式加载 ❌ 有限 ✅ 可链式加载其他 iPXE 或 PXE 镜像

传统 PXE 严重依赖 TFTP,而 TFTP 是一种简单但低效的协议(无目录列表、传输慢、无认证)。相比之下,iPXE(即本文所指的 FLEXBOOT)可以直接通过 HTTP 从 Web 服务器下载大体积的内核或镜像,显著提升部署速度和可靠性。

2. 引导流程灵活性

  • PXE:引导流程固定,由 DHCP 提供的 NBP 决定后续行为。修改引导逻辑通常需要更改 TFTP 上的配置文件(如 pxelinux.cfg/default)。
  • iPXE/FLEXBOOT:可在引导过程中动态执行脚本。例如,可根据客户端 MAC 地址、IP 地址或用户输入决定加载哪个操作系统镜像,甚至可集成 REST API 进行策略决策。

3. 固件集成方式

  • PXE:几乎所有现代网卡和主板 BIOS/UEFI 都内置 PXE ROM。
  • iPXE/FLEXBOOT:通常不预装在硬件中。若要使用,有三种方式:
    1. 链式加载:先通过 PXE 加载 iPXE 的 .pxe.efi 文件,再由 iPXE 接管后续引导。
    2. 刷写网卡 ROM:将 iPXE 固件烧录到网卡(风险较高,不推荐普通用户操作)。
    3. 使用 USB 或 ISO 启动 iPXE:适用于临时测试。

如何配置 PXE 启动环境

以下是在 Linux 服务器上搭建基本 PXE 服务的步骤(以 CentOS/RHEL 或 Ubuntu 为例)。

1. 安装必要服务

# CentOS/RHEL
sudo yum install -y dhcp-server tftp-server syslinux xinetd

Ubuntu/Debian

sudo apt install -y isc-dhcp-server tftpd-hpa syslinux-common

2. 配置 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 domain-name-servers 8.8.8.8;
  filename "pxelinux.0";               # 引导文件名
  next-server 192.168.1.10;            # TFTP 服务器 IP
}

确保 DHCP 服务监听正确的网卡。

3. 配置 TFTP 服务

将引导文件复制到 TFTP 根目录(通常为 /var/lib/tftpboot):

sudo cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
sudo mkdir /var/lib/tftpboot/pxelinux.cfg

创建默认配置文件 /var/lib/tftpboot/pxelinux.cfg/default

DEFAULT linux
LABEL linux
  KERNEL vmlinuz
  APPEND initrd=initrd.img inst.repo=http://192.168.1.10/centos8/

将对应的 vmlinuzinitrd.img 从安装 ISO 中复制到 TFTP 目录。

4. 启动服务并测试

sudo systemctl enable --now dhcpd tftp

客户端设置 BIOS/UEFI 为网络优先启动,即可尝试 PXE 引导。

如何配置 FLEXBOOT(基于 iPXE)环境

由于 iPXE 通常通过 PXE 链式加载,配置分为两步:先部署传统 PXE,再用它加载 iPXE。

1. 准备 iPXE 引导文件

iPXE 官网 下载预编译的镜像,例如:

  • undionly.kpxe(用于 Legacy BIOS)
  • ipxe.efi(用于 UEFI)

将其放入 TFTP 根目录:

sudo wget https://boot.ipxe.org/undionly.kpxe -O /var/lib/tftpboot/ipxe.pxe

2. 修改 DHCP 或 PXE 配置以加载 iPXE

方法 A:通过 DHCP 直接指向 iPXE

修改 DHCP 配置中的 filename

filename "ipxe.pxe";
next-server 192.168.1.10;

方法 B:通过 PXE 链式加载(更常见)

保留原有 PXE 配置,但在 pxelinux.cfg/default 中添加链式加载项:

DEFAULT ipxe
LABEL ipxe
  KERNEL ipxe.pxe

这样,客户端先加载 pxelinux.0,然后选择启动 ipxe.pxe,进入 iPXE 环境。

3. 编写 iPXE 脚本(可选)

iPXE 支持内嵌脚本。例如,创建一个 HTTP 可访问的脚本 http://192.168.1.10/boot.ipxe

#!ipxe
dhcp
kernel http://192.168.1.10/centos8/images/pxeboot/vmlinuz inst.repo=http://192.168.1.10/centos8/
initrd http://192.168.1.10/centos8/images/pxeboot/initrd.img
boot

然后,在 iPXE 提示符下执行:

iPXE> chain http://192.168.1.10/boot.ipxe

或在 DHCP 中通过 Option 67 直接指定该脚本 URL(需 iPXE 支持)。

4. 使用 Web 服务器分发内容

安装并启动 HTTP 服务器:

sudo yum install -y httpd
sudo systemctl enable --now httpd
sudo cp -r /path/to/centos8 /var/www/html/

现在,系统镜像可通过 HTTP 快速下载,绕过 TFTP 的性能瓶颈。

适用场景建议

  • 使用传统 PXE 当

    • 环境简单,仅需部署少量系统。
    • 客户端硬件老旧,不支持高级引导功能。
    • 运维团队熟悉 Syslinux/PXELINUX 配置。
  • 使用 FLEXBOOT(iPXE)当

    • 需要通过 HTTP/HTTPS 加载大镜像(如完整 OS ISO)。
    • 希望实现动态引导逻辑(如根据资产标签选择镜像)。
    • 需要跨子网、带认证或加密传输的部署场景。
    • 构建自动化云初始化或裸金属部署平台(如 MAAS、Foreman)。

结语

PXE 作为行业标准,提供了稳定可靠的网络引导基础;而 FLEXBOOT(通常体现为 iPXE)则在此基础上引入了更高的灵活性和现代协议支持。两者并非互斥,实践中常结合使用:用 PXE 加载 iPXE,再由 iPXE 完成高效、智能的系统部署。理解它们的差异与协作方式,有助于构建更高效、可扩展的自动化运维体系。