PXE引导安装Windows虚拟机完整实战指南
在虚拟机实验室或批量部署场景里,反复挂载ISO、手动点击安装界面既费时又容易出错。PXE网络引导能让虚拟机直接从局域网拉取启动文件和安装镜像,实现无人值守或半自动安装Windows。下面从原理讲到落地操作,覆盖新手零基础到进阶优化,全程优先免费工具。
一、PXE是什么,为什么适合虚拟机装Windows
PXE(Preboot Execution Environment)是网卡自带的预启动环境。机器通电后先从网卡获取IP,再通过TFTP下载启动程序(通常是NBP或iPXE),最后挂载网络共享里的WinPE或安装源,完成系统安装。
对虚拟机来说优势很明显:
- 不需要每台虚拟机都挂ISO,节省存储和操作时间。
- 一台PXE服务器可同时服务多台虚拟机。
- 方便做标准化镜像,后期加应答文件还能全自动装机。
- 虚拟交换机隔离后,不影响物理网络。
适用场景包括VMware Workstation/ESXi、VirtualBox、Hyper-V里的Windows虚拟机批量创建,也适合家用NAS或小型机房快速部署测试环境。
二、环境准备清单(免费为主)
硬件与网络:
- 一台能稳定运行的物理机或宿主机(Windows 10/11或Linux均可),内存建议8GB以上。
- 虚拟机软件已安装(以VMware Workstation为例,VirtualBox操作类似)。
- 局域网互通,建议单独建一个虚拟网络(Host-Only或自定义NAT),避免干扰家里路由器DHCP。
软件工具(全部免费):
- TinyPXE Server(Windows下一键式,适合新手)或DNSmasq + iPXE(Linux下更灵活)。
- Windows 10/11官方ISO(从微软官网下载,选企业版或专业版方便后续KMS激活测试)。
- WinPE制作工具:Windows ADK + Windows PE add-on(微软免费提供)。
- 可选:7-Zip解压ISO,Rufus或Ventoy备用。
准备目录结构(以Windows宿主机为例):
D:\PXE\
├── TFTP\ # 启动文件放这里
├── Share\ # Windows安装源
│ └── Win11\
└── WinPE\ # 自制启动环境
三、方案一:Windows下用TinyPXE快速搭建(新手首选)
- 下载并解压TinyPXE Server到D:\PXE\TinyPXE,无需安装。
- 管理员身份运行tftpd32.exe或TinyPXE主程序。
- 基本配置:
- 勾选DHCP Server。
- IP Pool起始地址设成192.168.100.100,数量50即可(与虚拟网络匹配)。
- Boot File填pxelinux.0或ipxe.efi(后面会放文件)。
- TFTP Root指向D:\PXE\TFTP。
- 把iPXE的ipxe.efi、undionly.kpxe等启动文件放进TFTP目录(GitHub搜ipxe/ipxe下载预编译版本)。
- 制作简易启动菜单:在TFTP下建pxelinux.cfg/default文件,内容示例:
DEFAULT winpe LABEL winpe KERNEL ipxe.lkrn APPEND dhcp && chain http://192.168.100.1/boot.ipxe - 用ADK制作WinPE:
- 安装Windows ADK和PE插件。
- 命令行执行:
copype amd64 D:\PXE\WinPE MakeWinPEMedia /ISO D:\PXE\WinPE D:\PXE\WinPE.iso - 把WinPE.iso里的boot.wim、bootmgr等文件复制到TFTP和Share对应位置。
- 解压Windows ISO到D:\PXE\Share\Win11,确保有sources\install.wim。
- 共享文件夹:右键Share → 属性 → 共享 → 高级共享,勾选共享,权限给Everyone读取。记下路径\192.168.100.1\Share。
- 启动TinyPXE,观察日志窗口有DHCP Discover和TFTP请求即表示服务正常。
四、方案二:Linux下用dnsmasq + iPXE(更稳定,进阶推荐)
适合Ubuntu/CentOS宿主机或专门的Linux虚拟机当PXE服务器。
- 安装依赖:
sudo apt update sudo apt install dnsmasq tftp-hpa apache2 pxelinux syslinux-common -y - 配置dnsmasq(/etc/dnsmasq.conf):
interface=eth0 dhcp-range=192.168.100.50,192.168.100.150,12h dhcp-boot=ipxe.efi enable-tftp tftp-root=/var/lib/tftpboot - 准备启动文件:
sudo mkdir -p /var/lib/tftpboot sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/ # 下载iPXE并编译或使用预编译ipxe.efi放入目录 - 用Apache提供HTTP下载(比TFTP快):
sudo mkdir /var/www/html/win sudo cp -r /path/to/extracted/Win11/* /var/www/html/win/ - 写iPXE脚本(/var/www/html/boot.ipxe):
#!ipxe kernel http://192.168.100.1/wimboot initrd http://192.168.100.1/boot.wim boot - 重启服务:
sudo systemctl restart dnsmasq apache2 sudo systemctl enable dnsmasq
Linux方案的好处是资源占用低,可长期挂着当装机服务器,还能加Nginx加速大文件传输。
五、虚拟机端配置PXE启动
以VMware Workstation为例(VirtualBox在系统设置→网络→启用PXE,启动顺序选网络):
- 新建虚拟机时先不装系统,选“稍后安装操作系统”。
- 虚拟机设置:
- 内存至少4GB,硬盘50GB以上。
- 网络适配器:选择“自定义”→ VMnet1(Host-Only),或与PXE服务器同一网段的虚拟网络。
- 勾选“启动时进入固件”方便调试,或直接改BIOS启动顺序:Network → Hard Disk。
- 对于UEFI虚拟机,确保网卡驱动支持,启动文件用ipxe.efi;传统BIOS用undionly.kpxe。
- 开启虚拟机,按F12或自动进入网络启动。屏幕应出现DHCP获取IP → TFTP下载 → 进入WinPE桌面。
进入WinPE后打开命令提示符,映射网络驱动器:
net use Z: \\192.168.100.1\Share /user:guest
Z:
cd Win11
setup.exe
按正常流程分区、安装即可。想全自动可提前把autounattend.xml放进Share根目录,setup会自动读取。
六、常见问题与排查顺序
- 虚拟机拿不到IP:检查虚拟网络是否与PXE服务器同一子网,TinyPXE/dnsmasq的DHCP是否冲突(关掉物理路由器DHCP测试)。
- TFTP超时:防火墙放行UDP 69端口,TFTP Root路径权限确认Everyone可读。
- 启动后黑屏或找不到boot.wim:确认架构匹配(x64用amd64的WinPE),文件名大小写在Linux下敏感。
- 安装过程中网络断开:WinPE里加网卡驱动(用dism注入),或改用HTTP方式代替纯TFTP。
- 多台虚拟机同时装卡顿:把安装源改到HTTP或SMB,并限制并发数量。
- UEFI安全启动报错:虚拟机设置里临时关闭Secure Boot。
日志位置:TinyPXE主窗口实时显示;Linux看/var/log/syslog或journalctl -u dnsmasq。
七、进阶优化与避坑建议
- 加入应答文件实现全自动:用Windows System Image Manager做autounattend.xml,指定产品密钥、分区、用户名,装完直接进桌面。
- 多系统菜单:在iPXE脚本里加chain或menu,同时支持Windows 10/11、WinPE、Linux live。
- 性能提升:把install.wim转成install.esd可减小体积;用千兆虚拟交换机;WinPE里启用PowerShell方便脚本化。
- 安全注意:PXE服务器只开在隔离虚拟网,生产环境务必加MAC过滤或密码保护共享。
- 备份与回滚:装好一台虚拟机后做快照或导出OVF模板,后续克隆比重新PXE更快。
- 混合环境:物理机和虚拟机共用同一套PXE服务器时,注意网卡驱动差异,建议准备通用驱动包。
按照以上步骤,一台普通电脑半小时内就能搭好可用的PXE环境,之后创建Windows虚拟机只需点开机,剩下的交给网络。实际操作中先从单台虚拟机验证通,再扩展到批量,能少走很多弯路。

还没有评论,来说两句吧...