網路檔案系統

網路檔案系統

網路檔案系統,英文Network File System(NFS)。是由SUN公司研製的UNIX表示層協定(pressentation layer protocol),能使使用者訪問網路上別處的檔案就像在使用自己的計算機一樣。

基本介紹

定義,特點,演化,

定義

NFS是基於UDP/IP協定的套用,其實現主要是採用遠程過程調用RPC機制,RPC提供了一組與機器、作業系統以及低層傳送協定無關的存取遠程檔案的操作。RPC採用了XDR的支持。XDR是一種與機器無關的數據描述編碼的協定,他以獨立與任意機器體系結構的格式對網上傳送的數據進行編碼和解碼,支持在異構系統之間數據的傳送。

特點

① 提供透明檔案訪問以及檔案傳輸;
② 容易擴充新的資源或軟體,不需要改變現有的工作環境;
③ 高性能,可靈活配置。

演化

網路檔案系統(NFS)是檔案系統之上的一個網路抽象,來允許遠程客戶端以與本地檔案系統類似的方式,來通過網路進行訪問。雖然 NFS 不是第一個此類系統,但是它已經發展並演變成 UNIX系統中最強大最廣泛使用的網路檔案系統。NFS 允許在多個用戶之間共享公共檔案系統,並提供數據集中的優勢,來最小化所需的存儲空間。
網路檔案系統(NFS)從1984 年問世以來持續演變,並已成為分散式檔案系統的基礎。當前,NFS(通過 pNFS 擴展)通過網路對分布的檔案提供可擴展的訪問。探索分散式檔案系背後的理念,特別是,最近 NFS 檔案進展。
NFS 的簡短歷史
第一個網路檔案系統 — 稱為 File Access Listener — 由 Digital Equipment Corporation(DEC)在 1976 年開發。Data Access Protocol(DAP)的實施,這是 DECnet 協定集的一部分。比如 TCP/IP,DEC 為其網路協定發布了協定規範,包括 DAP。
NFS 是第一個現代網路檔案系統(構建於 IP 協定之上)。在 20 世紀 80 年代,它首先作為實驗檔案系統,由 Sun Microsystems 在內部完成開發。NFS 協定已歸檔為 Request for Comments(RFC)標準,並演化為大家熟知的 NFSv2。作為一個標準,由於 NFS 與其他客戶端和伺服器的互操作能力而發展快速。
標準持續地演化為 NFSv3,在 RFC 1813 中有定義。這一新的協定比以前的版本具有更好的可擴展性,支持大檔案(超過 2GB),異步寫入,以及將 TCP 作為傳輸協定,為檔案系統在更廣泛的網路中使用鋪平了道路。在 2000 年,RFC 3010(由 RFC 3530 修訂)將 NFS 帶入企業設定。Sun 引入了具有較高安全性,帶有狀態協定的 NFSv4(NFS 之前的版本都是無狀態的)。今天,NFS 是版本 4.1(由 RFC 5661 定義),它增加了對跨越分散式伺服器的並行訪問的支持(稱為 pNFS extension)。
令人驚訝的是,NFS 已經歷了幾乎 30 年的開發。它代表了一個非常穩定的(及可移植)網路檔案系統,它可擴展、高性能、並達到企業級質量。由於網路速度的增加和延遲的降低,NFS 一直是通過網路提供檔案系統服務具有吸引力的選擇。甚至在本地網路設定中,虛擬化驅動存儲進入網路,來支持更多的移動虛擬機。NFS 甚至支持最新的計算模型,來最佳化虛擬的基礎設施。
NFS 架構
NFS 允許計算的客戶 — 伺服器模型(見圖 2)。伺服器實施已分享檔案系統,以及客戶端所連線的存儲。客戶端實施用戶接口來已分享檔案系統,並載入到本地檔案空間當中。
在 Linux中,虛擬檔案系統交換(VFS)提供在一個主機上支持多個並發檔案系統的方法(比如 CD-ROM 上的 International Organization for Standardization [ISO] 9660,以及本地硬碟上的 ext3fs)。VFS 確定需求傾向於哪個存儲,然後使用哪些檔案系統來滿足需求。由於這一原因,NFS 是與其他檔案系統類似的可插拔檔案系統。對於 NFS 來說,唯一的區別是輸入/輸出(I/O)需求無法在本地滿足,而是需要跨越網路來完成。
一旦發現了為 NFS 指定的需求,VFS 會將其傳遞給核心中的 NFS 實例。NFS 解釋 I/O 請求並將其翻譯為 NFS 程式(OPEN、ACCESS、CREATE、READ、CLOSE、REMOVE 等等)。這些程式,歸檔在特定 NFS RFC 中,指定了 NFS 協定中的行為。一旦從 I/O 請求中選擇了程式,它會在遠程程式調用(RPC)層中執行。正如其名稱所暗示的,RPC 提供了在系統間執行程式調用的方法。它將封送 NFS 請求,並伴有參數,管理將它們傳送到合適的遠程對等級,然後管理並追蹤回響,提供給合適的請求者。
進一步來說,RPC 包括重要的互操作層,稱為外部數據表示(XDR),它確保當涉及到數據類型時,所有 NFS 參與者使用相同的語言。當給定架構執行請求時,數據類型表示可能不同於滿足需求的目標主機上的數據類型。XDR 負責將類型轉換為公共表示(XDR),便於所有架構能夠與已分享檔案系統互操作。XDR 指定類型位元組格式(比如 float)和類型的位元組排序(比如修復可變長數組)。雖然 XDR 以其在 NFS 中的使用而聞名,當您在公共應用程式設定中處理多個架構時,它是一個有用的規範。
一旦 XDR 將數據轉換為公共表示,需求就通過網路傳輸給出傳輸層協定。早期 NFS 採用 Universal Datagram Protocol(UDP),但是,今天 TCP 因為其優越的可靠性而更加通用。
在伺服器端,NFS 以相似的風格運行。需求到達網路協定棧,通過 RPC/XDR(將數據類型轉換為伺服器架構) 然後到達 NFS 伺服器。NFS 伺服器負責滿足需求。需求向上提交給 NFS 守護進程,它為需求標示出目標檔案系統樹,並且 VFS 再次用於在本地存儲中獲取檔案系統。整個流程在圖 3 中有展示。注意,伺服器中的本地檔案系統是典型的 Linux 檔案系統(比如 ext4fs)。因此,NFS 不是傳統意義上的檔案系統,而是訪問遠程檔案系統的協定。
對於高延遲網路,NFSv4 實現稱為 compound procedure 的程式。這一程式從本質上允許在單個請求中嵌入多個 RPC 調用,來最小化通過網路請求的 transfer tax。它還為回響實現回調模式。
NFS 協定
從客戶端的角度來說,NFS 中的第一個操作稱為 mount。Mount 代表將遠程檔案系統載入到本地檔案系統空間中。該流程以對 mount(Linux 系統調用)的調用開始,它通過 VFS 路由到 NFS 組件。確認了載入連線埠號之後(通過 get_port 請求對遠程伺服器 RPC 調用),客戶端執行 RPC mount 請求。這一請求發生在客戶端和負責 mount 協定(rpc.mountd)的特定守護進程之間。這一守護進程基於伺服器當前導出檔案系統來檢查客戶端請求;如果所請求的檔案系統存在,並且客戶端已經訪問了,一個 RPC mount 回響為檔案系統建立了檔案句柄。客戶端這邊存儲具有本地載入點的遠程載入信息,並建立執行 I/O 請求的能力。這一協定表示一個潛在的安全問題;因此,NFSv4 用內部 RPC 調用替換這一輔助 mount 協定,來管理載入點。
要讀取一個檔案,檔案必須首先被打開。在 RPC 內沒有 OPEN 程式;反之,客戶端僅檢查目錄和檔案是否存在於所載入的檔案系統中。客戶端以對目錄的 GETATTR RPC 請求開始,其結果是一個具有目錄屬性或者目錄不存在指示的回響。接下來,客戶端發出 LOOKUP RPC 請求來查看所請求的檔案是否存在。如果是,會為所請求的檔案發出 GETATTR RPC 請求,為檔案返回屬性。基於以上成功的 GETATTRs 和 LOOKUPs,客戶端創建檔案句柄,為用戶的未來需求而提供的。
利用在遠程檔案系統中指定的檔案,客戶端能夠觸發 READ RPC 請求。READ 包含檔案句柄、狀態、偏移、和讀取計數。客戶端採用狀態來確定操作是否可執行(那就是,檔案是否被鎖定)。偏移指出是否開始讀取,而計數指出所讀取位元組的數量。伺服器可能返回或不返回所請求位元組的數量,但是會指出在 READ RPC 回覆中所返回(隨著數據)位元組的數量。
NFS 中的創新
NFS 的兩個最新版本(4 和 4.1)對於 NFS 來說是最有趣和最重要的。讓我們來看一下 NFS 創新最重要的一些方面。
在 NFSv4 之前,存在一定數量的輔助協定用於載入、鎖定、和檔案管理中的其他元素。NFSv4 將這一流程簡化為一個協定,並將對 UDP 協定的支持作為傳輸協定移除。NFSv4 還集成支持 UNⅨ 和基於 Windows? 的檔案訪問語義,將本地集成 NFS 擴展到其他作業系統中。
NFSv4.1 介紹針對更高擴展性和更高性能的並行 NFS(pNFS)的概念。要支持更高的可擴展性,NFSv4.1 具有腳本,與集群化檔案系統風格類似的拆分數據/元數據架構。如 圖 4 所展示的,pNFS 將生態系統拆分為三個部分:客戶端、伺服器和存儲。您可看到存在兩個路徑:一個用於數據,另一個用於控制。pNFS 將數據布局與數據本身拆分,允許雙路徑架構。當客戶想要訪問檔案時,伺服器以布局回響。布局描述了檔案到存儲設備的映射。當客戶端具有布局時,它能夠直接訪問存儲,而不必通過伺服器(這實現了更大的靈活性和更優的性能)。當客戶端完成檔案操作時,它會提交數據(變更)和布局。如果需要,伺服器能夠請求從客戶端返回布局。
pNFS 實施多個新協定操作來支持這一行為。LayoutGet 和 LayoutReturn 分別從伺服器獲取發布和布局,而 LayoutCommit 將來自客戶端的數據提交到存儲庫,以便於其他用戶使用。伺服器採用 LayoutRecall 從客戶端回調布局。布局跨多個存儲設備展開,來支持並行訪問和更高的性能。
數據和元數據都存儲在存儲區域中。客戶端可能執行直接 I/O ,給出布局的回執,而 NFSv4.1 伺服器處理元數據管理和存儲。雖然這一行為不一定是新的,pNFS 增加功能來支持對存儲的多訪問方法。當前,pNFS 支持採用基於塊的協定(光纖通道),基於對象的協定,和 NFS 本身(甚至以非 pNFS 形式)。
通過 2010 年 9 月發布的對 NFSv2 的請求,繼續開展 NFS 工作。其中以新的提升定位了虛擬環境中存儲的變化。例如,數據複製與在虛擬機環境中非常類似(很多作業系統讀取/寫入和快取相同的數據)。由於這一原因,存儲系統從整體上理解複製發生在哪裡是很可取的。這將在客戶端保留快取空間,並在存儲端保存容量。NFSv4.2 建議用共享塊來處理這一問題。因為存儲系統已經開始在後端集成處理功能,所以伺服器端複製被引入,當伺服器可以高效地在存儲後端自己解決數據複製時,就能減輕內部存儲網路的負荷。其他創新出現了,包括針對 flash 存儲的子檔案快取,以及針對 I/O 的客戶端提示 (潛在地採用 mapadvise 作為路徑)。
NFS 的替代物
雖然 NFS 是在 UNⅨ 和 Linux 系統中最流行的網路檔案系統,但它當然不是唯一的選擇。在 Windows? 系統中,ServerMessage Block [SMB](也稱為 CIFS)是最廣泛使用的選項(如同 Linux 支持 SMB一樣,Windows 也支持 NFS)。
最新的分散式檔案系統之一,在 Linux 中也支持,是 Ceph。Ceph 設計為容錯的分散式檔案系統,它具有 UNⅨ 兼容的 Portable Operating System Interface(POSⅨ)。您可在 參考資料 中深入了解 Ceph。
其他例子包括 OpenAFS,是 Andrew 分散式檔案系統的開源版(來自 Carnegie Mellon 和 IBM),GlusterFS,關注於可擴展存儲的通用分散式檔案系統,以及 Lustre,關注於集群計算的大規模並行分散式檔案系統。所有都是用於分散式存儲的開源軟體解決方案。
更進一步
NFS 持續演變,並與 Linux 的演變類似(支持低端、嵌入式、和高端性能),NFS 為客戶和企業實施可擴展存儲解決方案。關注 NFS 的未來可能會很有趣,但是根據歷史和近期的情況看,它將會改變人們查看和使用檔案存儲的方法。

相關詞條

熱門詞條

聯絡我們