在大规模 Linux 集群部署场景中,如 Web 服务器集群、分布式计算节点等,传统依赖光驱、U 盘等物理介质的装机方式面临效率低下、管理复杂、一致性难以保障等诸多问题。PXE(Preboot eXecution Environment,预启动执行环境)技术的出现彻底改变了这一现状,它基于 Client/Server 架构,实现了无介质化的网络远程装机,支持数十乃至上百台服务器的批量部署。在此基础上,结合 Kickstart 应答文件可进一步实现无人值守自动安装,大幅降低运维成本,提升部署效率与准确性。本文基于 OpenEuler 24.03 系统,从 PXE 技术原理、服务器搭建、无人值守配置三个核心维度,结合完整实操案例,详解批量网络装机的全流程,为大规模系统部署提供可落地的技术方案。

一、PXE 技术核心原理与部署前提

(一)PXE 技术工作机制

PXE 技术允许裸机客户机通过网络从远程服务器下载引导程序、内核镜像及安装文件,完成操作系统的自动化部署,其核心工作流程如下:

  1. 客户机开机后,BIOS 设置为网络引导,网卡发送 DHCP 请求,获取 IP 地址及 TFTP 服务器地址、PXE 引导程序文件名;
  2. 客户机通过 TFTP 协议从服务器下载 PXE 引导程序(pxelinux.0)及启动菜单文件;
  3. 引导程序加载 Linux 内核(vmlinuz)与初始化镜像(initrd.img),并读取启动菜单配置;
  4. 客户机根据配置访问网络安装源,下载系统安装文件,启动安装流程;
  5. 若配置了 Kickstart 应答文件,将自动完成安装过程中的各项设置,无需人工干预。

(二)部署核心前提

搭建 PXE 批量装机环境需满足以下硬件与软件条件:

  1. 硬件要求:客户机网卡支持 PXE 协议(集成 BOOTROM 芯片),主板支持网络引导(可在 BIOS 中设置为 LAN 启动);现代服务器与主流 PC 均已满足此要求。
  2. 软件环境
    • 部署 DHCP 服务器:为客户机分配 IP 地址,指定 TFTP 服务器地址与 PXE 引导程序位置;
    • 部署 TFTP 服务器:提供引导程序、内核镜像、启动菜单等文件的下载服务;
    • 搭建网络安装源:通过 FTP、HTTP 或 NFS 协议发布 Linux 系统安装文件;
    • 准备核心文件:包括 PXE 引导程序(pxelinux.0)、Linux 内核、初始化镜像、启动菜单文件等。

(三)PXE 装机的核心优势

相比传统装机方式,PXE 批量网络装机具备三大核心优势:

  1. 规模化部署:支持多台客户机同时装机,不受物理介质数量限制,适配大规模集群场景;
  2. 自动化执行:结合 Kickstart 实现无人值守安装,自动完成系统配置、软件安装等操作,减少人工干预;
  3. 无介质远程实现:无需光盘、U 盘等物理安装介质,降低运维成本,提升部署灵活性。

二、PXE 远程安装服务器搭建实操

(一)环境规划

本次实操基于 OpenEuler 24.03 系统,服务器核心配置如下:

  • 服务器 IP 地址:192.168.10.101
  • 网络安装源:FTP 协议(vsftpd 服务)
  • DHCP 地址池:192.168.10.200~192.168.10.250
  • TFTP 根目录:/var/lib/tftpboot
  • 安装源目录:/var/ftp/euler

(二)步骤 1:准备 Linux 网络安装源

采用 FTP 协议发布安装源,通过 vsftpd 服务提供访问,操作如下:

  1. 关闭防火墙与 SELinux(生产环境可配置精准规则,此处为测试便捷):

bash

运行

