PXE 是怎么跑起来的
PXE(Preboot eXecution Environment)是网卡固件自带的网络引导能力:机器开机后由 DHCP 下发 IP 与引导文件名,再从 TFTP 取到引导器,引导器加载内核与 initrd,最后用 HTTP/FTP/NFS 上的安装源完成安装。整条链路配上 Kickstart 应答文件,就能做到无人值守批量装信创终端与服务器。
基本信息
| 组件 | DHCP + TFTP + HTTP/FTP/NFS 安装源(可同机部署) |
|---|---|
| 引导文件 | Legacy:pxelinux.0;UEFI:shimx64.efi + grubx64.efi |
| 内核与镜像 | vmlinuz(内核)、initrd.img(引导内存盘) |
| 关键参数 | inst.repo 指向安装源,inst.ks 指向应答文件 |
| 涉及端口 | 67/68(DHCP)、69(TFTP)、80(HTTP 源) |
| 权限要求 | 服务端 root;客户端需开启网卡 PXE 引导 |
典型使用场景
- 新机房批量上架服务器,减少一台台插盘的人力和时间
- 信创终端整批替换,需要统一分区、统一初始软件集
- 同一型号机器反复重装做测试,用同一应答文件保证环境一致
- 装机时把网卡与磁盘配置一并写进 Kickstart,避免手工选错落盘位置
- 内网离线环境:安装源放在内网 HTTP 服务上,不依赖外网
引导菜单与应答文件指向
引导菜单与应答文件指向
# grub.cfg / pxelinux 菜单片段(Legacy 写法)
label kylin
kernel vmlinuz # 内核文件名,需与 tftp 目录内一致
append initrd=initrd.img inst.repo=http://10.0.0.10/kylin inst.ks=http://10.0.0.10/ks/kylin.ks
# inst.repo 安装源地址;inst.ks 无人值守应答文件地址
# UEFI 场景把内核参数写进 grub.cfg 的 menuentry,并把 DHCP 的 filename 指向 shimx64.efiDHCP 关键配置
DHCP 关键配置
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.200; # 装机专用地址池,避免和业务 DHCP 抢段
filename "pxelinux.0"; # Legacy 引导文件;UEFI 换成 shimx64.efi
next-server 10.0.0.10; # TFTP 服务器地址,必须是客户端可达的地址
}故障现象定位
| 现象 | 最可能的原因 | 排查动作 |
|---|---|---|
| 一直等 DHCP,最终跳硬盘启动 | 地址池耗尽、DHCP 未监听该网段 | 看 DHCP 日志是否收到该网卡请求 |
| 拿到地址但提示 PXE-E32/E53 | next-server 或 filename 错误 | 确认 TFTP 根目录与文件名一致 |
| 进入菜单后加载内核卡住 | vmlinuz/initrd 版本与菜单不匹配 | 核对 tftp 目录内文件名与菜单写法 |
| 内核起来后报找不到安装源 | inst.repo 不可达或路径错 | 服务端 curl 自测该 URL |
| 装机中途停在分区/软件选择 | 应答文件语法错或字段缺 | 改用 ks 校验或看 anaconda 日志 |
混机型环境必须准备两套引导:UEFI 机器走 shim + grubx64.efi,Legacy 机器走 pxelinux.0,靠 DHCP 的 vendor-class-identifier 或分地址池区分。
整个 PXE 装机过程不加密,Kickstart 里如果写了初始口令,应放在内网受限服务上,装完立刻改密。