一、PXE简介
PXE(预启动执行环境) 是由Intel公司开发的网络启动技术。它工作在Client/Server模式下,支持客户端通过网络从远端服务器下载系统映像并启动。在启动过程中,客户端会向服务器请求IP地址,然后通过TFTP等协议下载一个启动软件包到本地内存执行,由这个软件包完成基本的软件设置,最终引导安装在服务器上的操作系统。
严格来说,PXE本身并不是一种安装方式,它更偏向于一种网络引导机制。
二、PXE工作原理
理解其工作流程,有助于在出现问题时进行排错:
- 客户端请求IP:客户端向PXE服务器上的DHCP服务发送IP地址请求。DHCP服务会验证客户端的合法性(通常检查MAC地址),若合法则返回分配的IP地址,并同时告知启动文件
pxelinux.0 的位置信息。
- 获取引导文件:客户端接着向服务器的TFTP服务请求获取
pxelinux.0 文件。TFTP服务响应后,客户端开始下载并执行该文件。
- 加载配置:客户端根据自身信息(如MAC地址或IP)向TFTP服务器请求对应的配置文件(通常位于
pxelinux.cfg/ 目录下)。服务器发回配置文件,客户端根据其中的设置进行后续操作。
- 下载内核与根文件系统:客户端依次向TFTP服务器请求Linux内核(
vmlinuz)和初始内存盘(initrd)文件。
- 启动内核:客户端加载并启动Linux内核,内核的启动参数已在第3步的配置文件中定义好了。
- 自动化安装:内核启动后,客户端通过网络(如HTTP/NFS)获取完整的系统镜像和自动化安装脚本(如Ubuntu的
autoinstall 配置),从而进入完全无人值守的安装流程,直至系统安装完成。
这套流程是实现运维自动化的关键基石,能极大提升批量部署效率。如果你想了解更多自动化运维实践,可以到 云栈社区 的运维板块交流学习。
三、PXE服务端搭建实战
3.1 实验环境与注意事项
- 实验平台:VMware Workstation 虚拟机。
- 关键准备:务必关闭VMware虚拟网络编辑器中的DHCP服务,以避免与我们自建的DHCP服务冲突。
- 网络配置:确保PXE服务端与待安装的客户端虚拟机处于同一虚拟网络(例如都使用VMnet8的NAT模式)。
3.2 基础环境准备
首先,确认服务端的基础信息与网络连通性。
# 本次实验使用的系统镜像
ubuntu-24.04.3-live-server-amd64.iso
# 查看服务器系统版本
root@test:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
# 查看服务器网络配置 (示例为Netplan)
cat /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
ens33:
addresses:
- "192.168.52.100/24"
nameservers:
addresses:
- 114.114.114.114
- 8.8.8.8
routes:
- to: "default"
via: "192.168.52.1"
# 测试网络连通性
curl -I https://www.baidu.com
HTTP/1.1 200 OK
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Content-Length: 0
Content-Type: text/html
Pragma: no-cache
Server: bfe
Date: Tue, 02 Dec 2025 08:56:48 GMT
# 为了方便实验,关闭防火墙(生产环境请按需配置规则)
sudo ufw disable
3.3 安装并配置核心服务
我们需要安装DHCP、TFTP、HTTP服务以及PXE引导相关的组件。
# 更新软件源并安装所需软件包
apt-get update -y
apt-get install isc-dhcp-server tftpd-hpa apache2 syslinux-common pxelinux -y
配置DHCP服务
编辑 /etc/dhcp/dhcpd.conf 文件,以下是一个针对实验环境的配置示例。注意 next-server 和 filename 参数是关键,它们告知客户端TFTP服务器的地址和引导文件名。
# 清理注释和空行后查看有效配置
egrep -v "^#|^$" /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
subnet 192.168.52.0 netmask 255.255.255.0 {
range 192.168.52.150 192.168.52.200;
option routers 192.168.52.1;
option subnet-mask 255.255.255.0;
option domain-name-servers 8.8.8.8;
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.52.100; # 指定TFTP服务器IP(即本机)
filename "pxelinux.0"; # 指定PXE引导文件名
}
# 启动并设置DHCP服务开机自启
systemctl restart isc-dhcp-server
systemctl enable isc-dhcp-server
systemctl status isc-dhcp-server
3.4 配置TFTP服务
TFTP服务用于向客户端提供引导文件、内核等小型文件。
# 创建TFTP目录结构
mkdir -p /var/lib/tftpboot/pxelinux.cfg
# 拷贝必要的PXE引导模块文件
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /var/lib/tftpboot/
cp /usr/lib/syslinux/modules/bios/libutil.c32 /var/lib/tftpboot/
cp /usr/lib/syslinux/modules/bios/menu.c32 /var/lib/tftpboot/
cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/
# 确认TFTP服务的工作目录配置
cat /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot/" # 确保目录指向我们创建的目录
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
# 启动TFTP服务
systemctl restart tftpd-hpa
systemctl enable tftpd-hpa
systemctl status tftpd-hpa
3.5 配置HTTP服务与启动菜单
我们使用Apache HTTP服务器来提供大型的系统ISO镜像和自动安装配置文件。
# 在Web目录下创建存放ISO和自动安装配置的文件夹
mkdir -p /var/www/html/iso /var/www/html/autoinstall
接下来创建PXE启动菜单配置文件,这是控制安装流程的核心。
# 编辑启动菜单配置文件
root@test:~# cat /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
MENU TITLE PXE Boot Menu
PROMPT 0
TIMEOUT 30
LABEL Ubuntu 24.04 Auto Install
MENU LABEL Install Ubuntu 24.04 (Autoinstall)
KERNEL vmlinuz
INITRD initrd
APPEND root=/dev/ram0 ramdisk_size=1024 ip=dhcp url=http://192.168.52.100/iso/ubuntu-24.04.3-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://192.168.52.100/autoinstall/ cloud-config-url=/dev/null
KERNEL 和 INITRD:指定要加载的内核和初始内存盘文件名。
APPEND:最重要的启动参数行。
url=...:指定系统安装镜像的HTTP地址。
autoinstall:启用Ubuntu的自动安装功能。
ds=nocloud-net;s=...:告诉安装程序从哪里获取自动安装配置文件 (user-data, meta-data)。
现在,需要从ISO镜像中提取内核和initrd文件,并放到TFTP目录下。
# 将ISO镜像挂载到临时目录
mount /var/www/html/iso/ubuntu-24.04.3-live-server-amd64.iso /mnt/
# 复制内核和initrd文件到TFTP根目录
cp /mnt/casper/vmlinuz /var/lib/tftpboot/
cp /mnt/casper/initrd /var/lib/tftpboot/
# 复制完成后卸载ISO
umount /mnt
3.6 配置Ubuntu自动安装文件
Ubuntu 22.04/24.04使用 autoinstall 进行自动化安装。我们需要在HTTP服务指定的位置提供配置文件。
# meta-data 文件内容(通常一个实例标识即可)
cat /var/www/html/autoinstall/meta-data
instance-id: ubuntu-autoinstall
# user-data 文件内容(这是安装配置的核心)
cat /var/www/html/autoinstall/user-data
autoinstall:
version: 1
identity:
hostname: u22
password: "2008.com.cn"
username: wk
source:
id: ubuntu-server
storage:
layout:
name: lvm
sizing-policy: all
ssh:
install-server: true
allow-pw: true
packages: # 预安装的软件包
- wireguard
kernel-crash-dumps:
enabled: false
timezone: "Asia/Shanghai"
late-commands: # 安装后执行的命令
- curtin in-target -- sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
- curtin in-target -- systemctl restart sshd
- curtin in-target -- systemctl stop cloud-init
- curtin in-target -- systemctl disable cloud-init
- curtin in-target -- apt-get purge -y cloud-init
# 创建一个空的vendor-data文件(非必需,但某些情况需要)
touch /var/www/html/autoinstall/vendor-data
# 确保Web目录有正确的访问权限
chmod -R 755 /var/www/html/
# 最后,重启所有相关服务使配置生效
systemctl restart isc-dhcp-server tftpd-hpa.service apache2
systemctl status isc-dhcp-server tftpd-hpa.service apache2
四、创建并启动PXE客户端
服务端配置完毕,现在可以测试了。在VMware中新建一个虚拟机,关键点在于网络配置。
确保客户端虚拟机的网络适配器与PXE服务器处于同一网络(例如VMnet8)。同时,建议为客户端分配不少于2GB内存和2个CPU核心,以保证安装过程流畅。

