PXE (Preboot Execution Environment) 是一种允许计算机通过网络接口(网卡)启动的行业标准协议。它绕过了本地存储介质(如硬盘、USB 或光驱),使系统能够通过网络加载操作系统或引导程序。

核心组件:

  • 客户端(PXE Client):主板 BIOS/UEFI 固件必须支持 PXE,且网卡需具备引导功能。
  • DHCP 服务器:负责分配 IP 及告知客户端去哪里找引导程序(next-serverfilename)。
  • TFTP/HTTP 服务器:负责存储引导程序、内核镜像和配置文件。虽然传统 PXE 依赖 TFTP(传输速度慢,无重传机制),但现代部署多倾向于使用 iPXE,它支持 HTTP/HTTPS/iSCSI,速度更快且具备脚本编程能力。
  • 引导加载程序 (NBP):如 syslinux 或 ipxe.efi,它是整个链路的桥梁。

PXE工作流程

  1. DHCP握手
    • 客户端的网卡(支持PXE的BIOS/UEFI固件)发出DHCP Discover广播包。
    • DHCP服务器响应该请求,并在返回的IP信息中包含PXE特有的Option 66(TFTP Server地址)和Option 67(引导文件名,如pxelinux.0ipxe.efi
  2. 引导程序下载
    • 客户端根据DHCP提供的信息,通过TFTP或HTTP协议连接到服务器,下载引导程序(NBP - Network Boot Program)。
  3. 配置文件加载
    • 引导程序启动后,会向服务器请求配置文件(例如pxelinux.cfg/default),该文件定义了操作系统内核(Kernel)和初始文件系统(Initrd)的位置。
  4. 内核与安装程序加载
    • 客户端通过TFTP/HTTP下载内核镜像和根文件系统,加载到内存中并执行。
  5. 操作系统安装/引导
    • 系统进入安装界面或加载远程挂载的根文件系统。

UEFI与Legacy BIOS的差异

PXE 引导文件名在 UEFI 和 Legacy 环境下完全不同。你需要在 DHCP 服务器上根据客户端架构(Option 93)进行判断,并返回对应的引导文件(如 ipxe.efi vs pxelinux.0)。 现代服务器环境几乎全部迁移到了 UEFI 引导。


Kickstart

Kickstart 是红帽(Red Hat)系列发行版(如 RHEL, CentOS, Rocky Linux, Fedora)引入的一种自动化安装方式。

它本质上是一个名为 ks.cfg 的文本文件。在这个文件中,你可以预先定义好原本需要在安装界面手动点击的所有选项,例如:

  • 语言和键盘布局
  • 时区设置
  • 磁盘分区(LVM、RAID 或普通分区)
  • 根密码(Root Password)
  • 要安装的软件包组(@Core, @Development Tools)
  • Post-install 脚本:安装完成后自动执行的 Shell 脚本(比如配置静态 IP、修改 SSH 端口、安装监控 Agent 等)。

PXE + Kickstart 的协作流程

  1. 引导阶段 (PXE):网卡通过 DHCP 获取 IP,并从 TFTP 下载引导程序(如 pxelinux.0)。
  2. 获取指令 (Config):引导程序读取配置文件。在配置文件的内核参数行(append 行),我们会手动添加一个指向 Kickstart 文件的参数,例如: inst.ks=http://192.168.1.10/ks.cfg
  3. 获取脚本 (Kickstart):安装程序(Anaconda)启动后,会根据上述 URL 通过 HTTP/HTTPS 下载 ks.cfg 文件。
  4. 自动执行:安装程序不再弹出任何图形界面,而是直接按照 ks.cfg 里的指令划分布局、安装系统。
  5. 收尾阶段:执行 Kickstart 中的 %post 部分,完成最后的系统加固或环境初始化。

自动化趋势

  • iPXE:它是目前 PXE 的最佳替代方案。支持脚本化操作,可以将复杂的部署逻辑集成在脚本中,而不必受限于传统的静态菜单。
  • Netboot.xyz:一个基于 iPXE 的开源项目,允许你通过网络引导并安装各种 Linux 发行版及工具,是学习和构建 PXE 环境的优秀参考。
  • MaaS (Metal as a Service):如果需要管理大规模裸机,Canonical 的 MaaS 是处理 PXE 自动化生命周期的工业级工具。