NFS原理

一、什麼是NFS

NFS是分佈式計算機系統的一個組成部分,可實現在異構網絡上共享和裝配遠程文件系統。

NFS的全稱是Network File System,即網絡文件系統。它使一臺電腦可以通過網絡訪問另外一臺電腦上的共享,使用起來就如同本地文件系統一樣方便。比如我們在大學裏共享過一整個文件系統,過幾天就有校友在上面放了很多小電影,還經常更新。可見共享不僅是奉獻,有時候還有收穫,感謝共享協議的開發者們!


二、爲何要使用NFS

NFS的目標是使計算機共享資源,在其發展過程中(即20世紀80年代),計算機工業飛速發展,廉價CPU及客戶端/服務器技術促進了分佈式計算環境的發展。然而當處理器價格下降時,大容量的存儲系統相對而言價格仍居高不下。因此必須採用某種機制在充分發揮單個處理器性能的同時使計算機可共享存儲資源和數據,於是NFS應運而生。


三、NFS協議

使用NFS,客戶端可以透明地訪問服務器中的文件系統,這不同於提供文件傳輸的FTP協議。FTP會產生文件一個完整的副本;NFS只訪問一個進程引用文件部分,並且一個目的就是使得這種訪問透明。這就意味着任何能夠訪問一個本地文件的客戶端程序不需要做任何修改,就應該能夠訪問一個NFS文件。


NFS是一個使用SunRPC構造的客戶端/服務器應用程序,其客戶端通過向一臺NFS服務器發送RPC請求來訪問其中的文件。儘管這一工作可以使用一般的用戶進程來實現,即NFS客戶端可以是一個用戶進程,對服務器進行顯式調用,而服務器也可以是一個用戶進程。因爲兩個理由,NFS一般不這樣實現。首先訪問一個NFS文件必須對客戶端透明,因此NFS的客戶端調用是由客戶端操作系統代表用戶進程來完成的;其次,出於效率的考慮,NFS服務器在服務器操作系統中實現。如果NFS服務器是一個用戶進程,每個客戶端請求和服務器應答(包括讀和寫的數據)將不得不在內核和用戶進程之間進行切換,這個代價太大。結構如下圖:

153752412.jpg


(1)訪問一個本地文件還是一個NFS文件對於客戶端來說是透明的,當文件被打開時,由內核決定這一點。文件被打開之後,內核將本地文件的所有引用傳遞給名爲"本地文件訪問"的框中,而將一個NFS文件的所有引用傳遞給名爲"NFS客戶端"的框中。


(2)NFS客戶端通過其TCP/IP模塊向NFS服務器發送RPC請求,NFS主要使用UDP,最新的實現也可以使用TCP。


(3)NFS服務器在端口2049接收作爲UDP數據包的客戶端請求,儘管NFS可以被實現爲使用端口映射器,允許服務器使用一個臨時端口,但是大多數實現都是直接指定UDP端口2049。


(4)當NFS服務器收到一個客戶端請求時,它將這個請求傳遞給本地文件訪問例程,然後訪問服務器主機上的一個本地的磁盤文件。


(5)NFS服務器需要花一定的時間來處理一個客戶端的請求,訪問本地文件系統一般也需要一部分時間。在這段時間間隔內,服務器不應該阻止其他客戶端請求。爲了實現這一功能,大多數的NFS服務器都是多線程的--服務器的內核中實際上有多個NFS服務器在NFS本身的加鎖管理程序中運行,具體實現依賴於不同的操作系統。既然大多數UNIX內核不是多線程的,一個共同的技術就是啓動一個用戶進程(常被稱爲"nfsd")的多個實例。這個實例執行一個系統調用,使其作爲一個內核進程保留在操作系統的內核中。


(6)在客戶端主機上,NFS客戶端需要花一定的時間來處理一個用戶進程的請求。NFS客戶端向服務器主機發出一個RPC調用,然後等待服務器的應答。爲了給使用NFS的客戶端主機上的用戶進程提供更多的併發性,在客戶端內核中一般運行着多個NFS客戶端,同樣具體實現也依賴於操作系統。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章