启动客户端虚拟机,它将自动进入PXE网络启动流程。
- 获取IP地址:客户端首先会通过DHCP请求并获得服务端分配的IP地址。

- 加载启动菜单:接着,它会从TFTP服务器下载引导文件,并呈现我们配置好的启动菜单。

- 自动安装:选择菜单项(或等待倒计时)后,客户端会下载内核、initrd,并通过HTTP获取ISO镜像和
user-data配置,开始完全无人值守的自动化安装。整个安装过程无需人工干预,直到系统安装完成并重启。
五、常见问题与总结
可能遇到的问题
- 客户端内存不足:如果给客户端分配的内存过小(如少于1GB),可能在加载系统或安装过程中失败。建议至少分配2GB内存。
- 键盘/语言设置:如果启动时遇到键盘布局或语言选择问题,检查
user-data 配置文件中是否遗漏了 locale 或 keyboard 相关设置。完整的autoinstall配置可参考Ubuntu官方文档。
- 网络配置:确保服务端防火墙已关闭或放行了相关端口(DHCP:67/68, TFTP:69, HTTP:80),并且虚拟机网络设置正确无误。理解每一步的网络配置原理是排查此类问题的关键。
总结
通过以上步骤,我们成功搭建了一套基于Ubuntu 24.04 LTS的PXE全自动化部署环境。从服务端DHCP、TFTP、HTTP服务的配置,到自动安装文件的编写,再到客户端的验证,这套流程清晰地展示了如何实现“开机即服务”的运维自动化目标。掌握PXE技术,能极大地简化数据中心或实验室环境中大量服务器的系统部署与维护工作。