pxe過程和原理
概要
-
遠程安裝和啟動操作系統
-
網卡固件支持pxe的接口,一般是有基本的ip/udp協議棧,支持dhcp, tftp協議;bios中可以設置通過pxe啟動操作系統
-
啟動過程,大致如下:
- 先發送DHCP Discover消息,請求ip, tftp server地址,bootloader文件名稱
- 如果沒有請求到必要的pxe相關的選項,主要的就有兩個TFTP Server Name(tftp服務器地址),Bootfile Name(bootloader的文件名稱,相對tftp server的根目錄); 則繼續執行步驟1,直到取得這些信息
- 通過tftp服務器下載到支持pxe啟動的bootloader
- 后續的事情就交給bootloader了,包括從TFTP服務器下載啟動鏡像(比如vmlinux),安裝鏡像(iso文件),自動安裝腳本(centos的kickstart腳本)
-
分為有盤和無盤系統啟動,當客戶端機器沒有盤時,也可以從網絡磁盤啟動(比如NFS);客戶端有盤時,要么安裝操作系統,要么從已安裝的磁盤啟動(pxe會自動識別是直接安裝還是直接啟動)
-
服務端的dhcp服務器必須支持pxe的相關選項, 這些選項pxe客戶端會通過DHCP Discover消息的Request Paramenter List來聲明所有需要的選項,如果dhcp server不支持pxe啟動,那么就只會回復一個普通的分配地址的DHCP Offer消息,而不會包含pxe啟動相關的啟動選項,這時候pxe客戶端不會直接發送NAK消息拒絕這個Offer, 會繼續發送DHCP Discover消息
-
之所以不直接NAK沒有包含pxe啟動的消息,這里是有歷史原因的:
- dhcp 協議為了兼容BOOTP,以及保持后續的新增選項,對不支持的選項,是可以選擇不回復的,對客戶端在Request Paramenter List里列出的選項,是盡可能多的回復,單不保證會回復所有的選項
- dhcp協議里是允許多個dhcp server存在的,每個server都可以響應DHCP Discover消息,客戶端會根據需要來采用多個dhcp server提供配置信息
- pxe協議里為了支持不影響已有的dhcp server的配置,pxe啟動支持兩階段啟動,先是獲得地址(可能是dhcp server1),再獲得pxe相關的選項(可能是dhcp server2,甚至是通過dhcp relay agent轉發到其他網絡里的dhcp server),因此當收到不包含pxe相關選項的DHCP Offer消息時,pxe客戶端仍然會繼續發送DHCP Discover消息,向dhcp server請求pxe相關的選項,否則就不能繼續pxe的啟動過程
-
一般網卡固件里的pxe驅動,只支持通過DHCP和TFTP配合來啟動的;但是一些開源的項目,已經拓展了pxe的啟動方式,支持通過http, scsi, nfs來引導啟動遠程操作系統的方式,比較有名的有iPXE(gPXE的繼承者)
-
另外bootloader也有一些比較有名的,比如SYSLinux, PXELINUX, iPXE也可以作為bootloader來使用
-
PXE相關的DHCP option基本都可以在RFC 2132, RFC 5071, RFC 4578中找的到解釋,也可以參考man dhcp-option來確認dhcpd對這些選項的支持情況
參看
- RFC4578: Dynamic Host Configuration Protocol (DHCP) Options for the Intel Preboot eXecution Environment (PXE),主要定義客戶端上報系統信息和option請求規范
- man dhcp-options, 解釋dhcpd的option配置
- RFC2132: DHCP Options and BOOTP Vendor Extensions,包含大部分的dhcp option
- RFC5071: Dynamic Host Configuration Protocol Options Used by PXELINUX