因有学生面试遭卡 ,咨询!特此一些详解,希望实用。

第一步:PXE Client向DHCP发送请求

首先,将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。

第二步:DHCP服务器提供信息

DHCP服务器收到 客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应 中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。

第三步:PXE客户端请求下载启动文件

客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。

第四步:Boot Server响应客户端请求并传送文件

当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启 动参数。BootROM 由 TFTP 通讯协议从Boot Server下载启动安 装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完 成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。

最近需要测试服务器PXE安装,而且服务器需要额外的raid卡驱动,所以为了这个额外的驱动弄了挺久,但也学到了不少原理层面的事情。为了保证不那么容易忘记,在这里记录一下:

PXE安装原理:

1、通过在BIOS中选择网卡引导,获取IP地址及tftp地址(在dhcpd.conf的next-server中写),然后加载tftp服务器上/tftpboot目录中的pxelinux.0和pxelinux.cfg/default两个文件,询问要启动的启动项(一般是boot:结束,然后可以键盘输入启动项。可选的启动项在pxelinux.cfg/default中已经写明,节选如下:

label linuxkernel vmlinuzappend initrd=initrd.img text ks=file:/kickstart.cfg

表示如果输入linux这个启动项名称,将使用vmlinuz这个内核文件作为内核,然后加载initrd.img文件(一个加载驱动用的文件,具体是用来干嘛的可以参考这里:)并获取kickstart.cfg这个文件(文件中保存了安装所需要的所有参数,如分区格式、需要安装的软件包等,一般根据linux安装光盘中的同名文件进行修改)。

2、在boot:后输入启动项,机器按照default中的配置参数获取内核文件及initrd参数中提到的驱动文件(各种驱动都可以,我就是把raid卡驱动加在这里了:initrd=initrd.img,cciss.img)。注意这里的img文件都需要是经过cpio和gzip压缩的,做法是:

mount -o loop cciss-2.6.18-164.el5.img ./tmp
cd ./tmp
find . | cpio -c -o | gzip -9 > ../cciss.img

原因大致是因为从2.6内核开始,initrd.img都是这样两重压缩的,所以会把这里的所有img文件一视同仁吧。(为何initrd.img是两重压缩及具体是怎么用的,请看:)。

3、获取完这几个文件后就会开始加载initrd.img,并加载各个设备驱动(可以把initrd.img看成常见设备驱动包),然后进入安装程序,安装程序根据default参数中的kickstart.cfg进行自动安装(如果其中某个步骤或某些参数缺失或被注释,将停留在该步骤,待人工选择后继续自动进行后面有参数的安装)。