1. 网络启动概述

大家好,我是你们这堂课的讲师。做了十几年系统架构和网络工程,说实话,网络启动这门技术,是我觉得「学了就能立刻用上」的硬功夫。今天咱们先聊聊基础——什么是PXE,它到底怎么工作的,以及现实中哪些地方离不开它。

1.1 什么是PXE?

PXE,全称是 Preboot eXecution Environment,预启动执行环境。说白了,就是让一台还没装系统的裸机,通过网络从远程服务器启动起来。

你想想看,传统装系统得插光盘、U盘,一台两台还行,要是几百台服务器呢?我当年在数据中心就遇到过这情况——新到货200台服务器,每台都得手动插U盘装系统,那滋味……嗯,干过一次就不想干第二次。

PXE 的核心思想很简单:网卡自带一个小型操作系统,它启动后去网络上找DHCP服务器拿IP,再找TFTP服务器下载引导程序,最后加载完整操作系统或安装镜像。

关键点:PXE 不是装系统,而是「启动」系统。它可以启动一个完整的操作系统(无盘工作站),也可以启动一个安装程序(自动化安装)。

1.2 网络启动的工作流程

流程其实不复杂,我拆成6步来讲。每一步都有它存在的道理,少一步都跑不起来。

  1. 客户端开机,网卡初始化——网卡固件(PXE ROM)被激活,广播一个DHCP请求。
  2. DHCP服务器响应——返回IP地址、子网掩码,以及下一个引导服务器的地址(通常是TFTP服务器)。
  3. 客户端下载引导程序——通过TFTP协议,从服务器获取 pxelinux.0 或 bootx64.efi 等文件。
  4. 引导程序加载配置文件——读取 pxelinux.cfg 目录下的配置文件,决定启动哪个内核和镜像。
  5. 下载内核和initrd——同样通过TFTP或HTTP,获取Linux内核(vmlinuz)和初始内存盘(initrd.img)。
  6. 启动内核,挂载根文件系统——内核启动后,根据配置挂载NFS、iSCSI或HTTP上的根文件系统,完成启动。

我的经验:实际项目中,第2步最容易出问题。DHCP返回的「next-server」和「filename」选项经常写错。我曾经排查了一下午,结果发现是DHCP配置里少了个引号……

下面这张图,把整个流程串起来了。我建议你多看几遍,理解每一步的依赖关系。

PXE 网络启动工作流程 ① 客户端开机 ② DHCP 服务器 ③ TFTP 服务器 DHCP 广播 返回 IP + next-server 请求 pxelinux.0 ④ 加载引导程序 ⑤ 读取配置文件 ⑥ 下载内核+initrd 请求配置 指定内核路径 ⑦ 启动内核,挂载根文件系统 内核加载完成 ✅ 系统启动成功

1.3 典型应用场景

光讲理论没意思,咱们看看实际中哪些地方在用。我挑三个最常见的场景说说。

场景一:无盘工作站

无盘工作站,就是客户端没有硬盘,全靠网络启动。多见于学校机房、网吧、呼叫中心。我见过一个学校机房,300台电脑全无盘,一台服务器带所有。好处是维护方便——系统更新只改服务器,客户端重启就生效。

注意:无盘工作站对网络要求很高。我曾经遇到一个案例,交换机端口限速没关,结果50台机器同时启动,网络直接瘫痪。后来加了组播和流量整形才解决。

场景二:自动化安装

这是我最常用的场景。配合 Kickstart 或 Preseed,可以实现「插电即装」。流程是这样的:

  • PXE 启动后加载安装内核
  • 自动从 HTTP/NFS 服务器拉取安装镜像
  • 读取预设的应答文件(如 ks.cfg),全自动完成分区、软件包选择、网络配置

我当年给一家互联网公司搭过这套系统。200台服务器,从拆箱到系统装完,两个人半天搞定。要是手动装,一周都干不完。

场景三:数据中心批量部署

大型数据中心里,PXE 是标配。配合 DHCP 的 MAC 地址绑定,可以实现:

  • 不同硬件配置的服务器,自动加载不同的操作系统
  • 故障机器自动重装(通过 IPMI 远程开机 + PXE)
  • 版本回滚——改一下配置文件,重启就能切到旧版本

一个小技巧:我习惯在 DHCP 里按 MAC 地址分配不同配置。比如 01:23:45:67:89:ab 这台机器,指定它加载 CentOS 的引导文件;01:23:45:67:89:ac 则加载 Ubuntu 的。这样混搭部署非常灵活。

1.4 小结

好了,这一章的内容就这些。PXE 说白了就是「网卡帮你从网络找系统」。流程不复杂,但每一步都有坑。我建议你动手搭一次实验环境,遇到问题再回头看这张流程图,会理解得更深。