1. 网络启动概述:从PXE到批量部署
网络启动,说白了就是让一台没装系统的机器,通过网络把操作系统拉起来。你想想看,如果公司有200台新服务器,一台台插U盘装系统,得装到什么时候?网络启动就是干这个的。
我最早接触这玩意儿是在2008年,那时候给一家数据中心做批量部署。几百台机器,没有网络启动,光靠人工,一个月都搞不定。后来用了PXE,两天全部上线。嗯,从那以后,我就再也没用过U盘装系统了。
1.1 什么是PXE
PXE(Preboot eXecution Environment),是Intel在1999年提出的一套标准。它定义了一种机制:机器在没操作系统的时候,怎么从网络获取启动文件并执行。
说白了,PXE就是给裸机装了一个“网络网卡驱动+小型的网络协议栈”。机器一开机,BIOS/UEFI会告诉网卡:“你去网络上找找,看有没有能启动的东西。”网卡就按照PXE的流程,去DHCP服务器拿IP,去TFTP服务器下载启动文件,然后执行它。
核心要点: PXE本身不是一个协议,而是一套完整的启动环境规范。它依赖DHCP、TFTP、DNS等现有协议,但定义了它们如何协同工作。
1.2 网络启动的工作流程
整个流程,我习惯把它分成四个阶段。每个阶段都有明确的任务,缺一不可。
- 客户端初始化:机器开机,网卡固件(PXE ROM)被激活,开始寻找DHCP服务器。
- 获取网络参数:客户端发送DHCP Discover广播,DHCP服务器返回IP地址、子网掩码、网关,以及最重要的——TFTP服务器地址和启动文件名。
- 下载启动文件:客户端通过TFTP协议,从服务器下载启动引导程序(比如pxelinux.0、grubx64.efi)。
- 加载操作系统:引导程序再根据配置文件,下载内核、initrd,最终启动操作系统。这一步可能用到HTTP、NFS甚至iSCSI。
我画了一张流程图,把整个链路串起来,你看一眼就明白了。
避坑指南: 我曾经遇到过一个案例,客户端总是卡在“下载引导文件”这一步。查了半天,发现是DHCP返回的next-server地址写错了,指向了另一台不存在的TFTP服务器。记住:DHCP的next-server和filename两个选项,一个都不能错。
1.3 核心协议简介
网络启动涉及好几个协议,每个都有自己的角色。我整理了一张表,把它们的职责和特点说清楚。
| 协议 | 端口 | 传输层 | 主要用途 | 特点 |
|---|---|---|---|---|
| DHCP | 67/68 | UDP | 分配IP、指定TFTP服务器和启动文件 | 动态配置,支持option扩展 |
| TFTP | 69 | UDP | 下载引导文件、内核、initrd | 简单轻量,无认证,无目录列表 |
| HTTP | 80/8080 | TCP | 替代TFTP下载大文件(如ISO) | 速度快,支持断点续传,更稳定 |
| NFS | 2049 | UDP/TCP | 挂载远程根文件系统(无盘工作站) | 支持文件共享,适合无盘场景 |
这里我多说几句:
- DHCP:它是整个流程的“总指挥”。没有它,客户端连IP都拿不到,更别提后续了。我个人习惯在DHCP里把next-server和filename写死,避免客户端去广播查找,能省不少时间。
- TFTP:它很古老,也很脆弱。传输大文件时容易超时,而且没有加密。我建议只用它传小文件(比如引导程序),内核和initrd如果太大,改用HTTP。
- HTTP:现在越来越多的项目用HTTP替代TFTP。比如iPXE固件就支持直接从HTTP服务器启动。速度快,还支持HTTPS加密,安全多了。
- NFS:无盘工作站的最爱。客户端启动后,直接把NFS共享目录挂载成根文件系统。所有机器共用一套系统,管理起来特别方便。
注意: TFTP基于UDP,没有拥塞控制。在千兆网络环境下,传输大文件(超过100MB)时,丢包率会明显上升。我曾经在部署CentOS 7时,内核文件50MB,TFTP传了3次才成功。后来换成HTTP,一次搞定。
1.4 典型应用场景
网络启动不是玩具,它在生产环境中用处很大。我挑三个最常见的场景说说。
无盘工作站
办公室的电脑没有硬盘,全靠网络启动。客户端从NFS或iSCSI挂载根文件系统,所有数据存在服务器上。好处是:数据安全(硬盘丢了也没用)、维护方便(升级系统只需改服务器)、节省成本(不用买硬盘)。
我在一家设计公司见过这种方案,30台工作站,全部无盘。管理员在服务器上装好软件,所有客户端重启就能用。嗯,省心。
自动化安装
这是我最常用的场景。新机器上架,插上网线,开机,剩下的全自动。服务器通过PXE启动一个迷你Linux环境,然后根据预设的Kickstart(Red Hat系)或Preseed(Debian系)配置文件,自动分区、装包、设置网络。
我曾经帮一家云厂商搭建过自动化安装平台,每天平均部署50台物理机。运维团队只需要把机器上架、插线、开机,其他什么都不用管。3小时后,机器直接加入生产集群。
批量部署
和无盘工作站不同,批量部署是把系统装到本地硬盘上。PXE只负责启动安装程序,安装完成后,机器就从本地硬盘启动了。这种方式适合需要独立运行、对网络依赖低的场景。
举个例子:公司要升级200台服务器的操作系统。用PXE+Kickstart,写一个自动化脚本,然后批量重启。第二天早上来,所有机器都跑着新系统。你想想看,如果一台台手动装,得加多少班?
我的建议: 如果你是第一次搭建网络启动环境,先从自动化安装入手。它最直观,也最容易验证。等流程跑通了,再尝试无盘工作站或HTTP启动。别一上来就搞复杂的,容易把自己绕进去。
好了,第一章就聊这么多。网络启动的核心概念、工作流程、协议角色、应用场景,你应该有个整体认识了。后面我们会一步步搭建真实环境,到时候你会看到这些协议是怎么配合的。