1、PXE原理与基础:什么是网络启动、PXE的工作流程、DHCP与TFTP的角色、BIOS/UEFI启动顺序

1.1 什么是网络启动?

网络启动,说白了就是让电脑不依赖本地硬盘、U盘或光驱,直接从网络加载操作系统。

我刚开始接触这玩意儿时,也觉得挺神奇的——一台裸机,插上网线,开机后居然能自动装系统。后来才明白,这背后是一套完整的协议栈在协同工作。

你想想看,传统装系统得准备光盘或U盘,批量部署几十台服务器时,插拔U盘能让人崩溃。网络启动就是为了解决这个痛点而生的。

它的核心价值在于:

  • 集中管理:所有启动镜像存放在服务器上,客户端无需本地存储
  • 批量部署:一次配置,多台机器同时启动
  • 无盘运行:客户端甚至可以没有硬盘,完全依赖网络运行

核心概念:网络启动依赖客户端网卡固件中的PXE(Preboot eXecution Environment)代码。网卡通电后,PXE代码会主动向网络发起启动请求。

1.2 PXE的工作流程

PXE的工作流程其实不复杂,我把它拆成四个阶段来讲:

  1. DHCP发现阶段:客户端广播DHCP请求,获取IP地址和启动服务器信息
  2. TFTP下载阶段:客户端从TFTP服务器下载启动引导程序(如pxelinux.0)
  3. 配置文件加载:引导程序读取配置文件,确定下一步加载哪个内核和initrd
  4. 内核启动:加载Linux内核和根文件系统,进入安装或运行环境

嗯,这里要注意一个细节:DHCP服务器需要配置两个关键选项——next-server(TFTP服务器地址)和filename(启动文件名)。

个人经验:我在项目中遇到过DHCP配置正确但客户端就是拿不到IP的情况。排查了半天,发现是交换机开启了DHCP Snooping,把客户端的请求报文给拦截了。关掉后一切正常。

下面这张图展示了PXE启动的完整流程:

PXE客户端 DHCP服务器 TFTP服务器 HTTP/NFS服务器 ① DHCP Discover ② DHCP Offer ③ TFTP请求 ④ 下载引导文件 ⑤ 请求内核/镜像 ⑥ 传输安装镜像 阶段一:网络发现 获取IP和启动服务器地址 阶段二:引导加载 下载pxelinux.0等引导文件 阶段三:系统安装 加载内核并安装操作系统

1.3 DHCP与TFTP的角色

这两个服务是PXE启动的基石,缺一不可。我分别说说它们的作用:

DHCP服务器

DHCP不只是分配IP地址那么简单。在PXE场景下,它还要告诉客户端:

  • TFTP服务器在哪里(next-server)
  • 要下载哪个启动文件(filename)
  • 子网掩码、网关、DNS等网络参数

关键配置示例(ISC DHCP):

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    next-server 192.168.1.10;      # TFTP服务器地址
    filename "pxelinux.0";         # 启动文件名
    option routers 192.168.1.1;
    option domain-name-servers 8.8.8.8;
}

TFTP服务器

TFTP是个轻量级的文件传输协议,基于UDP。它不像FTP那样需要认证,也不像HTTP那样功能丰富。但正因为简单,它非常适合在预启动环境中使用。

我记得有一次调试时,客户端总是卡在TFTP下载阶段。后来发现是防火墙把UDP端口69给封了。嗯,这种低级错误犯过一次就不会再犯了。

避坑指南:我曾经遇到过TFTP传输大文件超时的问题。PXE默认的TFTP块大小是512字节,传输速度很慢。建议在配置文件中启用blksize选项,把块大小调到1468字节,速度能提升好几倍。

1.4 BIOS/UEFI启动顺序

启动顺序决定了机器从哪里加载系统。在PXE场景下,我们需要把网络启动排在硬盘之前。

启动模式 特点 PXE支持 启动文件
Legacy BIOS 传统模式,16位实模式 支持PXE pxelinux.0
UEFI 现代模式,32/64位保护模式 支持UEFI PXE bootx64.efi
UEFI with CSM 兼容模式,模拟BIOS 支持传统PXE pxelinux.0

你想想看,如果硬盘里已经有系统了,而启动顺序把硬盘排在网络前面,那PXE根本不会触发。所以配置启动顺序时要注意:

  • BIOS模式:进入BIOS设置,把Network Boot或PXE Boot移到第一启动项
  • UEFI模式:在Boot Manager中启用IPv4 PXE Support,并调整启动优先级
  • 临时选择:开机按F12(不同厂商按键不同)直接进入网络启动菜单

个人建议:我习惯在部署阶段把网络启动设为第一优先级,部署完成后改回硬盘启动。这样可以避免误操作导致机器反复从网络启动。

另外,UEFI模式下还有一个Secure Boot的问题。如果启用了Secure Boot,PXE启动文件必须经过签名认证,否则会被拒绝加载。我在某次项目中就因为这个折腾了半天,最后在BIOS里临时关掉Secure Boot才搞定。

说白了,PXE启动就是一套「客户端-服务器」的协作流程。理解了这个基础,后面搭建环境时就能少走很多弯路。

本章小结:

  • 网络启动让裸机通过网络加载系统,适合批量部署
  • PXE流程分四步:DHCP发现 → TFTP下载 → 配置加载 → 内核启动
  • DHCP负责分配IP和告知启动服务器位置,TFTP负责传输启动文件
  • BIOS和UEFI的启动文件不同,配置时要注意区分

可可精品资料库