伺服器維運

PXE 是什麼意思?網路啟動裝機的原理與完整流程

PXE 是 Preboot eXecution Environment 的縮寫,中文叫預啟動執行環境:伺服器還沒有作業系統時,由網路卡韌體發起網路啟動,向 DHCP 要位址和引導檔名,再用 TFTP 把載入程式下載到記憶體裡執行。PXE 裝機就是借這條路把安裝程式和應答檔案送到伺服器上,不插 U 盤、不用到現場。

作者 頂聯產品團隊發布於 7 分鐘閱讀

PXE 是什麼意思?它是由 Intel 主導制定的網路啟動規範,全稱 Preboot eXecution Environment,預啟動執行環境,現在通行的 2.1 版釋出於 1999 年。“預啟動”說的是作業系統啟動之前:伺服器硬碟裡什麼都沒有時,網路卡韌體自己就能上網,從伺服器那裡下載一個小程式到記憶體裡執行。BIOS 啟動選單裡的“PXE 啟動”“Network Boot”,指的就是這個功能;“PXE 裝機”則是它最常見的用法,借網路啟動把安裝程式和應答檔案送到機器上,無人值守地裝完系統。

PXE 是什麼:網路卡韌體裡的一段啟動程式

PXE 客戶端不在作業系統裡,而在韌體裡:

啟動模式 PXE 客戶端在哪 開機時螢幕上的典型字樣
Legacy(傳統 BIOS) 網路卡上的 Option ROM,內含 DHCP 客戶端、TFTP 客戶端和 UNDI 網路卡驅動介面 網路卡型號、MAC 位址和 PXE 字樣
UEFI 主機板韌體的網路協議棧,網路卡提供 UEFI 驅動 Start PXE over IPv4(或 IPv6)

理解 PXE 有一個關鍵點:PXE 本身只做一件事,就是把第一個程式下載到記憶體並執行。這個程式叫網路載入程式(NBP,Network Bootstrap Program),常見的有 PXELINUX、GRUB、iPXE,以及 Windows 部署服務(WDS)的 wdsnbp.com(BIOS)和 wdsmgfw.efi(UEFI)。之後顯示什麼選單、載入哪個核心、裝什麼系統,全是 NBP 和安裝程式的事,PXE 已經退場了。所以“PXE 裝機”其實是三段接力:韌體裡的 PXE 把 NBP 拉進來,NBP 把核心和安裝程式拉進來,安裝程式按應答檔案把系統裝到硬碟上。

幾個常被混用的說法:

  • PXE 啟動:啟動方式,和“從硬碟啟動”“從 U 盤啟動”並列。
  • PXE 伺服器:提供 DHCP、TFTP、安裝源的那台(或那幾台)機器,不是某個專門的軟體。
  • PXE 裝機:用 PXE 啟動來安裝作業系統的整個過程,業內也叫網路裝機、網路安裝。

