使用 ZFS、iSCSI 與 PXE 構建無磁碟 Linux 開機系統

對於許多開發者而言,在穩定的遊戲或主要作業系統與靈活的開發環境之間取得平衡,是一項持續的挑戰。無論是為了避免 Windows 安裝環境被各種工具鏈「污染」,還是為了防止 Windows Update 覆蓋 GRUB 項目,對一個既隔離又高效能的環境的需求是非常普遍的。

雖然 USB 隨身碟是執行 Live Linux 環境的常用選擇,但它們很容易遺失或被格式化。一個更強大、專業級的解決方案是無磁碟開機(diskless booting)。透過利用 PXE (Preboot Execution Environment)、iSCSI 與 ZFS,可以從遠端 NAS 開機一個完整的 Linux 安裝,將網路連接的區塊裝置視為本地硬碟。

架構

此設置依賴於客戶端-伺服器模型,其中伺服器提供開機基礎設施與儲存,而客戶端(遊戲 PC 或工作站)則提供運算能力。

伺服器技術棧

  • Netboot.xyz: 一個多功能的工具,透過網路提供選單式介面,用於開機各種作業系統與安裝程式。
  • TFTP (Trivial File Transfer Protocol): 用於將初始開機載入程式(bootloader)二進位檔傳送到客戶端。
  • DNSMasq: 作為 DHCP 伺服器,根據客戶端的架構(BIOS vs. UEFI)引導客戶端至 TFTP 伺服器。
  • ZFS ZVol: 在 ZFS pool 中建立的區塊裝置,為虛擬磁碟提供原始儲存空間。
  • iSCSI Target (targetcli): 將 ZFS ZVol 作為區塊裝置透過網路匯出,允許客戶端將其掛載為本地 SCSI 磁碟。

實作指南

1. 設定開機基礎設施

第一步是在基於 Debian 的伺服器(例如 Proxmox)上安裝 netboot.xyz。這涉及安裝 Web 伺服器(Apache)、TFTP 以及 Ansible,以自動化部署 netboot 資產。

為了支援自定義開機目標,您必須建立一個 .ipxe 腳本。該腳本會指示客戶端嘗試使用 iSCSI 伺服器的 IP 與特定的 Target IQN 進行 sanboot (SCSI 網路開機)。如果開機失敗(在初始安裝期間通常會發生),腳本會配置為回退到 Debian 安裝程式。

2. 網路配置

您的 DHCP 伺服器(例如執行 DNSMasq 的路由器)必須配置為處理不同類型的客戶端。典型的配置包括:

  • BIOS Clients: 引導至 netboot.xyz-undionly.kpxe
  • UEFI Clients: 引導至 netboot.xyz-snp.efi
  • iPXE Clients: 一旦初始開機載入程式開始執行,隨後的請求會被重新導向至託管在 Web 伺服器上的 menu.ipxe

3. 儲存與 iSCSI 配置

使用 ZFS,您可以建立一個 ZVol 來作為磁碟映像檔:

\

Sources