Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 無盤啟動完整實作指南:基於 PXE、DHCP、TFTP 與 NFS

編輯:Linux 教學

前言:為何選擇無盤啟動?

在擁有數十上百台客戶端的環境(網吧、教室、辦公室、雲桌面),傳統本地硬碟部署意味著龐大的維護成本:系統更新、軟體安裝、故障排除皆需逐機操作。無盤啟動 讓客戶端透過網路從中央伺服器載入核心與根檔案系統,實現「一次部署、全網生效」,極大降低運維複雜度。

架構概覽

  • Server 端:掛載 NFS 根目錄、提供 DHCP/TFTP 服務、儲存核心與 initrd。
  • Client 端:BIOS 設為網路啟動 (PXE) → 透過 DHCP 取得 IP 與啟動檔案位置 → TFTP 下載 pxelinux.0、核心、initrd → 掛載 NFS 根目錄進入系統。
  • 協議鏈:PXE → DHCP/BOOTP → TFTP → NFS。

環境需求

  • 至少兩台 Linux 機器(一 Server、一 Client),同一區域網路。
  • Server 需固定 IP、裝有大容量硬碟;Client 無需硬碟,網卡支援 PXE。
  • 本文以 Ubuntu 為例,原理通用於 CentOS/Debian 等發行版。

步驟 1:安裝核心套件

sudo apt-get update
sudo apt-get install -y \
  isc-dhcp-server tftpd-hpa syslinux \
  nfs-kernel-server initramfs-tools

步驟 2:配置 TFTP 服務

編輯 /etc/default/tftpd-hpa:

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"

建立 PXE 目錄結構並複製啟動載入器:

sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg
sudo cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/

建立預設啟動選單 /var/lib/tftpboot/pxelinux.cfg/default:

DEFAULT ubuntu
LABEL ubuntu
  KERNEL vmlinuz
  APPEND root=/dev/nfs initrd=initrd.img nfsroot=192.168.1.100:/nfsroot ip=dhcp rw

參數說明:

  • root=/dev/nfs:告知核心根檔案系統在 NFS 上。
  • nfsroot=IP:/path:Server IP 與 NFS 共享路徑。
  • ip=dhcp:Client 透過 DHCP 取得 IP。
  • rw:根目錄可讀寫。

重啟服務:sudo systemctl restart tftpd-hpa

步驟 3:配置 DHCP 服務

編輯 /etc/dhcp/dhcpd.conf(假設子網 192.168.1.0/24,Server IP 192.168.1.100):

allow booting;
allow bootp;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.100 192.168.1.200;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
  filename "pxelinux.0";          # 告訴 Client 載入此檔
  next-server 192.168.1.100;      # TFTP Server IP
}

重啟:sudo systemctl restart isc-dhcp-server

步驟 4:配置 NFS 服務與根檔案系統

4.1 匯出 NFS 共享

sudo mkdir -p /nfsroot
echo "/nfsroot *(rw,sync,no_root_squash,no_subtree_check)" | sudo tee -a /etc/exports
sudo exportfs -rv

4.2 製作支援網路啟動的 initrd

編輯 /etc/initramfs-tools/initramfs.conf:

BOOT=nfs
MODULES=netboot

重建 initrd 並複製核心:

sudo mkinitramfs -o /var/lib/tftpboot/initrd.img
sudo cp /boot/vmlinuz-$(uname -r) /var/lib/tftpboot/vmlinuz

4.3 複製完整根檔案系統至 NFS

# 假設 Server 本身即為基礎系統範本
sudo cp -ax / /nfsroot
# 調整 /nfsroot/etc/fstab
echo "/dev/nfs / nfs defaults 1 1" | sudo tee -a /nfsroot/etc/fstab
# 確保 TFTP 目錄權限
sudo chmod -R 777 /var/lib/tftpboot

4.4 Server 網卡固定 IP(關鍵)

編輯 /etc/network/interfaces(或 Netplan):

auto eth0
iface eth0 inet static
  address 192.168.1.100
  netmask 255.255.255.0
  gateway 192.168.1.1
  dns-nameservers 8.8.8.8

步驟 5:Client 端啟動驗證

  1. 進 BIOS,將啟動順序第一項設為 Network Boot (PXE)。
  2. 開機,觀察 DHCP 取得 IP → TFTP 下載 pxelinux.0 → 選單 → 載入核心/initrd → 掛載 NFS 根目錄 → 進入登入畫面。

成功後,新增 Client 僅需插上網路線、設定 PXE 啟動,無需任何額外配置。

常見問題排查

現象可能原因對策
Client 卡在 "PXE-E53: No boot filename received"DHCP 未傳遞 filename/next-server檢查 dhcpd.conf 的 filename 與 next-server 設定
TFTP 傳輸超時防火牆封鎖 UDP 69、TFTP_DIRECTORY 路徑錯誤開放防火牆、核對 tftpd-hpa 設定
核心啟動後掛載 NFS 失敗nfsroot IP/路徑錯誤、NFS 未匯出、initrd 缺 nfs 模組檢查 /etc/exports、重建 initrd (MODULES=netboot)
進入系統後無網路initrd 未包含網卡驅動確認 MODULES=netboot 或手動加入驅動模組

進階延伸

  • 多發行版共存:在 pxelinux.cfg/default 增加多個 LABEL,指向不同核心/initrd/NFS 路徑。
  • 唯讀根目錄 + OverlayFS:Server 端根目錄設為唯讀,Client 以 OverlayFS 寫入差異,極大增強安全性與穩定性。
  • iPXE / HTTP Boot:替代 TFTP 以 HTTP 傳輸核心/initrd,速度更快、穿透防火牆更容易。

無盤啟動是 Linux 系統管理員工具箱中的利器,掌握其原理與實作細節,能為大規模部署帶來質的飛躍。

Copyright © Windows教程網 All Rights Reserved