PXE 啟動的完整流程:從開機到系統裝完

  1. 韌體初始化網路卡。開機自檢後,按啟動順序輪到網路卡,韌體載入 PXE 客戶端,網口鏈路起來後開始發請求。
  2. 廣播 DHCP Discover。和普通 DHCP 請求不同,PXE 客戶端會帶上幾項特殊選項:選項 60(廠商類別)寫著 PXEClient:Arch:00007:UNDI:003016 這樣的字串,表明“我是來網路啟動的”;選項 93 是客戶端架構,0 代表傳統 BIOS,x86-64 UEFI 多為 7(部分韌體報 9),ARM64 UEFI 為 11;選項 97 是客戶端標識,通常就是主機板 UUID。
  3. DHCP 伺服器應答。除了 IP 位址,應答裡還要有兩樣東西:TFTP 伺服器位址(報文頭的 next-server 欄位或選項 66)和引導檔名(報文頭的 file 欄位或選項 67)。DHCP 伺服器根據選項 93 判斷是 BIOS 還是 UEFI,給出不同的檔名。現網 DHCP 不歸你管、改不了時,可以另起一個 proxyDHCP:位址仍由原來的 DHCP 分,proxyDHCP 只補充引導資訊,過程中會用到 UDP 4011 連接埠。
  4. TFTP 下載網路載入程式。客戶端向 TFTP 伺服器的 UDP 69 連接埠發讀請求,下載 NBP 到記憶體並執行。傳統 TFTP 每個資料塊 512 位元組,發一塊等一個確認,所以很慢;客戶端和伺服器支援 blksize 選項(RFC 2348)時可以協商更大的塊。
  5. NBP 讀取配置,載入核心和 initrd。以 PXELINUX 為例,它會按固定順序找配置檔案:先找以主機板 UUID 命名的,再找 pxelinux.cfg/01- 加 MAC 位址(短橫線分隔)命名的,再按 IP 位址的十六進位制形式逐位縮短查詢,最後用 pxelinux.cfg/default。這個順序意味著你可以給某一台機器單獨寫一份配置,而不影響其他機器。
  6. 安裝程式拉取安裝源和應答檔案。核心啟動後執行安裝程式,按啟動引數裡寫的位址,從 HTTP、NFS 或 SMB 下載安裝包和應答檔案。幾 GB 的安裝源不走 TFTP,這是 PXE 環境裡要再放一個 HTTP 服務的原因。
  7. 自動安裝、重啟進入新系統。安裝程式按應答檔案分割槽、裝包、執行裝後指令碼,最後重啟。這裡有一個經典的坑:如果網路卡排在啟動順序第一位,重啟後又會進 PXE,再裝一遍。常見的防法是裝機時用 BMC 設定“僅下一次從 PXE 啟動”,或者讓選單預設項從本地硬碟啟動,裝完後刪掉這台機器的專屬配置。

整個過程的耗時,前四步通常只有十幾秒到一分鐘,主要時間花在第 6 步下載安裝包和第 7 步安裝上,取決於安裝源的頻寬和裝多少軟體包。

抓包看一次 PXE 啟動

排查或學習時,在 PXE 伺服器的裝機網路卡上抓包,能把上面每一步對應起來(ens19 換成你的網路卡名,MAC 換成待裝機器業務網路卡的 MAC):

tcpdump -ni ens19 -vv 'port 67 or port 68 or port 4011 or ether host 3c:ec:ef:12:34:56'
順序 看到的報文 重點看什麼
1 DHCP Discover(客戶端廣播) 選項 60 是否為 PXEClient 開頭,選項 93 是 0 還是 7
2 DHCP Offer 是否帶了 next-server 和引導檔名,檔名和架構是否對應;有兩台伺服器同時應答就是 DHCP 搶答
3 DHCP Request / ACK 位址是否確認成功
4 發往 UDP 69 的 TFTP 讀請求 請求的檔名和伺服器上的實際路徑是否一致
5 大量 TFTP 資料和確認 載入程式、核心、initrd 正在下載
6 到 TCP 80 的 HTTP 請求 安裝程式開始拉安裝源和應答檔案,PXE 階段已經結束

哪一步之後再沒有下文,問題就出在哪一步。

一套 PXE 裝機環境需要哪些元件

元件 作用 常見實現 連接埠
DHCP 分配位址,告訴客戶端去哪取哪個引導檔案 ISC DHCP、Kea、dnsmasq、Windows DHCP UDP 67、68
proxyDHCP(可選) 現網 DHCP 不能改時,只補充引導資訊 dnsmasq、WDS UDP 67、4011
TFTP 傳送載入程式、選單、核心和 initrd tftp-hpa、dnsmasq 內建 UDP 69,資料走高位連接埠
網路載入程式 顯示選單,載入核心或 WinPE PXELINUX、GRUB(UEFI 下通常配 shim)、iPXE —
安裝源 系統安裝包或映象內容 nginx、Apache、NFS、SMB(裝 Windows 時) TCP 80、2049、445
應答檔案 替人回答安裝程式的所有問題 Kickstart、preseed、autoinstall、autounattend.xml、ESXi 的 ks.cfg 跟隨安裝源
網路 讓 DHCP 廣播到達伺服器 獨立的裝機 VLAN;跨網段時在閘道器上配 DHCP 中繼 —
觸發 讓伺服器這一次從網路啟動 BMC 一次性啟動設定、開機按 F12 UDP 623(IPMI)

