PXE(预启动执行环境)
网络管理员在 DHCP 协议的基础之上,还可以帮网络中的机器自动安装操作系统。帮网络中的机器自动安装操作系统的需求,在普通的笔记本电脑上一般不会有这种需求,但是在数据中心中往往有这种需求,因为数据中心的管理员可能一下子就拿到几百万台空的机器,一个个安装操作系统将会很繁琐。这个时候管理员希望的不仅仅是自动分配 IP 地址了,而是自动安装操作系统。
一般安装操作系统的过程是这样:首先,启动 BIOS。这是一个特别小的小系统,只能干特别小的一件事情。其实就是读取硬盘的 MBR 启动扇区,将 GRUB 启动起来;然后将权力交给 GRUB,GRUB 加载内核、加载作为根文件系统的 initramfs 文件;然后将权力交给内核;最后内核启动,初始化整个操作系统。
那么,想要通过网络的方式自动安装操作系统的话,也得是在 BIOS 启动之后。而这个这个过程叫做预启动执行环境(Pre-boot Execution Environment),简称 PXE。因为在 BIOS 之前啥都没有。而在 BIOS 之后,有了启动扇区,那么 PXE 可以先将操作系统拉取到本地,然后将其加载起来。
PXE 协议分为客户端和服务器端,由于还没有操作系统,只能先把客户端放在 BIOS 里面。当计算机启动时,BIOS 把 PXE 客户端调入内存里面,就可以连接到服务端做一些操作了。
- 首先 PXE 的客户端启动起来之后,第一步是发送一个 DHCP 的请求,让 DHCP Server 给它分配一个地址。除此之外,DHCP Server 还会给它返回 PXE 服务器的地址、启动文件 pxelinux.0。
- PXE 客户端知道 PXE 服务端的地址之后,就可以去 PXE 服务器下载启动文件。下载的时候使用的是 TFTP 协议。所以 PXE 服务器上,往往还需要有一个 TFTP 服务器。所以 PXE 就会向 PXE 服务器请求启动文件 pxelinux.0。
- PXE 客户端下载到这个文件之后,就开始执行这个文件了。这个文件会指示 PXE 客户端向 TFTP 服务请求计算机的配置信息 pxelinux.cfg。这个文件里头会说明内核在哪里、initramfs 在哪里。接下去 PXE 客户端会请求这些文件。
- 最后,启动 Linux 内核。当内核启动之后,还会再通过 DHCP 协议请求分配一个 IP 地址。
想要使用 PXE,那么 DHCP Server 除了配置 IP 地址段、子网掩码、网关地址、租期之外。还需要配置 next-server,指向 PXE 服务器的地址,同时配置初始化启动文件的名字。如下所示:
ddns-update-style interim; ignore client-updates; allow booting; allow bootp; subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.1; option subnet-mask 255.255.255.0; option time-offset -18000; default-lease-time 21600; max-lease-time 43200; range dynamic-bootp 192.168.1.240 192.168.1.250; filename "pxelinux.0"; next-server 192.168.1.180; }