網絡檔案系統

網絡檔案系統(英語:Network File System,縮寫作 NFS)是一種分散式檔案系統,力求客戶端主機可以訪問伺服器端檔案,並且其過程與訪問本地儲存時一樣,它由太陽電腦(已被甲骨文公司收購)開發,於1984年發佈[1]

它基於開放網絡運算遠端程序呼叫(ONC RPC)系統:一個開放、標準的RFC系統,任何人或組織都可以依據標準實現它。

版本和產品

NFSv1 只在SUN公司內部用作實驗目的。開發團隊在NFSv1的基礎上做了重大改進之後將其對外發佈,版本NFSv2由此產生。[2]

NFSv2

NFSv2最初在SunOS 2.0上面實現,1985年發佈[3]

參與NFSv2設計實現的人包括羅素·桑德柏格(Russel Sandberg)、鮑伯·里昂(Bob Lyon)、比爾·喬伊、史提夫·克萊曼(Steve Kleiman)等。[1][4] NFSv2 的定義RFC 1094,於1989年3月發佈。

NFSv2 最初只是基於 UDP。設計者旨在保持伺服器端是無狀態的,而將「」等機制的實現獨立於核心協定之外。[1] 這是一個關鍵決定,它使伺服器從故障恢復變得簡單:當一個伺服器變得不可用時,所有的網絡客戶端凍結,但一旦伺服器恢復,每一個嘗試重傳的狀態都包含在每個RPC裏面,這是由客戶端存根發起的。這樣的設計決策允許UNIX應用程式可以忽視伺服器端的問題。

虛擬檔案系統介面很容易模組化地實現一個簡單的協定。在1986年2月,諸多作業系統實現了對NFSv2的支援,例如 System V release 2、DOS,以及使用Eunice英語Eunice (software)VAX/VMS[4]

由於 32-bit 的限制,NFSv2 只允讀寫檔案起始2G大小的內容。

NFSv3

Version 3(RFC 1813,1995年6月)添加如下功能:

  • 支援 64 bit 檔案大小和偏移量,即突破 2GB 檔案大小的限制;
  • 支援伺服器端的非同步寫操作,提升寫入效能;
  • 在許多響應報文中額外增加檔案屬性,避免用到這些屬性時重新取得;
  • 增加 READDIRPLUS 呼叫,用於在遍歷目錄時取得檔案描述子和檔案屬性;
  • 其他改進。

在NFSv2發佈後不久,NFSv3協定提案就在Sun Microsystems內部被提出,其主要目的是解決NFSv2進行同步寫操作的效能問題[5]。1992年7月的實現版本已經解決了NFSv2的許多不足之處,但是大檔案支援(64位元檔案大小和偏移量)這一緊迫的問題還沒有解決。這成為迪吉多公司的一個痛點,他們當時推出64位元版本的Ultrix,以支援其新推出的64位元RISC處理器Alpha 21064。在引入NFSv3時廠商們正在越來越多的支援TCP作為傳輸層協定。當時有些廠商已經在NFS version 2支援TCP做為傳輸層,Sun Microsystems 在發佈NFSv3時也增加了將TCP作為傳輸層的支援。使用TCP做傳輸層使得NFS跨越 WAN 成為可能,並且可以突破 UDP 傳輸大小8K的限制,使用更大的讀寫數據單元。

NFSv4

NFSv4協定(RFC 3010,2000年12月;更新版 RFC 3530,2003年4月),借鑑了AFS(Andrew File System)和SMB/CIFS(Server Message Block)的特性,主要做了如下改進:效能提升,強制安全策略,引入有狀態的協定。[6]從NFSv4開始,協定的實現/開發工作不再是由SUN公司主導開發,而是改為由互聯網工程任務組(IETF)開發。

NFSv4.1

NFSv4.1(RFC 5661,2010年1月)旨在為並列訪問可橫向擴充的叢集服務(pNFS擴充)提供協定支援。

NFSv4.2

NFSv4.2 於2016年發佈。

其他擴充

WebNFS,一個NFSv2 v3的擴充,使得用戶可以方便的通過網頁瀏覽器與NFS伺服器端互動,且不受防火牆限制。在2007年,SUN公司開源了WebNFS客戶端的實現[7]

各種NFS相關的外掛/捆綁協定:

  • 位元組區間建議鎖網絡鎖定管理(Network Lock Manager,縮寫 NLM)協定(支援 UNIX System V 檔案鎖定 APIs)。
  • 遠端配額記錄(RQUOTAD)協定;使NFS用戶可以檢視伺服器端數據儲存配額。

