標籤:nfs rpc
NFS(網路檔案系統)
NFS原理簡介
NFS是一個網路檔案系統,它主要的功能就是將遠程主機上的某一個目錄(或者檔案系統)掛載在本地主機上,因此,對於本地用戶端來說,這個目錄就好像是自己主機上面的一個檔案系統或者分區一樣。這樣,本地用戶端訪問這個目錄時,實際訪問的就是遠程主機的這個目錄。但是對於用戶端來說,這個過程是透明的。由於NFS服務支援的功能很多,且不同的功能需要不同的程式來完成,因此,這樣每一個程式都需要一個特定的連接埠來負責響應和傳輸資料。而且這些連接埠都是隨機產生的,且小於1024。由於啟動服務的連接埠不固定,因此NFS用戶端要想和伺服器端建立串連則會非常的困難。因此,在這個過程中需要藉助RPC協議來完成建立串連過程。
什麼是RPC?
RPC全稱Remote Procedure Call,遠端程序呼叫。它工作在TCP和UDP的111連接埠上。它主要的功能就是記錄了NFS各個服務所對應的連接埠號碼,並且將這些連接埠號碼返回給RPC用戶端。這些連接埠號碼都是在NFS啟動之後,NFS的各個服務向RPC伺服器註冊的。且這些連接埠號碼都是NFS服務隨機產生的。由於RPC是一個C/S 架構,因此RPC有用戶端和伺服器端,且本地用戶端和NFS伺服器端建立串連的過程就是靠RPC的用戶端和伺服器端來完成的。
RPC的伺服器端軟體--portmap
RPC的伺服器端軟體叫做portmap,Portmap是一個Server,用於實現對應程式號和版本號碼至連接埠號碼,以便遠程主機對其進行調用。Portmap自身監聽在111連接埠,因此,所有的調用者可通過此連接埠向Portmap詢問其期望通訊的程式所監聽的連接埠。但Portmap僅知悉當前主機的RPC。
啟動時,每個RPC程式必須向Portmap進行註冊,而在關閉時需要進行登出。
正常情況下,調用者首先與Portmap通訊以擷取其期望通訊的遠程程式所監聽的連接埠,然後通過擷取到的連接埠向對應的遠程程式發送報文。
因此,本地用戶端和NFS伺服器的串連過程和傳輸串流程應該是這樣的:
650) this.width=650;" title="nfs.png" alt="wKiom1RLsf6BwPCPAAFHyt5W8mw936.jpg" src="http://s3.51cto.com/wyfs02/M00/4D/1D/wKiom1RLsf6BwPCPAAFHyt5W8mw936.jpg" />
1、本地用戶端將讀取資料(或者寫入資料)的請求交個核心處理,因為跟硬體打交道的只有核心。核心在將該請求交給RPC client(這裡並不是叫做RPC client,只是方便大家理解,就叫做RPC client吧)。
2、RPC client在與portmap的TCP和UDP的111連接埠建立串連,詢問NFS的服務所對應的連接埠
3、portmap將NFS所對應的連接埠返回給RPC client端
4、RPC client端在與剛剛得知的NFS服務連接埠建立串連,這樣NFS伺服器就可以接受本地用戶端的請求,再交給核心處理,再由核心在硬碟上面擷取相應的資料,按照原路返回給本地用戶端。
這樣,一個完成的資料轉送流程就完成了。
NFS伺服器的安裝
安裝一個NFS伺服器,只需要安裝nfs-utils這個軟體即可。安裝這軟體後,會產生許多的檔案,在這裡,我只介紹幾個比較重要和常見的檔案:
/etc/rc.d/init.d/nfs:這是nfs的服務指令碼,該指令碼的主要功能是管理用戶端是否能夠使用伺服器檔案系統掛載資訊以及管理檔案系統等功能。
/etc/rc.d/init.d/nfslock:這個指令碼是用來鎖定某個檔案的,以防止多個使用者同時修改某一個檔案,造成系統混亂。
/etc/sysconfig/nfs:這個檔案主要記錄了NFS服務啟動之後向rpc註冊的連接埠資訊及一些參數資訊。如果想讓NFS的其他服務的連接埠固定使用某一個連接埠,就可以修改這個檔案中的參數。
/etc/exportfs:NFS的主設定檔,該檔案規定了哪些目錄可以被那些用戶端訪問,且訪問時具有哪些訪問特性。
/usr/sbin/exportfs:這個是維護NFS資源的一個命令,該命令可以重新掛載某些目錄和卸載某些目錄等功能。這是伺服器端命令
/usr/sbin/showmount:這也是一個NFS系統命令,用來查看NFS掛載出來的某些目錄資源。
exportfs和showmount命令的用法
exportfs
-a:跟-r和-u一起使用,用來重新掛載所有檔案系統和取消掛載所有檔案系統(或目錄)
-r:重新掛載
-u:取消掛載
-v:顯示詳細資料
showmount
-e NFS_SERVER:查看NFS伺服器已掛載的目錄或者檔案系統
-a NFS_SERVER:查看NFS伺服器掛載的所有的目錄或者檔案系統和掛載的用戶端的對應關係列表
-d NFS_SERVER:顯示NFS伺服器所有的目錄(或檔案系統)被用戶端掛載的目錄(或檔案系統)列表
NFS的設定檔
/etc/exportfs這個檔案裡面定義了哪些目錄(或檔案系統)可以被哪些用戶端主機訪問,且具有哪些訪問特性。檔案格式為:
目錄或檔案系統 遠程主機(訪問特性)
說明:每個用戶端(及遠程主機)後面必須跟一個小括弧,裡面定義了此客戶訪問特性,如存取權限等。多個客戶之間使用空白字元分隔。
例如:
/tmp 192.168.100.0/24(ro) localhost(rw)
這一行的意思是說NFS伺服器上的/tmp可以被192.168.100.0/24這個網段內的主機訪問,且許可權為唯讀。也可以被本地訪問,且許可權為讀寫權限。
其中這些訪問特性有:
ro:對掛載的目錄具有可讀許可權
rw:對掛載出來的目錄具有讀寫權限
sync:表示以同步方式將資料寫入到記憶體和硬碟中去
nosync:表示以非同步方式先將資料寫入到記憶體中,然後再將資料寫入到硬碟中去。
root_squash:用戶端使用 NFS 檔案系統的帳號若為 root 時,則將身份由root轉換成nfsnobody身份來登入。nfsnobody的許可權最小,可以用來保障系統安全。
no_root_squash:表示不對root帳號做轉換,允許root帳號登入系統
all_squash:表示不論nfs帳號是什麼,都轉換成匿名使用者(nobody)的帳號來登入
anonuid:表示設定匿名使用者(即nobody)的uid,這個uid必須在/etc/passwd檔案中存在
anongid:設定匿名使用者gid,這個gid也必須在/etc/group檔案中存在
本文出自 “linux學習之路” 部落格,請務必保留此出處http://xslwahaha.blog.51cto.com/4738972/1568026
網路檔案服務--NFS