最近,一個名為 nfs40.online 的網站悄然上線,收集並紀念昇陽電腦(Sun Microsystems)的網路檔案系統(NFS)誕生 40 週年相關資訊。這項始於 1983 年的技術,至今仍是分散式系統的基石之一。這個網站不僅收錄了核心的設計文件與技術規格,也彙整了許多資深工程師的寶貴回憶。

根據上面的表, NFS 一路走來 40 個年頭,在許多技術上的演進和功能設計是逐步產生,並引領了不同時代的諸多應用實現。
NFS 的誕生,解決了那個時代最棘手的問題,也就是昂貴且有限的本地儲存空間。然而,NFS 在許多資深工程師的眼中,既是救星,也是個惡夢。它在運作順暢時無比美好,可一旦出問題,就會是一場災難。以下,我們將透過幾位來自 Reddit、Apple 等公司的工程師分享,一窺 NFS 的輝煌與陷阱。
NFS的黃金年代:集中化管理的完美方案
在本地硬碟動輒以 MB 計算的年代,NFS 是個天才般的設計。一位資深工程師 Neilv 回憶道,無論是用在無碟工作站(或者是現在的 Thin Client、直接掛載 NFS 的伺服器等等),或是需要建構一個跨平台軟體的開發環境,NFS 都是一個非常理想的選擇,它讓所有人的家目錄(Home directories)、程式碼庫(SCM repos)和共用工具得以集中管理。

