在擁有數十上百台客戶端的環境(網吧、教室、辦公室、雲桌面),傳統本地硬碟部署意味著龐大的維護成本:系統更新、軟體安裝、故障排除皆需逐機操作。無盤啟動 讓客戶端透過網路從中央伺服器載入核心與根檔案系統,實現「一次部署、全網生效」,極大降低運維複雜度。
sudo apt-get update
sudo apt-get install -y \
isc-dhcp-server tftpd-hpa syslinux \
nfs-kernel-server initramfs-tools
編輯 /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
編輯 /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
sudo mkdir -p /nfsroot
echo "/nfsroot *(rw,sync,no_root_squash,no_subtree_check)" | sudo tee -a /etc/exports
sudo exportfs -rv
編輯 /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
# 假設 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
編輯 /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
成功後,新增 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 路徑。無盤啟動是 Linux 系統管理員工具箱中的利器,掌握其原理與實作細節,能為大規模部署帶來質的飛躍。