pxe批量无人值守安装linux的核心是部署dhcp、tftp、http(或ftp/nfs)和kickstart四大服务,裸机通电联网后自动获取ip、下载引导文件、加载内核并按ks.cfg脚本全自动完成系统安装。

用 PXE 实现 Linux 系统的网络批量无人值守安装,核心是把“启动引导”和“安装过程”全部交给网络服务自动完成。不需要插 U 盘、不用进 BIOS 选镜像、不手动点下一步——裸机通电联网,开机即装系统。
服务端必须部署的四个基础服务
所有服务需部署在同一台局域网服务器上(推荐 CentOS 7/8 或 Ubuntu 20.04+),且服务器配静态 IP、关闭防火墙或放行对应端口:
- DHCP 服务:给裸机分配 IP,并关键性地告知它“去哪找启动文件”——指定 TFTP 服务器地址和启动文件名(如 pxelinux.0);
- TFTP 服务(基于 xinetd):只传小文件,负责下发 PXE 引导程序 pxelinux.0、Linux 内核 vmlinuz 和初始化镜像 initrd.img;
- HTTP(或 FTP/NFS)服务:传大文件,提供完整安装源(如 CentOS 7 的 /os/centos7/ 目录),传输效率高推荐用 httpd;
- Kickstart(ks.cfg)配置:定义全自动安装逻辑,包括磁盘分区、root 密码、时区、软件包列表、网络配置、是否启用 ssh 等,安装过程全程不交互。
客户端要做的三件事
不是改代码,而是调硬件和基础设置:
- 确认网卡支持 PXE(现代服务器/主流主板基本都支持),并在 BIOS/UEFI 中开启 Network Stack 或 LAN Boot ROM;
- 将 Boot from Network 或 IPv4 Network Stack 设为第一启动项;
- 确保裸机与 PXE 服务器在同一个二层局域网内,中间不能有路由隔离,且全网只能有一个 DHCP 服务(否则会抢 IP 或返回错误引导信息)。
关键文件准备与路径规范
路径错一个字母,PXE 就会卡在“Starting kernel...”或直接报 TFTP timeout。按标准结构组织:
- TFTP 根目录(默认 /var/lib/tftpboot/)下放:
→ pxelinux.0(来自 syslinux 包)
→ pxelinux.cfg/default(启动菜单,指定内核路径和 ks 参数)
→ centos7/vmlinuz 和 centos7/initrd.img(从 ISO 的 isolinux/ 目录提取); - HTTP 根目录(如 /var/www/html/os/centos7/)下完整挂载或复制 ISO 内容(可用 mount -o loop 或 rsync -av);
- Kickstart 文件(如 /var/www/html/ks/centos7-ks.cfg)需在 pxelinux.cfg/default 中通过 ks=http://192.168.10.10/ks/centos7-ks.cfg 显式引用。
排错最常遇到的三个卡点
装不上不是配置全错,往往是某个环节没响:
- 开机后黑屏/停在 PXE-E61: Media test failure → 检查 BIOS 是否真启用了网络启动,有些机型需同时打开 UEFI/Legacy 模式匹配;
- 获取 IP 后卡在 “TFTP error 0.0.0.0” 或 “file not found” → 查 DHCP 配置中 next-server(TFTP 地址)和 filename(pxelinux.0 路径)是否写对,注意 TFTP 不支持子目录嵌套过深;
- 内核加载后报 “No boot device found” 或 “Failed to load kickstart” → 检查 ks.cfg URL 是否可被裸机 curl 通(可在另一台同网段 Linux 上测试),同时确认 ks.cfg 语法无误(可用 ksvalidator 工具校验)。