NFS over RDMA 是NFS對遠端直接記憶體存取(RDMA)協定的適配[8][9],就是將預設的傳輸層協定TCP替換為RDMA。

平台

NFS 通常用在 Unix 作業系統上(比如 SolarisAIXHP-UX)和其他 類Unix 的作業系統(例如 LinuxFreeBSD)。同時在其他一些作業系統也提供了NFS實現,例如經典的 Mac OSOpenVMSMicrosoft Windows[10]OS/2[11]Novell NetWare 還有 IBM AS/400。可選的遠端檔案訪問協定還有伺服器訊息區塊(SMB, 或 CIFS)、 蘋果歸檔協定(AFP)、NetWare核心協定(NCP)和 OS/400 檔案伺服器檔案系統(QFileSvr.400)。

在Microsoft Windows系統上 SMB 和 NetWare核心協定(NCP)的使用比 NFS 更廣泛;在Apple Macintosh 作業系統上則 AFP 的使用更廣泛;而在 AS/400 系統上 QFileSvr.400 更為常用。Haiku 在2013年3月添加了 NFSv4 支援(作為Google 編碼夏季計劃的一部分)[12]

 
NFS specint2008 效能比較,2013年12月22日

典型實現

假設一個Unix風格的場景,其中一台電腦(客戶端)需要訪問儲存在其他機器上的數據(NFS 伺服器):

  1. 伺服器端實現 NFS 守護行程,預設執行 nfsd,用來使得數據可以被客戶端訪問。
  2. 伺服器端系統管理員可以決定哪些資源可以被訪問,匯出目錄的名字和參數,通常使用 /etc/exports 設定檔 和 exportfs 命令。
  3. 伺服器端安全-管理員保證它可以組織和認證合法的客戶端。
  4. 伺服器端網絡組態保證可以跟客戶端透過防火牆進行協商。
  5. 客戶端請求匯出的數據,通常呼叫一個 mount 命令。
  6. 如果一切順利,客戶端的用戶就可以通過已經掛載的檔案系統檢視和訪問伺服器端的檔案了。

提醒:NFS自動掛載可以通過—可能是 /etc/fstab 或者自動安裝管理進程。

參考文獻

  1. ^ 1.0 1.1 1.2 Russel Sandberg, David Goldberg, Steve Kleiman, Dan Walsh, Bob Lyon. Design and Implementation of the Sun Network Filesystem. USENIX. 1985 [2015-05-14]. (原始內容存檔於2011-12-13). 
  2. ^ NFS Illustrated (2000) by Brent Callaghan - ISBN 0-201-32570-5
  3. ^ Solaris Operating System (Unix). Operating System Documentation Project. [2015-03-11]. (原始內容存檔於2019-04-03). 
  4. ^ 4.0 4.1 Russel Sandberg. The Sun Network Filesystem: Design, Implementation and Experience (PDF). Technical Report (Sun Microsystems). [2015-05-18]. (原始內容存檔 (PDF)於2020-10-25). 
  5. ^ Brian Pawlowski, Chet Juszczak, Peter Staubach, Carl Smith, Diane Lebel, David Hitz. NFS Version 3 Design and Implementation. USENIX. 1994 [2016-01-12]. (原始內容存檔於2015-11-24). 
  6. ^ NFS Version 4. USENIX. 2005-04-14 [2017-05-08]. (原始內容存檔於2011-07-28). 
  7. ^ yanfs.dev.java.net[永久失效連結]
  8. ^ Tom Talpey. NFS/RDMA Implementation(s) Update (PDF). Network Appliance, Inc. February 28, 2006. (原始內容 (PDF)存檔於2011年5月12日). 
  9. ^ Brent Callaghan. NFS over RDMA (PDF). Sun Microsystems. January 28, 2002 [2016-02-14]. (原始內容存檔 (PDF)於2011-05-12). 
  10. ^ Introduction to Microsoft Windows Services for UNIX 3.5. technet.microsoft.com. Microsoft. [24 September 2016]. (原始內容存檔於2018-06-18). 
  11. ^ NTFS plugin for NetDrive. ecsoft2.org. [2020-09-22]. (原始內容存檔於2021-11-19). 
  12. ^ Paweł Dziepak. NFSv4 client finally merged. 2013-03-15 [2016-02-14]. (原始內容存檔於2021-02-26). 

外部連結