前三項(DHCP、TFTP、載入程式)屬於 PXE 本身,後面幾項屬於“裝機”。Cobbler、Foreman、MAAS、iVentoy、WDS 這類工具,把其中幾項打包在一起管理,原理並沒有不同。

兩個和網路有關、常被忽略的細節:

  • 交換器連接埠要開快速轉發。接待裝機器的連接埠如果跑經典生成樹,鏈路起來後要經過約 30 秒的偵聽和學習才轉發資料,PXE 客戶端的 DHCP 請求可能在這段時間裡超時。把這些連接埠設為邊緣連接埠(思科叫 PortFast)即可。
  • UEFI 安全啟動要求整條引導鏈都有簽名。開啟安全啟動時,NBP、核心都要有合法簽名,發行版簽過名的 shim 加 GRUB 可以透過,自己編譯的 iPXE 一般過不了,要麼關閉安全啟動,要麼換用簽名的載入程式。

PXE 也在演進:iPXE 是一個開源的網路載入程式,可以被 PXE 載入後接管,用 HTTP 代替 TFTP 下載、執行指令碼,速度和靈活性都好得多;UEFI 2.5 起的 HTTP Boot 則讓韌體本身直接用 HTTP 下載引導檔案,客戶端架構碼也有對應的取值(x86-64 UEFI HTTP 為 16)。兩者都還以 DHCP 為起點,可以看作 PXE 思路的延續。

應答檔案:PXE 裝機能做到無人值守的關鍵

PXE 只解決“啟動”,真正讓裝機不用人守著的是應答檔案。不同系統的格式不同,指過去的方式也不同:

系統 應答檔案 怎麼告訴安裝程式去哪取
Rocky Linux、AlmaLinux、RHEL 8 / 9 Kickstart 核心引數 inst.repo=http://10.30.0.2/rocky9 inst.ks=http://10.30.0.2/ks/web.cfg
Debian preseed 核心引數 auto=true priority=critical url=http://10.30.0.2/preseed/web.cfg
Ubuntu Server 20.04 及以後 autoinstall(cloud-init 格式) 核心引數加 autoinstall 並指定 nocloud 資料來源位址,寫法隨版本有變化,以 Ubuntu 文件為準
Windows Server autounattend.xml WinPE 啟動後執行 setup.exe /unattend: 加應答檔案路徑
VMware ESXi ks.cfg 在 boot.cfg 的 kernelopt 一行寫 ks=http://10.30.0.2/esxi/ks.cfg

應答檔案裡風險最高的是裝到哪塊盤。一份寫著“清空全部磁碟”的應答檔案,遇到掛著資料盤的機器會把資料一起清掉。以 Kickstart 為例,顯式限定目標盤:

ignoredisk --only-use=sda
clearpart --all --initlabel --drives=sda
autopart --type=lvm

裝置名在混插 SATA、NVMe 和陣列卡的機器上並不穩定,sda 不一定是你以為的那塊盤。批次裝機前先在一台樣機上確認安裝程式裡的磁碟機代號,機型不同的分開寫應答檔案,或改用 /dev/disk/by-path/ 這類按物理位置命名的路徑。

PXE 裝機和 U 盤、光碟裝機怎麼選

