深入浅出PXE网络装系统:从原理到实战

一、什么是PXE?

PXE(Preboot eXecution Environment)是Intel开发的一种网络引导标准,允许计算机从网络接口卡启动,无需本地存储设备。它广泛应用于批量部署操作系统、无盘工作站和系统恢复场景。

二、PXE工作流程

  1. 客户端启动:BIOS/UEFI启用网络启动,发送DHCP Discover广播。
  2. DHCP分配IP:DHCP服务器响应,提供IP地址并指定引导文件(如pxelinux.0)的位置(通常为TFTP服务器地址)。
  3. TFTP下载引导文件:客户端通过TFTP从服务器获取引导加载程序。
  4. 加载配置文件:引导加载程序根据客户端MAC或IP从TFTP读取配置文件(如default)。
  5. 下载内核和initrd:根据配置文件指示,从TFTP或HTTP下载vmlinuz和initrd.img。
  6. 启动安装程序:内核启动后,挂载initrd,加载安装源(如NFS、HTTP、FTP),开始操作系统安装。

三、关键组件

  • DHCP服务器:分配IP并指示引导文件位置(next-server和filename选项)。
  • TFTP服务器:提供引导加载程序(pxelinux.0、grubx64.efi等)及配置文件。
  • HTTP/FTP/NFS服务器:存放操作系统安装源(ISO解压后的文件)。
  • Kickstart或Preseed文件:实现无人值守自动安装。

四、搭建步骤(以CentOS 8为例)

1. 准备环境

安装所需服务:yum install dhcp tftp-server httpd syslinux-tftpboot -y

2. 配置DHCP

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.100 192.168.1.200;
  next-server 192.168.1.10;  # TFTP服务器IP
  filename "pxelinux.0";
}

3. 配置TFTP

将syslinux提供的引导文件复制到tftp根目录(/var/lib/tftpboot):

cp /usr/share/syslinux/{pxelinux.0,menu.c32,vesamenu.c32} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg

创建默认配置文件 /var/lib/tftpboot/pxelinux.cfg/default:

default menu.c32
prompt 0
timeout 100
menu title PXE Boot Menu

label centos8
  menu label ^Install CentOS 8
  kernel centos8/vmlinuz
  append initrd=centos8/initrd.img inst.repo=http://192.168.1.10/centos8

4. 准备安装源

挂载ISO到HTTP目录:mount CentOS-8.5.2105-x86_64-dvd1.iso /var/www/html/centos8

5. 启动服务

systemctl enable --now dhcpd tftp httpd
firewall-cmd --add-service={dhcp,tftp,http} --permanent
firewall-cmd --reload

6. 客户端测试

将客户端BIOS设置为网络启动,重启后应看到PXE菜单,选择安装即可。

五、自动化安装(Kickstart)

生成ks.cfg文件并放在HTTP服务器上,在append中增加ks=http://server/ks.cfg即可实现无人值守。

六、常见问题

  • 客户端无法获取IP:检查DHCP配置、防火墙、网卡支持。
  • TFTP下载超时:确认TFTP服务器路径和权限,文件是否存在。
  • Unable to mount NFS:确保NFS共享并防火墙放行。
  • UEFI启动需使用grubx64.efi:配置不同,bootloader方式变化。

七、总结

PXE装系统是现代数据中心批量部署的利器。通过合理规划DHCP、TFTP和HTTP服务,结合Kickstart,可以极大提升运维效率。掌握其原理和排错思路,是系统管理员的基本技能。