PXE 启动简介及原理
- PXE 简介
- 预启动执行环境(PXE)指的是那些使得 IBM 兼容计算机(经常是运行 Windows 系统)不需要硬盘或是启动软盘就能启动的方法.这种方法早在计算机具有内部磁盘驱动器的时代之前就已经开始发展.
- PXE 通常都是利用固件来启动计算机,这种固件是包含数据的只读内存(ROM)或是可编程只读内存(PROM)芯片,而不是包含数据的磁介质.这还产生了“PXE boot ROM”和“PXE boot PROM”(有时也写成“PXE bootprom”)这样的术语.
- 从 ROM 或 PROM 启动免除了对机电设备(物理驱动器)的依赖,同时提高了可靠性及避免了驱动器读取错误.利用当今的内存技术,从 ROM 或 PROM 能够很快地启动.PXE 也能够用于从网络启动计算机.
- PXE 原理
- 客户端电脑开机后,如果 BIOS(Basic Input Output System 的缩略语,直译过来就是“基本输入输出系统”.它的全称应该是 ROM-BIOS,意思是只读存储器基本输入输出系统.其实,它是一组固化到计算机内主板上一个 ROM 芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机上电自检程序和系统启动自举程序.)设置从网络启动,那么网卡中的 PXE Boot ROM 获得控制权之前先做自我测试,然后发送一个动态获得 IP 地址的广播包(请求 FIND 帧)到网络上.
- DHCP 服务器在收到该广播包后,发送给客户端分配 IP 地址的 DHCP 回应包.内容包括客户端的 IP 地址,TFTP 服务器的 IP 地址(DHCP 服务器的 066 选项),预设通讯通道,及开机启动文件(DHCP 服务器的 067 选项).该文件应该是一种由 PXE 启动规范规定的固定格式的可执行文件,类似于 Windows XP 正常启动时显示多重启动菜单之前的启动代码.
- 客户端收到 DHCP 回应后,则会响应一个 FRAME,以请求传送启动文件.之后服务端将和客户机再进行一系列应答,以决定启动的一些参数.
- 客户端通过 TFTP 通讯协议从服务器下载开机启动文件.启动文件接收完成后,将控制权转交给启动块,完成 PXE 启动.客户端通过这个开机影像文件开机,这个开机文件可以只是单纯的开机程式也可以是操作系统.如果是用 3Com Boot Image Editor 编辑的启动文件,系统将根据 PXE 文件中的代码决定是显示选择菜单还是直接下载预设的镜像文件启动电脑.接下来的工作就由相应的镜像文件来完成了.
实验环境
- 服务器
CentOS 6.2, DHCP, tftp, nfs, IP 192.168.1.10
- 客户端
支持 PXE 启动的 PC(Lenovo Thinkpad E430)
安装配置
- 配置 DHCP 服务器
见dhcp 服务搭建,在配置文件/etc/dhcp/dhcpd.conf
中添加如下两行:
1 | filename “pxelinux.0”; //客户端要读取的启动文件 |
配置 tftp 服务器
- 安装相应的软件包:
yum –y install tftp* xinetd
- 修改 tftp 的配置文件
/etc/xinetd.d/tftp
,将diabale = yes
修改为disable = no
,此配置文件中指定了 tftp 的根目录为/tftpboot
,如果没有此目录可手动创建一个,有的版本 tftp 根目录为/var/lib/tftpboot
- 启动 xinetd 服务:
service xinetd start
- 也可以将其设为开机启动:
chkconfig xinetd on
配置 nfs
- NFS 是 Network File System 的简写,即网络文件系统,是 FreeBSD 支持的文件系统中的一种.NFS 允许一个系统在网络上与他人共享目录和文件.通过使用 NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件.
- 安装相应的软件包:
yum –y install nfs*
- 修改配置文件
/etc/exports
,添加如下内容:
1 | /tftpboot *(ro,sync) |
- 启动 nfs 服务:
service rpcbind restart
service nfslock restart
service nfs restart
配置 PXE 启动需要的文件:pxelinux.0
- 将安装光盘中的文件夹拷贝到
/tftpboot
下:cp /usr/share/syslinux/pxelinux.0 /tftpboot
- 在
/tftpboot
下新建pxelinux.cfg
目录,将安装光盘中isolinux
目录下的isolinux.cfg
拷贝到新建目录下,并重命名为default
- 至此,服务器端配置完成,从网络启动客户端即可网络安装 OS.
无人值守网络安装 OS
- 创建
ks.cfg
(KickStart 配置文件) - 在
default
文件中添加如下内容:
1 | append initrd=initrd.img ks=nfs:$SERVERIP:$KS.CFG_DIR ksdevice=eth0 |
常见问题
- 出现
TFTP time out
问题:关闭服务端的防火墙:service iptables stop
- 出现
received error from TFTP server
:关闭服务端的 syslinux:setenforce 0
- 出现
arp timeout
问题:确认服务器和客户端的网络可通,有的操作系统可能会因为虚拟网桥的原因能分配到 IP 地址但相互 ping 不通 - 出现
unable to read package metadata.
:检查安装目录下的repodata
文件夹下的文件是否有合适的后缀名,如果没有就手动添加它们的后缀名.