NFS各個版本之間的比較
NFS是一種網路檔案系統,從1985年推出至今,共釋出了3個版本:NFSv2、NFSv3、NFSv4,NFSv4包含兩個次版本NFSv4.0和NFSv4.1。經過20多年發展,NFS發生了非常大的變化,最大的變化就是推動者從Sun變成了NetApp,NFSv2和NFSv3基本上是Sun起草的,NetApp從NFSv4.0參與進來,並且主導了NFSv4.1標準的制定過程,而Sun已經被Oracle收購了。
編號 | 版本 | RFC | 時間 | 頁數 |
1 | NFSv2 | rfc1094 | 1989年3月 | 27頁 |
2 | NFSv3 | rfc1813 | 1995年6月 | 126頁 |
3 | NFSv4.0 | rfc3530 | 2003年4月 |
275頁 |
4 | NFSv4.1 | rfc5661 | 2010年1月 | 617頁 |
1. NFSv2
NFSv2是第一個以RFC形式釋出的版本,實現了基本的功能。
2. NFSv3
NFSv3是1995年釋出的,這時NFSv2已經發布了6年了,NFSv3修正了NFSv2的一些bug。兩者有如下一些差別,但是感覺沒有本質的差別。
(1) NFSv2對每次讀寫操作中傳輸資料的最大長度進行了限制,上限值為8192位元組,NFSv3取消了這個限制。
(2) NFSv3對檔名稱長度進行了限制,上限值為255位元組,NFSv3取消了這個限制。
(3) NFSv2對檔案長度進行了限制,上限值為0x7FFFFFFF,NFSv3取消了這個限制。
(4) NFSv2中檔案控制代碼長度固定為32位元組,NFSv3中檔案控制代碼長度可變,上限值是64位元組。
(5) NFSv2只支援同步寫,如果客戶端向伺服器端寫入資料,伺服器必須將資料寫入磁碟中才能傳送應答訊息。NFSv3支援非同步寫操作,伺服器只需要將資料寫入快取中就可以傳送應答資訊了。NFSv3增加了COMMIT請求,COMMIT請求可以將伺服器快取中的資料重新整理到磁碟中。
(6) NFSv3增加了ACCESS請求,ACCESS用來檢查使用者的訪問許可權。因為伺服器端可能進行uid對映,因此客戶端的uid和gid不能正確反映使用者的訪問許可權。NFSv2的處理方法是不管訪問許可權,直接返送請求,如果沒有訪問許可權就出錯。NFSv3中增加了ACCESS請求,客戶端可以檢查是否有訪問許可權。
(7) 一些請求調整了引數和返回資訊,畢竟NFSv3和NFSv2釋出的間隔有6年,經過長期執行可能覺得NFSv2某些請求引數和返回資訊需要改進。
3. NFSv4.0
相比NFSv3,NFSv4發生了比較大的變化,最大的變化是NFSv4有狀態了。NFSv2和NFSv3都是無狀態協議,服務區端不需要維護客戶端的狀態資訊。無狀態協議的一個優點在於災難恢復,當伺服器出現問題後,客戶端只需要重複傳送失敗請求就可以了,直到收到伺服器的響應資訊。但是某些操作必須需要狀態,如檔案鎖。如果客戶端申請了檔案鎖,但是伺服器重啟了,由於NFSv3無狀態,客戶端再執行鎖操作可能就會出錯了。NFSv3需要NLM協助才能實現檔案鎖功能,但是有的時候兩者配合不夠協調。NFSv4設計成了一種有狀態的協議,自身實現了檔案鎖功能,就不需要NLM協議了。NFSv4和NFSv3的差別如下:
(1) NFSv4設計成了一種有狀態的協議,自身實現了檔案鎖功能和獲取檔案系統根節點功能,不需要NLM和MOUNT協議協助了。
(2) NFSv4增加了安全性,支援RPCSEC-GSS身份認證。
(3) NFSv4只提供了兩個請求NULL和COMPOUND,所有的操作都整合進了COMPOUND中,客戶端可以根據實際請求將多個操作封裝到一個COMPOUND請求中,增加了靈活性。
(4) NFSv4檔案系統的命令空間發生了變化,伺服器端必須設定一個根檔案系統(fsid=0),其他檔案系統掛載在根檔案系統上匯出。
(5) NFSv4支援delegation。由於多個客戶端可以掛載同一個檔案系統,為了保持檔案同步,NFSv3中客戶端需要經常向伺服器發起請求,請求檔案屬性資訊,判斷其他客戶端是否修改了檔案。如果檔案系統是隻讀的,或者客戶端對檔案的修改不頻繁,頻繁向伺服器請求檔案屬性資訊會降低系統性能。NFSv4可以依靠delegation實現檔案同步。當客戶端A開啟一個檔案時,伺服器會分配給客戶端A一個delegation。只要客戶端A具有delegation,就可以認為與伺服器保持了一致。如果另外一個客戶端B訪問同一個檔案,則伺服器會暫緩客戶端B的訪問請求,向客戶端A傳送RECALL請求。當客戶端A接收到RECALL請求時將本地快取重新整理到伺服器中,然後將delegation返回伺服器,這時伺服器開始處理客戶端B的請求。
(6) NFSv4修改了檔案屬性的表示方法。由於NFS是Sun開發的一套檔案系統,設計之出NFS檔案屬性參考了UNIX中的檔案屬性,可能Windows中不具備某些屬性,因此NFS對作業系統的相容性不太好。NFSv4將檔案屬性劃分成了三類:
Mandatory Attributes: 這是檔案的基本屬性,所有的作業系統必須支援這些屬性。
Recommended Attributes: 這是NFS建議的屬性,如果可能作業系統儘量實現這些屬性。
Named Attributes: 這是作業系統可以自己實現的一些檔案屬性。
4. NFSv4.1
與NFSv4.0相比,NFSv4.1最大的變化是支援並行儲存了。在以前的協議中,客戶端直接與伺服器連線,客戶端直接將資料傳輸到伺服器中。當客戶端數量較少時這種方式沒有問題,但是如果大量的客戶端要訪問資料時,NFS伺服器很快就會成為一個瓶頸,抑制了系統的效能。NFSv4.1支援並行儲存,伺服器由一臺元資料伺服器(MDS)和多臺資料伺服器(DS)構成,元資料伺服器只管理檔案在磁碟中的佈局,資料傳輸在客戶端和資料伺服器之間直接進行。由於系統中包含多臺資料伺服器,因此資料可以以並行方式訪問,系統吞吐量迅速提升。