[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  1. 挂载 Linux 系统光盘,复制安装文件到 FTP 目录:

bash

运行

[root@localhost ~]# mkdir /media/cdrom
[root@localhost ~]# mount /dev/cdrom /media/cdrom/
[root@localhost ~]# dnf -y install vsftpd
[root@localhost ~]# mkdir /var/ftp/euler
[root@localhost ~]# cp -rf /media/cdrom/* /var/ftp/euler/
  1. 配置 vsftpd 服务,允许匿名访问:

bash

运行

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES  # 启用匿名访问
[root@localhost ~]# systemctl start vsftpd && systemctl enable vsftpd
  1. 验证安装源:客户端浏览器访问ftp://192.168.10.101/euler,能看到安装文件即为配置成功。

(三)步骤 2:安装并配置 TFTP 服务

TFTP 服务用于提供引导程序、内核镜像等小文件的快速下载,配置流程如下:

  1. 安装 tftp-server 软件包:

bash

运行

[root@localhost ~]# dnf -y install tftp-server
  1. 配置 TFTP 服务(修改 xinetd 配置文件):

bash

运行

[root@localhost ~]# vim /etc/xinetd.d/tftp
service tftp
{
    socket_type     = dgram
    protocol        = udp  # TFTP基于UDP协议
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /var/lib/tftpboot  # 指定TFTP根目录
    disable         = no  # 启用TFTP服务
    per_source      = 11
    cps             = 100 2
    flags           = IPv4
}
  1. 启动 TFTP 服务并设置开机自启:

bash

运行

[root@localhost ~]# systemctl start tftp && systemctl enable tftp
# 验证服务状态
[root@localhost ~]# netstat -anpu | grep ":69"  # TFTP默认端口69
udp        0      0 0.0.0.0:69              0.0.0.0:*                   1234/xinetd

(四)步骤 3:准备核心引导文件

核心引导文件包括 Linux 内核、初始化镜像、PXE 引导程序及辅助文件,需从系统光盘中提取并复制到 TFTP 根目录:

  1. 提取 Linux 内核与初始化镜像:

bash

运行

[root@localhost ~]# cd /media/cdrom/images/pxeboot
[root@localhost pxeboot]# cp vmlinuz initrd.img /var/lib/tftpboot/
  • vmlinuz:Linux 内核文件,负责系统硬件初始化与资源调度;
  • initrd.img:初始化内存文件系统,提供系统启动初期的驱动支持。
  1. 提取引导辅助文件:

bash

运行

[root@localhost pxeboot]# cd /media/cdrom/isolinux/
[root@localhost isolinux]# cp ldlinux.c32 libcom32.c32 /var/lib/tftpboot/
  • ldlinux.c32:SYSLINUX 引导加载程序组件,负责加载内核与启动菜单;
  • libcom32.c32:基础函数库文件,为引导程序提供底层功能支持。
  1. 安装并复制 PXE 引导程序(pxelinux.0):

bash

运行

[root@localhost ~]# dnf -y install syslinux
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

pxelinux.0是 PXE 引导核心程序,负责解析启动菜单并引导内核加载。

(五)步骤 4:配置 DHCP 服务

DHCP 服务需为客户机分配 IP 地址,并指定 TFTP 服务器地址与 PXE 引导程序文件名,配置如下:

  1. 安装 dhcp 软件包:

bash

运行

[root@localhost ~]# dnf -y install dhcp
  1. 编辑 DHCP 主配置文件/etc/dhcp/dhcpd.conf

bash

运行

[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.10.0 netmask 255.255.255.0 {
    option routers 192.168.10.254;  # 网关地址
    option subnet-mask 255.255.255.0;  # 子网掩码
    option domain-name "bdqn.com";  # 域名
    option domain-name-servers 192.168.10.254, 202.106.0.20;  # DNS服务器
    default-lease-time 21600;  # 默认租约时间(6小时)
    max-lease-time 43200;  # 最大租约时间(12小时)
    range 192.168.10.200 192.168.10.250;  # IP地址池
    next-server 192.168.10.101;  # TFTP服务器地址(PXE服务器IP)
    filename "pxelinux.0";  # PXE引导程序文件名
}
  1. 启动 DHCP 服务并设置开机自启:

bash

运行

[root@localhost ~]# systemctl start dhcpd && systemctl enable dhcpd
# 验证服务状态
[root@localhost ~]# systemctl status dhcpd

(六)步骤 5:配置 PXE 启动菜单

启动菜单文件用于指导客户机引导流程,需放置在 TFTP 根目录的pxelinux.cfg子目录下:

  1. 创建菜单目录:

bash

运行

[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
  1. 编辑启动菜单文件default

bash

运行

[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default auto  # 默认启动项为auto
prompt 1  # 启用交互提示(0为禁用,自动启动默认项)
timeout 60  # 超时时间(单位:1/10秒,60=6秒)

label auto  # 启动项名称(auto)
kernel vmlinuz  # 指定内核文件
append initrd=initrd.img inst.repo=ftp://192.168.10.101/euler  # 指定初始化镜像与安装源
  • prompt 1:客户机开机后将显示启动菜单,按 Enter 键启动默认项;
  • inst.repo:指定网络安装源地址(FTP 协议)。

(七)步骤 6:验证 PXE 远程安装

  1. 客户机配置:将客户机 BIOS 设置为网络引导,确保与 PXE 服务器在同一网段;虚拟机测试需禁用自身 DHCP 功能,内存不低于 2GB。
  2. 启动客户机:开机后自动获取 IP 地址,从 TFTP 服务器下载引导程序与内核镜像,进入 OpenEuler 安装界面,后续操作与光盘安装一致,验证 PXE 远程装机功能正常。

三、Kickstart 无人值守安装配置

PXE 远程装机仍需手动选择安装选项,结合 Kickstart 应答文件可实现完全无人值守安装,自动完成语言、分区、软件包等配置。

(一)Kickstart 应答文件原理

Kickstart 应答文件(ks.cfg)记录了系统安装过程中的所有交互配置项,客户机通过网络下载该文件后,将按照预设参数自动完成安装,无需人工干预。OpenEuler 24.03 不再支持system-config-kickstart图形工具,需手动编辑应答文件。

(二)步骤 1:编写 Kickstart 应答文件(ks.cfg)

创建/root/ks.cfg文件,配置如下(核心参数说明已标注):

bash

运行

[root@localhost ~]# vim /root/ks.cfg
# 安装源配置(FTP协议)
url --url="ftp://192.168.10.101/euler"

# 系统语言与键盘设置
lang zh_CN.UTF-8
keyboard us

# 网络配置(DHCP自动获取)
network --bootproto=dhcp --device=eth0 --activate

# 安全策略配置
authselect --enableshadow --passalgo=sha512  # 启用影子密码,SHA512加密
selinux --enforcing  # 启用SELinux(按需设置,可改为disabled禁用)

# root用户密码(此处为aptech1!,实际使用需修改为强密码)
rootpw aptech1!

# 时区设置
timezone Asia/Shanghai

# 磁盘分区配置(自动分区,LVM模式,ext4文件系统)
autopart --type=lvm --fstype=ext4

# 引导程序安装位置(MBR分区表)
bootloader --location=mbr

# 清除磁盘原有分区并初始化
clearpart --all --initlabel

# 软件包选择(最小化安装环境)
%packages --nocore
@^minimal-environment  # 最小化环境
kernel  # 内核包
grub2  # 引导程序
efibootmgr  # EFI引导支持
%end

# 后安装脚本(安装完成后执行的操作)
%post
# 禁用防火墙(按需启用,生产环境建议配置规则)
systemctl disable firewalld
# 配置SSH允许root登录(按需启用,需取消注释)
# sed -i 's/^#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
%end

# 安装完成后自动重启
reboot

(三)步骤 2:发布应答文件

将应答文件复制到 FTP 目录,确保客户机可通过网络访问:

bash

运行

[root@localhost ~]# cp /root/ks.cfg /var/ftp/
# 验证访问:http://192.168.10.101/ks.cfg

(四)步骤 3:修改 PXE 启动菜单,启用无人值守

编辑启动菜单文件,添加inst.ks参数指定应答文件路径:

bash

运行

[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default auto
prompt 0  # 禁用交互提示,自动启动
timeout 60

label auto
kernel vmlinuz
append initrd=initrd.img inst.ks=ftp://192.168.10.101/ks.cfg inst.repo=ftp://192.168.10.101/euler
  • prompt 0:客户机开机后不显示菜单,直接启动默认项;
  • inst.ks:指定 Kickstart 应答文件 URL。

(五)步骤 4:验证无人值守安装

启动客户机后,将自动完成以下流程:

  1. 获取 IP 地址与引导程序,下载内核、初始化镜像及应答文件;
  2. 自动分区、安装系统、配置网络与安全策略;
  3. 安装预设软件包,执行后安装脚本;
  4. 自动重启,完成系统部署,全程无需人工干预。

四、运维最佳实践与故障排查

(一)PXE 装机最佳实践

  1. 安装源优化:生产环境建议使用 HTTP 协议发布安装源,相比 FTP 具备更高的稳定性与传输效率;大规模部署可搭建本地镜像源,减少外网依赖。
  2. 安全加固
    • 限制 DHCP 地址池范围,仅允许目标客户机网段访问;
    • 启用 TFTP 访问控制,仅授权 PXE 客户机 IP;
    • 应答文件中设置强 root 密码,禁用不必要的服务(如防火墙按需配置)。
  3. 批量部署效率
    • 为客户机配置静态 IP 绑定,避免地址冲突;
    • 优化启动菜单超时时间(如设置为 3 秒),加快装机速度;
    • 提前预制常用软件包与配置文件到安装源,减少后安装操作。

(二)常见故障排查

  1. 客户机无法获取 IP 地址

    • 检查 DHCP 服务是否正常运行:systemctl status dhcpd
    • 验证 DHCP 配置文件语法:dhcpd -t -cf /etc/dhcp/dhcpd.conf
    • 排查客户机与服务器网络连通性,确保在同一网段,无防火墙拦截 UDP 67 端口。
  2. 客户机无法下载引导文件

    • 检查 TFTP 服务状态与端口 69 监听;
    • 验证引导文件(pxelinux.0、vmlinuz 等)是否存在于/var/lib/tftpboot,权限是否为其他用户可读(chmod +r *);
    • 确认 DHCP 配置中next-serverfilename参数正确。
  3. 安装源访问失败

    • 验证 FTP 服务是否正常,安装源目录权限是否允许匿名访问;
    • 检查启动菜单中inst.repo参数的 URL 是否正确(如 FTP 地址是否带euler目录);
    • 客户机测试访问安装源:curl ftp://192.168.10.101/euler
  4. 无人值守安装失败

    • 检查应答文件语法:ksvalidator /root/ks.cfg(需安装pykickstart工具);
    • 验证应答文件路径是否正确,客户机能否访问ftp://192.168.10.101/ks.cfg
    • 查看安装日志(/var/log/anaconda),定位配置错误(如分区方案、软件包选择)。

五、总结

PXE 技术结合 Kickstart 配置,构建了高效、自动化的批量网络装机方案,彻底解决了大规模 Linux 集群部署的效率瓶颈。本文通过详细拆解 PXE 服务器搭建、核心文件准备、DHCP 与 TFTP 服务配置、启动菜单编写等关键步骤,结合无人值守应答文件的完整配置,实现了从远程引导到自动装机的全流程自动化。该方案不仅适用于新购服务器的快速部署,也可用于现有系统的重装与升级,具备广泛的应用场景。

在实际运维中,需根据网络规模与业务需求优化配置,如采用 HTTP 安装源提升传输效率、配置 DHCP 地址绑定保障安全性、预制个性化软件包满足业务需求等。通过掌握本文所述的技术方法与最佳实践,运维人员可大幅降低大规模系统部署的工作量,提升部署一致性与稳定性,为集群服务的快速上线与可靠运行提供坚实保障。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