對比項 PXE 網路裝機 U 盤裝機 光碟或 BMC 虛擬光碟機
要不要到現場 不用,配合 BMC 遠端觸發 要 實體光碟要;虛擬光碟機不用
前期投入 搭服務、寫選單和應答檔案,首次以天計 做一個啟動盤,十幾分鍾 準備 ISO
每台的人工 設定一次網路啟動,幾分鐘 插盤、選啟動項、守著安裝 掛映象、守著安裝
能否同時裝多台 能,上限取決於安裝源頻寬 一個 U 盤對應一台 每台單獨掛映象,要逐台操作
結果是否一致 同一份應答檔案,分割槽和軟體包一致 取決於操作的人 取決於操作的人
典型故障 DHCP 搶答、VLAN 不通、BIOS 與 UEFI 檔案不匹配 啟動盤製作模式不對、USB 口不識別 映象傳輸慢或中斷
適合 批次上架、出租業務反覆重灌 少量機器、新機房網路還沒通 單台遠端救急、裝特殊系統

要不要搭 PXE,可以算一筆時間帳。假設 U 盤裝一台,人工要花 30 分鐘(走到機櫃、插盤、選啟動項、回答安裝嚮導);第一次搭好 PXE 環境要 8 小時,之後每台人工 2 分鐘。那麼 8 × 60 ÷(30 − 2)≈ 17.1,裝到第 18 台時,PXE 省下的時間就超過了搭建的投入。如果只是一次性上架十來台,U 盤或虛擬光碟機更划算;如果是出租業務,機器退租、換客戶、客戶要求換系統,同一台機器一年要重灌好幾次,環境搭一次反覆用,PXE 的帳很快就算回來了。

以下情況不急著上 PXE:網段裡有你管不了的 DHCP,又不方便用 proxyDHCP;一年只裝幾台機器;必須開啟安全啟動而手裡沒有簽名的引導鏈;要裝的系統需要大量人工選擇,寫不成應答檔案。

在管理系統裡怎麼落地

PXE 解決了“機器怎麼從網路把安裝程式拉起來”,但在機房裡,什麼時候讓哪台機器走 PXE、裝完怎麼確認、裝的是哪個映象,還要有人排程。Toplink DCIM 的 IPMI 遠端管理可以透過 BMC 把伺服器的下一次啟動設為 PXE、線上 ISO 或硬碟,配合重灌系統使用;批次裝機時可以一次把多台伺服器設為從 PXE 啟動,交給任務佇列批次重灌,後台能看到每台的進度,各機房部署的從節點就近執行重灌任務。伺服器分配給客戶後,客戶在自助端選擇映象自行重灌,重灌屬於高危操作,需要輸入 OTP 動態口令確認。

常見問題

PXE 啟動和無盤啟動是一回事嗎?

不完全是。PXE 只負責把第一個載入程式送進記憶體;之後把系統裝到本地硬碟就是 PXE 裝機,把系統根目錄放在網路儲存(NFS、iSCSI)上一直這樣執行就是無盤啟動。無盤工作站、渲染節點的第一步同樣是 PXE。

PXE 支援 IPv6 嗎?

UEFI 的網路啟動支援 IPv6,引導檔案位址由 DHCPv6 的啟動檔案 URL 選項(RFC 5970)下發,BIOS 設定裡通常能分別開啟 IPv4 和 IPv6 PXE;傳統 Legacy 網路卡的 Option ROM 基本只支援 IPv4。純 IPv6 裝機網段較少見,服務端和交換器都要另行配置。

伺服器一直開著 PXE 啟動有安全風險嗎?

有。網段裡任何能回應 DHCP 的機器都能給它下發載入程式,誤裝或惡意引導都可能清掉硬碟。裝機網段要單獨劃 VLAN,業務網口的網路啟動排在硬碟之後,需要重灌時再用 BMC 設定一次性 PXE 啟動。

想看看在你的機房裡怎麼用?

從一次產品示範開始,梳理你的業務鏈路。

查看價格
服務熱線 400-112-2951

讓我們聊聊你的 IDC 業務

掃碼新增企業微信,預約產品示範或申請試用。

Toplink 企業微信二維碼

長按儲存或使用企業微信 / 微信掃描

也可致電
400-112-2951
Telegram
@TopLink88