nfs(networkfilesystem),網絡檔案系統,基于rpc實作在遠端主機上完成讀寫功能,nfs服務端功能由kernel中提供,是以隻能在linux、unix中使用,另外隻能根據ip位址限制使用者通路。
rpc (remote procedure call),實作兩個遠端主機之間功能函數的調用、參數傳遞功能。在linux中一些通用功能都被做成庫,本地的應用程式需要使用這些功能時,直接調用即可,這就叫本地調用;本地所需要的庫(功能函數)在遠端主機上,這時候就可以使用rpc協定将調用請求、參數封裝成封包在網絡上傳輸,并且服務端能了解之後将調用請求在本地執行傳回結果,這稱為遠端過程調用。很多服務都會基于rpc完成某些功能, 例如nfs服務就基于rpc調用遠端 主機上的open() ,read(),write(),close()…等函數将執行結果傳回本地,完成檔案共享功能。
工作原理:
1.服務端啟動時将nfs功能(nfs daemons)像rpc進行注冊端口。
2.用戶端通過rpc連接配接伺服器擷取nfs daemon注冊的端口。
3.用戶端連與nfs daemon進行聯機,mountd對使用者進行認證,nfs提供檔案共享服務功能。
注意:rpc(tcp/111,udp/111),nfs(tcp/2049,udp/2049) 使用的都是知名端口,但mountd并不是知名服務,用戶端不知道mountd在哪,不知道如何去認證,而nfs必須要mountd認證通過傳回令牌才能提供服務,是以nfs在啟動時需要向rpc注冊使用随機端口,這樣用戶端直接找rpc即可.
[root@el6 ~]# rpcinfo -p 127.0.0.1
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 57168 status
100024 1 tcp 57017 status
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
100005 1 udp 40548 mountd
100005 1 tcp 60166 mountd
100005 2 udp 46629 mountd
100005 2 tcp 39141 mountd
100005 3 udp 48524 mountd
100005 3 tcp 50953 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 48054 nlockmgr
100021 3 udp 48054 nlockmgr
100021 4 udp 48054 nlockmgr
100021 1 tcp 43004 nlockmgr
100021 3 tcp 43004 nlockmgr
100021 4 tcp 43004 nlockmgr
(daemon程序有多個是因為nfs支援并發通路)
nfs daemon:
rpc.nfsd 提供nfs服務
rpc.mountd 用于驗證使用者是否有權限使用nfs
rpc.lockd與rpc.statd 用于鎖定檔案防止多個使用者同時修改,導緻檔案混亂。
rpc.quota 用于設定nfs的磁盤配額。
rpc.bind 用于将服務與端口綁定
rpc.statd 通知nfs用戶端什麼時候一個nfs伺服器非正常重新開機動.這個程序被nfslock服務自動啟動,不需要使用者的配置.
rpc.idmapd 用于将所有使用者的id映射為nobody使用者
安裝nfs:
[root@7-1 ~]# yum install -y nfs-utils
一般os自帶無需安裝
nfs配置檔案
usage: directory(or filesystem) client1(option1,option2…) client2(option1,option2…)
directory 共享目錄
client 允許通路的用戶端ip
172.16.1.1 單個ip
172.16.1.0/24 網段
hostname/fqdn 主機名或者fqdn名
options 可使用權限選項
rw 讀寫權限,預設ro
async 異步讀寫,不啟用多線程,也能進行多個i/o操作
secure 預設選項,表示用戶端挂載建立連接配接時采用小于1024的端口号
insecure 關閉上述功能
root_squash 預設選項,将root使用者映射成nfsnobody
no_root_squash 關閉上述功能,非常危險,這表示以root的身份進行讀寫
all_squash 将所有使用者映射成nfsnobody