首頁  >  文章  >  系統教程  >  初步認識Linux下的NFS服務

初步認識Linux下的NFS服務

王林
王林轉載
2024-01-23 17:18:051111瀏覽

Linux NFS服务的初步了解

#RPC簡介

1)服務消費方(client)呼叫以本機呼叫方式呼叫服務;

2)client stub接收到呼叫後負責將方法、參數等組裝成能夠進行網路傳輸的訊息體;

3)client stub找到服務位址,並將訊息傳送到服務端;

4)server stub收到訊息後進行解碼;

5)server stub根據解碼結果呼叫本地的服務;

6)本機服務執行並將結果傳回給server stub;

7)server stub將回傳結果打包成訊息並傳送至消費方;

8)client stub接收到訊息,並進行解碼;

9)服務消費方得到最終結果。

NFS簡介

NFS(Network File System)即網路檔案系統,是FreeBSD支援的檔案系統中的一種,它允許網路中的電腦之間透過TCP/IP網路共享資源。在NFS的應用程式中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS伺服器上的文件,就像存取本機檔案一樣。
目前NFS主要有兩個版本(NFSv2,NFSv3)兩個版本,而NFSv2和NFSv3除了3版本支援更多的新特性以外,最主要的區別應該是NFSv2是使用UDP協定進行傳輸的,所以NFSv2的連接在複雜網路環境下可能沒有那麼可靠,而NFSv3同時支援UDP和TCP協定。

剛剛看了一下,Centos7已經支援NFSv4協定了,這裡就不貼NFSv4了,有時間了再去看v4吧。

當client端要掛載NFS共享卷的時候,會發送RPC請求給服務端,而NFS服務端會在用戶驗證後將一個隨機的cookie傳送至客戶端,以便客戶端使用這個cookie來認證那些要存取的共享卷。

NFS的驗證支援內建的IP/主機權限分配,同時也被tcp wrappers所限制。

Redhat上的NFS服務

Redhat核心中預設就開啟了NFS支持,並且透過NFS的Daemon來控制NFS服務端的啟動,而負責將網路套接字和RPC呼叫綁定起來,還需要一個rpcbind服務(在redhat5中名為portmap),如果你在系統中找不到nfs服務,是因為沒有安裝nfs-utils這個包,這個包提供了一些工具和服務腳本等。

整個NFS服務大概包含以下幾個(抄自紅帽官方文檔,但有點老了好像):

  • nfs — 啟動回應的RPC程序來回應NFS
  • nfslock — 這是一個可選的服務,用來回應客戶端對檔案加鎖的請求。
  • rpcbind(portmap) — 這個是rpc服務的守護進程,用來建立連線並且回應rpc請求。

NFS服務提供了這幾個RPC呼叫(函數):

  • rpc.mountd — 這個函數用來回應客戶端的mount請求並且驗證所要求的檔案系統是否有權可用,這個程序由nfs服務來啟動。
  • rpc.nfsd — nfs服務的主程式(函數)。
  • rpc.lockd — 上面nfslock這個服務的主要呼叫(函數),主要用來回應客戶的檔案加鎖請求。
  • rpc.statd — 這個呼叫(函數)主要是用來當nfs server重啟或不正常關閉時通知client的,由nfslock服務啟用。
  • rpc.rquotad — nfs服務用於支援配額的呼叫(函數)。
配置NFS服務

NFS的設定檔在/etc/exports
預設是一個空文件,只需要按照如下格式配置即可,一行一個共享卷

host:限定主機(網域)
1.單一主機或IP
2.通配符*(匹配任意字元)或?(符合任意單一字元),用在網域名稱或主機名稱中
3.IP/MASK,例如 192.168.110.0/24

options:掛載選項,用於限定前面主機的掛載權限。
常用選項:

  • ro,rw:只讀或可讀寫
  • sync:同步,當client的寫入請求完成後,立即將記憶體中的資料寫入到磁碟,並且這樣做是安全的。
  • async:異步,當client的寫入請求完成後,server不是立即將資料寫入磁碟,而是在某個時機(空閒或….鬼知道)寫入到磁碟,這就造成了資料遺失的可能性。
  • wdelay(write delay):寫入延遲,這是一個最佳化選項,允許伺服器延遲將資料寫入磁碟,這樣如果第二次client的寫入請求到來,將兩次資料使用一次write系統呼叫寫入到磁碟。
  • nowdelay:與上相反,僅在sync模式下可使用。
  • root_squash:「壓扁」root,因為client將文件寫入到server時,是使用client寫入用戶的uid直接映射為server同uid的用戶,這樣root用戶存放到nfs share volume上的文件,在server端屬主和屬群組還是root,有一定的安全隱患,所以可用此選項將root壓扁為nfsnobody使用者。
  • all_squash:壓扁所有用戶,可使用anonuid=,anongid=來指定壓扁為哪個用戶。

以上是初步認識Linux下的NFS服務的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:linuxprobe.com。如有侵權,請聯絡admin@php.cn刪除