1. 程式人生 > >NFS(Network File System)的有關知識

NFS(Network File System)的有關知識

NFS 是Network File System的縮寫,即網路檔案系統。一種使用於分散式檔案系統的協定,由Sun公司開發,於1984年向外公佈。功能是通過網路讓不同的機器、不同的作業系統能夠彼此分享個別的資料,讓應用程式在客戶端通過網路訪問位於伺服器磁碟中的資料,是在類Unix系統間實現磁碟檔案共享的一種方法。

  NFS 的基本原則是“容許不同的客戶端及服務端通過一組RPC分享相同的檔案系統”,它是獨立於作業系統,容許不同硬體及作業系統的系統共同進行檔案的分享。

  NFS在檔案傳送或資訊傳送過程中依賴於RPC協議。RPC,遠端過程呼叫 (Remote Procedure Call) 是能使客戶端執行其他系統中程式的一種機制。NFS本身是沒有提供資訊傳輸的協議和功能的,但NFS卻能讓我們通過網路進行資料的分享,這是因為NFS使用了一些其它的傳輸協議。而這些傳輸協議用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程式。或者說NFS也是一個RPC SERVER。所以只要用到NFS的地方都要啟動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應。可以這麼理解RPC和NFS的關係:NFS是一個檔案系統,而RPC是負責負責資訊的傳輸。

其中,NFS伺服器設定好了分享出來的/home/shares(可以是其他目錄)這個目錄後,其他的客戶端就可以將這個目錄掛載到自己系統上的/mnt/nfs掛載點(掛載點可以自定),只要在PC1系統中進入/mnt/nfs目錄內,就可以看到NFS伺服器系統內的/home/shares目錄下的所有資料(要有相應的許可權),/home/shares就好像自己PC中的一個分割槽(但不佔用磁碟空間)。使用者可以使用cp、cd、 mv、rm等磁碟或檔案相關的指令進行操作。雖然NFS有屬於自己的協議和埠號,但是在傳送資料或其他相關資訊時,NFS使用的是遠端過程呼叫(Remote Procedure Call,RPC)協議來協助NFS本身的運作。RPC即遠端程序呼叫。當使用某些服務來進行遠端聯機的時候,主機的IP地址、服務的埠號及對應到的服務PID等資訊都需要管理與對應,管理埠的對應與服務相關性的工作就是RPC的任務。

NFS本身的服務並沒有提供資料傳遞的協議,因此,NFS使用RPC來實現網路傳輸功能。NFS本身就是一個使用RPC的程式,換句話說,NFS是RPC伺服器。當然,不但執行NFS的伺服器需要啟動RPC的服務,要掛載NFS檔案系統的客戶端,也需要同步啟動RPC,這樣伺服器端與客戶端才能由RPC的協議程序序埠的對應,Linux系統預設時啟動這一服務。

NFS的安裝是非常簡單的,只需要兩個軟體包即可,而且在通常情況下,是作為系統的預設包安裝的。

nfs-utils-* :包括基本的NFS命令與監控程式 portmap-* :支援安全NFS RPC服務的連線 1、包的安裝

yum install -y portmap yum install -y nfs-utils

通過yum或者rpm安裝完portmap後,發現執行命令service portmap start時報如下錯誤:portmap: unrecognized service。 CentOS6(Linux Kernel 2.6.32)中,portmap已經被rpcbind代替了,仔細檢視安裝資訊就會發現,執行命令yum install portmap時安裝的就是rpcbind。

安裝好之後然後就是修改配置檔案

伺服器端配置檔案/etc/exports:指定要共享的目錄及許可權,例如: /home/work 192.168.11.*(rw,sync,root_squash) /home 192.168.1.105 (rw,sync) /public * (rw,sync)

配置檔案每行分為兩段:第一段為共享的目錄,使用絕對路徑,第二段為客戶端地址及許可權。 地址可以使用完整IP或網段,例如10.0.0.8或10.0.0.0/24,10.0.0.0/255.255.255.0當然也可以地址可以使用主機名,DNS解析的和本地/etc/hosts解析的都行,支援萬用字元,例如:*.chengyongxu.com

許可權有: rw:read-write,可讀寫; 注意,僅僅這裡設定成讀寫客戶端還是不能正常寫入,還要正確地設定共享目錄的許可權,參考問題7 ro:read-only,只讀; sync:檔案同時寫入硬碟和記憶體; async:檔案暫存於記憶體,而不是直接寫入記憶體; no_root_squash:NFS客戶端連線服務端時如果使用的是root的話,那麼對服務端分享的目錄來說,也擁有root許可權。顯然開啟這項是不安全的。 root_squash:NFS客戶端連線服務端時如果使用的是root的話,那麼對服務端分享的目錄來說,擁有匿名使用者許可權,通常他將使用nobody或nfsnobody身份; all_squash:不論NFS客戶端連線服務端時使用什麼使用者,對服務端分享的目錄來說都是擁有匿名使用者許可權; anonuid:匿名使用者的UID值,通常是nobody或nfsnobody,可以在此處自行設定; anongid:匿名使用者的GID值。 我用的是: vi /etc/exports /home 192.168.11.*(rw)

2、設定NFS伺服器的自動啟動狀態

對於實際的應用系統,每次啟動LINUX系統後都手工啟動nfs伺服器是不現實的,需要設定系統在指定的執行級別自動啟動portmap和nfs服務。

chkconfig –list portmap

chkconfig –list nfs

3、設定portmap和nfs服務在系統執行級別3和5自動啟動。

chkconfig –level 35 portmap on

chkconfig –level 35 nfs on

NFS系統守護程序

nfsd:它是基本的NFS守護程序,主要功能是管理客戶端是否能夠登入伺服器; mountd:它是RPC安裝守護程序,主要功能是管理NFS的檔案系統。當客戶端順利通過nfsd登入NFS伺服器後,在使用NFS服務所提供的檔案前,還必須通過檔案使用許可權的驗證。它會讀取NFS的配置檔案/etc/exports來對比客戶端許可權。 portmap:主要功能是進行埠對映工作。當客戶端嘗試連線並使用RPC伺服器提供的服務(如NFS服務)時,portmap會將所管理的與服務對應的埠提供給客戶端,從而使客戶可以通過該埠向伺服器請求服務。 NFS伺服器的啟動與停止

在對exports檔案進行了正確的配置後,就可以啟動NFS伺服器了。

service rpcbind start service nfs start 重啟portmap 和nfs 服務 service portmap restart service nfs restart exportfs 這樣一來,NFS伺服器就搭建好了,如果需要一個客戶端來共享他的目錄,需要在客戶端執行這樣的命令:

mount 192.168.11.210:/home/wow /mnt/wow/config

就相當於把192.168.11.210(NFS伺服器)的/home/wow掛載到 /mnt/wow/config目錄上,實現了檔案共享

其中,NFS伺服器設定好了分享出來的/home/shares(可以是其他目錄)這個目錄後,其他的客戶端就可以將這個目錄掛載到自己系統上的/mnt/nfs掛載點(掛載點可以自定),只要在PC1系統中進入/mnt/nfs目錄內,就可以看到NFS伺服器系統內的/home/shares目錄下的所有資料(要有相應的許可權),/home/shares就好像自己PC中的一個分割槽(但不佔用磁碟空間)。使用者可以使用cp、cd、 mv、rm等磁碟或檔案相關的指令進行操作。雖然NFS有屬於自己的協議和埠號,但是在傳送資料或其他相關資訊時,NFS使用的是遠端過程呼叫(Remote Procedure Call,RPC)協議來協助NFS本身的運作。