昇陽電腦的工程師 Jjav 更補充,NFS 的核心價值在於建立一個大規模的共享檔案系統,讓整個團隊、部門甚至公司都能協同作業。這是現今的 Google Drive 或其他雲端儲存方案難以比擬的體驗,也就是將整個公司的檔案系統直接掛載(mount)到本機,實現真正的無縫協作。
過往的一些血淚經驗
然而,這份美好底下也是有過一些血淚經驗,前 Reddit 工程師 Jedberg 分享了他與 NFS 的其中兩次交手經驗。在他第一份工作中,團隊使用 NFS 來統一管理所有開發者的桌面環境。這套系統運作得很好,更新或新增應用程式,所有人的環境都能「神奇地」同步。但當 NFS 伺服器發生延遲、異常或掛掉,整個團隊的作業即陷入停擺。
幾年後,當他加入 Reddit,首要任務之一就是解決程式碼部署問題。當時的共同創辦人 Steve Hoffman 提議使用 NFS 來分發程式碼:將所有應用程式伺服器掛載到同一個 NFS 目錄,只要更新伺服器上的程式碼,所有節點就會自動生效。這個想法理論上很完美,但 Jedberg 以過去的經驗提出警告。為了證明 NFS 的風險,他不僅找出了大量學術論文和技術文章,甚至直接建立了一個小型叢集,向 Steve 展示當 NFS 伺服器離線時,所有應用程式伺服器是如何在需要讀取檔案的瞬間立即卡死、無法運作的。
幸運的是,Steve 選擇相信他的專業判斷。最終,Jedberg 建立了一套新的部署系統:應用程式伺服器在開機時拉取(pull)最新程式碼,同時支援遠端觸發更新。這套以 Perl 撰寫的系統,成為了 Reddit 長達十年的部署工具。這個故事也讓他體悟到:「即便你經驗豐富,在新的團隊中,信任依然需要靠實力贏得。」
Apple 的轉型之路:告別 Legacy NFS 包袱
無獨有偶,一位曾在 Apple 硬體工程部門擔任系統管理員的工程師 Ninkendo 也分享了類似的經歷。大約 15 年前,Apple 的硬體工程部門從設計圖、原始碼、模擬工具到運算結果,全部儲存在 NFS 上。後來,一個類似於現今 Docker 的新系統出現了。它以容器化的方式運行任務,要求任務在啟動前預先下載所有依賴的工具,穩定性極高。新系統的設計者希望兼容舊有工作流程,便詢問 Ninkendo 如何在容器內掛載公司的 NFS 叢集。
Ninkendo 的回答出乎意料:「我們不要這麼做。」他認為,NFS 是舊時代的工作方式,新系統代表著未來。他建議,如果工程師想使用新系統,就應該重新設計他們的工作流程,明確宣告依賴關係,並使用本地快取。這個看似激進的決定,最終成為推動整個部門擺脫舊架構,往新的方向走。
NFS 的現況:從企業儲存設備到各型 NAS 的要角
然而,若因此將 NFS 視為純粹的「歷史遺產」,那可能就言之過早了。儘管在應用程式部署等領域逐漸被新技術取代,NFS 卻在儲存領域深深紮根,並持續演化,至今仍是企業儲存與 NAS 設備中不可或缺的核心協議。
在這 40 年間,Linux Kernel 團隊與開源社群長期維護 NFS client/server 實作(如 nfs-utils),另外,FreeNAS/TrueNAS 等開源 NAS 也廣泛支援 NFS,而 Kubernetes 使用者也會使用 NFS 作為簡易的 persistent volume 解法。
1、企業級儲存設備的基石
國際儲存大廠,如 HPE、Dell Technologies、QNAP、Pure Storage 等,都將 NFS 視為其統一儲存(Unified Storage)解決方案的關鍵。NFS 在以下場景中發揮著至關重要的作用:
虛擬化環境: 在 VMware vSphere 、PVE 或其他虛擬化平台中,NFS 是最受歡迎的資料儲存區(Datastore)協議之一。相較於區塊儲存(Block Storage),NFS 管理起來更簡單、彈性更大,對於建立、掛載和管理虛擬機硬碟檔案(VMDK)極為高效。
高效能運算 (HPC) 與 AI/ML: 科學運算、基因定序、模型訓練等應用需要數百甚至數千個運算節點同時存取龐大的共享資料集。NFS 憑藉其成熟的生態和高效的讀寫能力,成為這些場景的首選。特別是 NFSv4 及後續版本引入的 pNFS (Parallel NFS),更進一步將資料存取負載分散到多台伺服器,大幅提升了吞吐量。
非結構化資料儲存: 對於企業內部的大量文件、多媒體檔案、日誌數據等,NFS 提供了穩定可靠的檔案共享服務。
現代 NFS (特別是 NFSv4.x) 已大幅改進了早期版本的缺陷,例如引入了狀態化連線(Stateful connections),改善了網路中斷時的錯誤處理能力,減少了過去那種「一掛掉就全部卡死」的窘境;同時也強化了安全性,支援 Kerberos 等驗證機制。
2、NAS 的標準配備
在我們熟悉的國際 NAS 大廠如 QNAP 等品牌中,NFS 同樣也是在 NAS 上的標準檔案共享協議。對於 Linux/macOS 用戶或開發者而言,透過 NFS 掛載 NAS 空間,能獲得近乎本機檔案系統的無縫體驗,效能通常也優於 SMB/CIFS。
無論是作為小型辦公室的中央檔案伺服器、開發者的測試環境儲存區,還是家庭媒體中心,NFS 都以其穩定性和高效能證明了自身價值。
角色轉變,但精神永存
回顧 NFS 的 40 年歷史,我們看到了一項技術的完整生命週期,從當初的革命性創新,到因架構限制而在某些領域暴露出弱點,再到不斷演進並在特定領域鞏固其要角地位。
儘管 NFS 目前也面臨著未來挑戰,包括面對 S3 雲端物件儲存、Ceph、GlusterFS 等新世代儲存方案的競爭,以及雲端架構中 NFS 的延展性限制(如跨區域同步),再來是對容器架構(如 Kubernetes)的支援仍需要再改善。
但是多年一路走來,從雲端應用的程式碼部署,到企業級的資料儲存,NFS 的角色發生了轉變。它雖然在許多開發者的日常工作中退居幕後,卻在我們看不見的資料中心和儲存基礎設施中,成為穩定的基礎,找到了更加穩固且不可或缺的定位。
NFS 的故事,很值得我們回味與省思。
本文題圖與配圖由 Google Gemini AI 生成