PXE批量装机是日常工作中高频且核心的技能------无需逐台插U盘、刻光盘,就能快速完成多台服务器的系统部署。但实际操作中,很多人会被BIOS和UEFI两种启动模式搞混,出现"配置好PXE却启动失败""系统装完无法引导"等问题,白白浪费大量运维时间。
今天就结合实操场景,梳理BIOS和UEFI模式下PXE装机的核心逻辑、文件调用关系、路径配置,以及常见故障排查。
一、先搞懂核心:BIOS与UEFI模式的本质区别
PXE(预启动执行环境)是Intel开发的网络引导技术,工作在Client/Server模式,允许客户端通过网络从远程服务器下载引导镜像和安装文件,实现无介质装机。而BIOS和UEFI,是两种不同的主板启动规范,直接决定了PXE装机的引导逻辑、配置文件和操作流程,核心差异可以用一句话概括:
✅ BIOS模式:老服务器主流,依赖syslinux工具集,配置简单但功能有限,仅支持MBR分区和≤2TB硬盘;
✅ UEFI模式:新服务器(2018年后)默认,依赖GRUB2工具集,支持GPT分区、大于2TB硬盘、安全启动等高级功能,启动速度更快、安全性更高,是当前行业主流。
下面分别拆解两种模式的PXE装机全流程,重点讲清楚文件调用、路径配置,完全贴合机房运维实操,不搞纯理论堆砌。
二、BIOS模式PXE装机:传统模式,稳定兼容
BIOS模式是早期服务器的主流启动方式,PXE引导依赖syslinux项目的相关文件,整个流程的核心是"pxelinux.0引导程序+pxelinux.cfg配置目录",逻辑简单,兼容性极强,适合2018年前的老服务器,也是很多运维新手入门PXE的首选模式。
2.1 核心调用链(一步看懂流程)
服务器网卡PXE启动 → DHCP分配IP+告知TFTP地址+引导程序名(pxelinux.0) → 从TFTP下载pxelinux.0 → 加载依赖模块 → 按优先级查找pxelinux.cfg目录下的配置文件 → 读取内核/initrd路径+安装参数 → 下载vmlinuz和initrd.img → 内核启动 → 读取kickstart脚本 → 自动安装系统
2.2 核心文件与标准路径(必记,记错必踩坑)
所有文件均存放在PXE服务器的TFTP根目录(/var/lib/tftpboot/)下,路径固定,任何一个路径出错,都会导致PXE启动失败,建议直接复制使用:
- pxelinux.0:BIOS模式PXE的核心引导程序,二进制文件,来自syslinux安装包(路径:/usr/share/syslinux/pxelinux.0),是整个PXE流程的"总导演",负责调度后续所有步骤,缺一不可。
- 依赖模块:ldlinux.c32(核心库文件)、menu.c32(菜单显示模块),必须和pxelinux.0放在TFTP根目录,缺一不可------很多人只复制pxelinux.0,忘记复制ldlinux.c32,会导致服务器PXE启动后直接黑屏,无任何输出。
- pxelinux.cfg/目录:配置文件专属存放目录,权限必须为755,否则pxelinux.0无法读取里面的文件,标准路径:/var/lib/tftpboot/pxelinux.cfg/。
- 配置文件 :目录下只有纯文本配置文件,无其他类型文件,核心有3种,优先级不同:
- default:全局默认配置文件,优先级最低,所有服务器的兜底配置,路径:/var/lib/tftpboot/pxelinux.cfg/default;
- MAC地址命名文件:单台服务器专属配置,优先级最高,命名格式:01-xx-xx-xx-xx-xx-xx(前缀01,MAC地址用横杠分隔),适合给特定服务器定制启动项;
- IP十六进制命名文件:按网段分组配置,优先级居中,命名格式:服务器IP的32位十六进制(如192.168.1.100对应C0A80164),适合不同网段服务器安装不同系统。
- 内核与初始化内存盘:vmlinuz(内核文件)和initrd.img(初始化内存盘),从Linux ISO镜像的/images/pxeboot/目录提取,通常按系统版本分目录存放,示例路径:/var/lib/tftpboot/centos7/vmlinuz、/var/lib/tftpboot/centos7/initrd.img,两者必须成对使用,不能混用不同系统版本。
- kickstart脚本:自动化安装的"菜谱",定义分区、软件包、网络配置等,存放在HTTP服务器(TFTP速度慢,不适合传大文件),通过default文件的inst.ks参数指定路径,实现无人值守装机。
2.3 关键细节(新手必避坑)
- 配置文件查找优先级:MAC地址文件 > IP十六进制文件 > default文件,找到第一个存在的文件就停止查找,后续文件不会生效;
- 所有文件区分大小写(如Default和default是两个文件、Vmlinuz和vmlinuz是两个文件),权限必须正确(目录755,文件644);
- default文件中TIMEOUT参数的单位是1/10秒(如TIMEOUT 50表示5秒),TIMEOUT 0表示永久显示菜单,适合调试时使用;
- pxelinux.0的版本要适配Linux内核,老版本可能不支持新内核参数,导致启动失败,建议使用最新版syslinux工具集。
2.4 常见故障速查(按调用顺序)
| 故障现象 | 大概率原因 | 排查方法 |
|---|---|---|
| PXE启动后一直显示"DHCP..." | DHCP阶段异常 | 1. 检查DHCP服务是否运行;2. 确认DHCP与服务器在同一网段;3. 检查DHCP配置中next-server和filename(pxelinux.0)是否正确 |
| 获取IP后显示"TFTP open timeout" | TFTP服务或文件异常 | 1. 检查TFTP服务是否运行;2. 开放UDP 69端口;3. 确认pxelinux.0在TFTP根目录,权限644 |
| 下载pxelinux.0后黑屏 | 缺少依赖模块 | 检查TFTP根目录是否有ldlinux.c32,权限设置为644 |
| 显示"Could not find kernel image" | 内核路径错误 | 1. 核对default文件中KERNEL路径;2. 确认vmlinuz文件存在且文件名大小写正确 |
三、UEFI模式PXE装机:新服务器主流,高效安全
UEFI模式是当前新服务器(包括Xeon Silver 4510等型号)的默认启动方式,PXE引导依赖GRUB2项目的相关文件,核心逻辑和BIOS模式类似,但引导程序、配置文件路径完全不同,支持GPT分区、大于2TB硬盘、安全启动等高级功能,也是未来运维的主流方向。目前90%的新生产计算设备已采用UEFI技术,逐步替代传统BIOS模式。
3.1 核心调用链(对比BIOS,快速理解)
服务器网卡UEFI PXE启动 → DHCP分配IP+告知TFTP地址+引导程序名(grubx64.efi) → 从TFTP下载grubx64.efi → grubx64.efi加载自身模块 → 读取EFI/BOOT/grub.cfg配置文件 → 解析配置中的内核路径+initrd路径+安装参数 → 下载vmlinuz和initrd.img → 内核启动 → 读取kickstart脚本 → 自动安装系统
3.2 核心文件与标准路径(必记,与BIOS差异重点)
UEFI模式的文件路径与BIOS模式差异较大,所有核心文件仍存放在TFTP根目录(/var/lib/tftpboot/)下,但目录结构和文件名不同,重点记以下5类文件:
- grubx64.efi:UEFI模式PXE的核心引导程序,二进制文件,来自GRUB2工具集,标准路径:/var/lib/tftpboot/EFI/BOOT/grubx64.efi。若服务器开启安全启动,需使用带微软签名的shimx64.efi(路径相同),DHCP配置中filename需改为该文件,配合TPM 2.0芯片可实现更高等级的硬件安全防护[4]。
- EFI/BOOT/目录:UEFI配置文件的专属存放目录,权限必须为755,否则grubx64.efi无法读取里面的文件,标准路径:/var/lib/tftpboot/EFI/BOOT/,目录名不可写错(如小写efi/boot、EFI_BOOT均无效)。
- grub.cfg :UEFI模式的全局配置文件,GRUB2脚本格式的纯文本文件,无其他独立配置文件,标准路径:/var/lib/tftpboot/EFI/BOOT/grub.cfg,权限644。单台服务器定制需在该文件中添加条件判断(基于MAC/IP),示例:
# 给MAC地址为00:11:22:33:44:55的服务器单独配置启动项 ``if [ "${net_default_mac}" = "00:11:22:33:44:55" ]; then `` set default=1 # 默认启动第二个启动项 `` set timeout=1 ``fi - 内核与初始化内存盘:vmlinuz和initrd.img,与BIOS模式完全通用,路径相同(如/var/lib/tftpboot/centos7/vmlinuz),无需重新从ISO提取,仍需成对使用,不可混用系统版本。
- kickstart脚本:与BIOS模式通用,存放在HTTP服务器,唯一区别是分区部分需使用GPT分区表(UEFI模式强制要求),否则系统装完无法启动。
3.3 关键细节(与BIOS模式差异重点)
- 无MAC/IP独立配置文件:UEFI模式不支持BIOS模式那种按MAC/IP命名的独立配置文件,所有定制都需在grub.cfg中通过条件判断实现;
- 超时时间单位不同:BIOS模式default文件的TIMEOUT单位是1/10秒,UEFI模式grub.cfg的set timeout单位是"秒"(如set timeout=5表示5秒);
- 路径必须以/开头:grub.cfg中的linuxefi和initrdefi路径,必须是相对于TFTP根目录的绝对路径(如/linuxefi /centos7/vmlinuz),不能省略开头的/;
- 安全启动影响:开启安全启动后,必须使用shimx64.efi引导程序,否则无法通过签名验证,导致启动失败,同时需确保服务器支持TPM 2.0芯片并开启相关功能[4];
- 分区表要求:UEFI模式下系统盘必须使用GPT分区表,不能使用MBR,否则系统安装完成后无法从硬盘启动。
3.4 常见故障速查(按调用顺序)
| 故障现象 | 大概率原因 | 排查方法 |
|---|---|---|
| UEFI PXE启动后一直显示"DHCP..." | DHCP未识别UEFI架构 | 1. 检查DHCP服务运行状态;2. 确认DHCP配置中添加UEFI架构识别(option architecture-type code 93);3. filename设置为EFI/BOOT/grubx64.efi |
| 获取IP后显示"TFTP open timeout" | TFTP服务或引导程序异常 | 1. 检查TFTP服务和UDP 69端口;2. 确认grubx64.efi在EFI/BOOT/目录,权限644;3. 重新从ISO提取grubx64.efi |
| 下载grubx64.efi后黑屏 | 引导程序损坏或安全启动冲突 | 1. 重新提取grubx64.efi;2. 开启安全启动则改用shimx64.efi;3. 检查服务器UEFI模式是否开启 |
| 显示"error: file '/EFI/BOOT/grub.cfg' not found" | 配置文件路径或权限错误 | 1. 确认grub.cfg在EFI/BOOT/目录;2. 检查目录和文件权限(目录755,文件644);3. 核对文件名大小写 |
| 系统装完无法从硬盘启动 | 启动模式与分区表不匹配 | 1. 确认服务器是UEFI启动模式;2. 检查kickstart脚本中是否使用GPT分区表;3. 将硬盘设为UEFI第一启动项 |
四、BIOS与UEFI模式PXE核心对比(一目了然)
| 对比项 | BIOS模式 | UEFI模式 |
|---|---|---|
| 核心引导程序 | pxelinux.0(syslinux工具集) | grubx64.efi/shimx64.efi(GRUB2工具集) |
| 配置文件目录 | /var/lib/tftpboot/pxelinux.cfg/ | /var/lib/tftpboot/EFI/BOOT/ |
| 主配置文件 | pxelinux.cfg/default | EFI/BOOT/grub.cfg |
| 单服务器定制 | MAC/IP命名的独立配置文件 | grub.cfg中的条件判断(MAC/IP) |
| 超时时间单位 | 1/10秒 | 秒 |
| 内核路径格式 | 相对路径(centos7/vmlinuz) | 绝对路径(/centos7/vmlinuz) |
| 系统盘分区表 | MBR(≤2TB硬盘) | GPT(支持>2TB硬盘) |
| 安全特性 | 几乎无安全防护 | 支持安全启动、TPM加密,防护性强[4] |
| 适用服务器 | 2018年前老服务器 | 2018年后新服务器(默认) |
五、运维实操总结(重点必记)
-
老服务器(2018年前):优先用BIOS模式,配置简单、兼容性好,核心记"pxelinux.0+pxelinux.cfg/default",分区用MBR;
-
新服务器(2018年后):优先用UEFI模式,支持大硬盘、高安全,核心记"grubx64.efi+EFI/BOOT/grub.cfg",分区用GPT;
-
混合机房(新老服务器都有):无需搭建两套PXE系统,配置DHCP自动识别启动模式,分发对应引导程序即可;
-
通用要点:内核vmlinuz和initrd.img两种模式通用;kickstart脚本仅分区部分有差异;所有文件区分大小写、权限正确。