使用 ZFS、iSCSI 與 PXE 讓 Linux 無碟開機 (★ 100 分)
作者示範用 PXE(Preboot Execution Environment,讓電腦在開機前從網路載入開機程式的機制)、iSCSI(Internet Small Computer Systems Interface,透過網路提供區塊儲存的協定)與 ZFS(具檢查碼與自我修復能力的檔案系統),讓主要用來打遊戲的 Windows PC 不動本機 NVMe(Non-Volatile Memory Express,高速固態硬碟常用介面)分割區,就能從 NAS(Network Attached Storage,網路附加儲存裝置)/Proxmox 主機上的遠端磁碟開機進 Debian 13。動機是想在 Linux 環境測試 Unsloth 的 Qwen3.6 與 Gemma4 模型,避免在 Windows 繼續堆 Python venv(虛擬環境)、Mingw、CUDA(NVIDIA 的 GPU 平行運算平台)與 WSL(Windows Subsystem for Linux,Windows 上的 Linux 子系統)等開發工具,也避開 Windows 更新影響 GRUB(常見 Linux 開機載入器)與 UEFI(Unified Extensible Firmware Interface,現代電腦韌體開機介面)開機紀錄、USB 隨身碟容易被拿去另作他用的困擾。
文章也先界定限制:Debian 安裝在網路磁碟會比本機安裝慢,作者不打算拿它日常瀏覽網頁,而是把模型放在本機 NVMe、作業系統放在遠端,開機後主要靠 RAM(記憶體)工作,因此可接受。實作環境是一台 Debian 13/Proxmox 虛擬化主機,同時提供 Netboot.xyz、TFTP(Trivial File Transfer Protocol,簡易檔案傳輸協定)、iSCSI target(伺服器端目標)與 ZFS ZVol(ZFS 磁碟區);Asus 路由器上的 DNSMasq 負責 DHCP(Dynamic Host Configuration Protocol,自動分配 IP 等網路參數的協定),並把 PXE/iPXE(PXE 的進階開源實作)導向 TFTP 主機。
主要步驟是先在 Proxmox 上安裝 apache2、ansible、tftpd-hpa、targetcli-fb 等套件,建置 Netboot.xyz,調整 local-vars.ipxe 與自訂 iPXE 選單;debian13-iscsi.ipxe 先用 sanboot 嘗試從 iSCSI 磁碟開機,若尚未安裝作業系統就改載 Debian netboot installer 的 Linux 核心與 initrd(初始 RAM 磁碟)。接著建立 ZFS pool(儲存池)與 32GB ZVol,用 targetcli 把它匯出為 iSCSI LUN(Logical Unit Number,邏輯單元編號),設定 initiator IQN(iSCSI Qualified Name,iSCSI 裝置識別名稱)與雙向驗證;在 Debian 安裝程式中切到 TTY 2 修改 initiator 名稱、重新啟動 iscsid 後登入 iSCSI portal(入口位址),最後選擇顯示為 LIO-ORG 的遠端磁碟分割並安裝。重開機後再次進入 Netboot.xyz 自訂選單,iPXE 就能從 iSCSI 磁碟啟動遠端 GRUB;作者提醒分割時務必確認磁碟,否則可能覆寫本機 Windows 或其他資料。
Hacker News 討論多把這套做法與 NFS(Network File System,網路檔案系統)root(把根檔案系統放在 NFS 上)相比:NFS 無碟開機較常見、也可能更容易架起來,但若多台機器共用唯讀 root,需要 RAM 磁碟或每台主機各自的可寫區;也有人提到 Red Hat 與 Arch 的套件管理器在 NFS root 上可能因 SQLite 等因素出問題。關於 iSCSI 與 NBD(Network Block Device,網路區塊裝置)的取捨,留言普遍認為 iSCSI 是標準化協定、跨作業系統機率較高,且因呈現為區塊裝置,可搭配磁碟加密、LVM(Logical Volume Manager,邏輯磁碟區管理)或任意檔案系統;缺點是 targetcli 與 iSCSI 術語門檻偏高。另有補充指出,本文的 ZFS 主要是伺服器端後端儲存,不要求開機端作業系統具備 ZFS;只要有備援或額外副本,ZFS 可在讀取或 scrub(完整性掃描)時修正 checksum(檢查碼)錯誤。
效能與可靠性是另一個焦點。多位留言者指出 1GbE(1 Gigabit Ethernet)對無碟 root 會很吃力,10GbE(10 Gigabit Ethernet)仍比本機 NVMe 慢上數倍;若要長期使用,應替 iSCSI 切出獨立 VLAN(Virtual Local Area Network,虛擬區域網路)或資料平面,並調整 QoS(Quality of Service,服務品質)以降低壅塞與封包遺失,也可考慮具 iSCSI offload(交由網卡處理)的 Chelsio、Mellanox RDMA(Remote Direct Memory Access,遠端直接記憶體存取)或 NVMe-oF(NVMe over Fabrics,網路化 NVMe 儲存協定)。也有人修正作者對開機管理的說法:不一定要每次 Linux 核心更新都手動改 UEFI,GRUB、systemd-boot、rEFInd 或 UKI(Unified Kernel Image,統一核心映像)都能簡化;Windows/Linux 雙開通常比無碟開機簡單,但 NTFS(Windows 常用檔案系統)分割、過小 EFI 系統分割區(UEFI 使用的開機分割區)與 Secure Boot(安全開機)仍可能造成麻煩。最後,留言提醒 llama.cpp 已提供 Windows 已編譯版本,因此這篇更像是一次深入理解 PXE/iSCSI 的實作紀錄,而不是唯一解法。
👥 53 則討論、評論 💬
https://news.ycombinator.com/item?id=48045012