PXE技术概述与虚拟机部署的意义
PXE(Preboot Execution Environment,预启动执行环境)是一种基于Client/Server的网络启动技术,允许计算机通过网络从远程服务器下载操作系统镜像并完成安装,无需依赖本地存储设备(如光盘或U盘),在虚拟化环境中,利用PXE批量部署虚拟机可以显著提升运维效率,降低人工操作成本,尤其适用于大规模虚拟机集群的快速搭建。

相较于传统安装方式,PXE部署虚拟机具有以下优势:
- 自动化程度高:通过配置DHCP、TFTP等服务,实现虚拟机的无人值守安装。
- 集中化管理:所有安装文件和配置均存储在服务器端,便于统一维护和更新。
- 快速部署:单台虚拟机安装时间可缩短至10-15分钟,批量部署效率更高。
- 环境一致性:通过标准化镜像和配置文件,确保所有虚拟机环境统一,减少差异性问题。
PXE部署虚拟机的核心组件与工作原理
PXE部署虚拟机需要多个服务组件协同工作,其核心流程可分为客户端请求、服务器响应和系统安装三个阶段。
(一)核心组件及作用
| 组件名称 | 功能描述 |
|---|---|
| DHCP服务器 | 为客户端分配IP地址,并提供PXE服务器(TFTP/HTTP)的地址和引导文件路径。 |
| TFTP服务器 | 存放客户端启动所需的引导文件(如pxelinux.0、vmlinuz、initrd.img等)。 |
| HTTP/FTP服务器 | 存放操作系统安装镜像(如CentOS、Windows的ISO文件)和Kickstart/Autounattend应答文件。 |
| PXE客户端 | 支持网络启动的计算机或虚拟机,通过网卡ROM中的PXE代码发起启动请求。 |
(二)工作流程
- 客户端请求:PXE客户端开机后,通过DHCP获取IP地址,并在DHCP Option 43或Option 60中声明自身为PXE客户端,请求获取PXE服务器的地址。
- 引导文件加载:客户端从TFTP服务器下载引导文件(如pxelinux.0),并加载Linux内核(vmlinuz)和初始化镜像(initrd.img)。
- 安装过程:内核启动后,通过HTTP/FTP服务器获取操作系统镜像和应答文件(如Kickstart),自动完成磁盘分区、软件安装、网络配置等步骤,最终生成可用的虚拟机系统。
环境准备与服务器端配置
(一)基础环境要求
- 服务器端:运行Linux系统(如CentOS 7+),确保安装以下服务:
dhcpd、tftp-server、httpd、syslinux。 - 客户端:虚拟机需开启网络启动(BIOS/UEFI中设置网卡为第一启动项),并支持PXE协议。
- 网络环境:客户端与服务器需处于同一局域网,且网络互通(建议配置独立VLAN隔离PXE流量)。
(二)服务器端详细配置
-
安装必要服务
yum install -y dhcp tftp-server httpd syslinux systemctl enable --now dhcpd tftp httpd
-
配置DHCP服务
编辑/etc/dhcp/dhcpd.conf,添加以下配置(根据实际网络调整IP段和TFTP服务器地址):
subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option routers 192.168.1.1; option domain-name-servers 8.8.8.8; next-server 192.168.1.10; # TFTP服务器IP filename "pxelinux.0"; # 引导文件名 } -
配置TFTP服务
将syslinux的引导文件复制到TFTP根目录:cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ mkdir -p /var/lib/tftpboot/pxelinux.cfg
-
配置HTTP服务
创建操作系统镜像目录并挂载ISO文件(以CentOS 7为例):mkdir -p /var/www/html/centos7 mount -o loop /path/to/CentOS-7-x86_64-DVD-2003.iso /var/www/html/centos7
准备Kickstart应答文件(如
/var/www/html/ks.cfg),配置自动化安装参数(分区、网络、软件包等)。
虚拟机自动化安装配置
(一)Kickstart应答文件示例
以下为CentOS 7的Kickstart配置文件(ks.cfg

# 网络配置
network --bootproto=dhcp --onboot=yes
# 磁盘分区(自动分区)
zerombr
clearpart --all --initlabel
autopart --type=lvm
# 软件包选择(最小安装+基础工具)
%packages
@^minimal
@core
bash
curl
wget
%end
# 关闭防火墙和SELinux
firewall --disabled
selinux --disabled
# 安装后执行脚本
%post
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
systemctl enable sshd
%end
(二)PXE启动菜单配置
编辑/var/lib/tftpboot/pxelinux.cfg/default,定义启动选项:
default centos7
timeout 30
label centos7
kernel centos7/images/pxeboot/vmlinuz
append initrd=centos7/images/pxeboot/initrd.img inst.ks=http://192.168.1.10/ks.cfg
虚拟机创建与PXE启动流程
(一)使用KVM创建虚拟机(示例)
virt-install \ --name pxe-vm1 \ --ram 2048 \ --vcpus 2 \ --disk path=/var/lib/libvirt/images/pxe-vm1.qcow2,size=20 \ --network bridge=virbr0 \ --graphics none \ --os-variant centos7.0 \ --boot network,hd # 优先从网络启动
(二)PXE启动与安装过程
- 虚拟机启动后,自动从DHCP获取IP地址,并通过TFTP加载引导文件。
- 根据pxelinux.cfg菜单,加载Linux内核和initrd镜像,传递Kickstart文件参数。
- 客户端从HTTP服务器下载操作系统镜像和应答文件,自动完成安装。
- 安装完成后,虚拟机自动重启,从本地磁盘启动系统。
常见问题与优化建议
(一)常见问题排查
| 问题现象 | 可能原因及解决方案 |
|---|---|
| 客户端获取不到IP地址 | 检查DHCP服务是否启动,防火墙规则是否阻止DHCP(67/68端口)。 |
| TFTP下载引导文件失败 | 确认TFTP服务路径正确,SELinux设置为permissive模式。 |
| Kickstart文件无法访问 | 检查HTTP服务是否正常,文件权限是否开放(建议设置为755)。 |
| 安装过程中断 | 检查Kickstart配置语法(可通过ksvalidator工具验证),镜像文件是否完整。 |
(二)优化建议
- 网络性能优化:部署PXE服务器时,建议使用千兆以上网络,并关闭不必要的网络协议。
- 镜像管理:使用镜像仓库(如Ceph)集中存储操作系统镜像,支持多节点分发。
- 安全加固:限制DHCP服务范围,仅允许授权客户端获取地址;启用TFTP服务的加密传输(如使用FTPS替代HTTP)。
- 批量扩展:结合Ansible等自动化工具,实现虚拟机创建、PXE部署、配置初始化的全流程自动化。
通过以上步骤,可高效搭建基于PXE的虚拟机自动化部署环境,显著提升虚拟化资源交付效率,在实际应用中,可根据业务需求调整应答文件配置和启动参数,灵活适配不同操作系统的安装要求。



















