nfs詳解

1、NFS介紹

NFS是Network File System的簡寫,即網絡文件系統,NFS是FreeBSD支持的文件系統中的一種。NFS基於RPC(Remote Procedure Call)遠程過程調用實現,其允許一個系統在網絡上與它人共享目錄和文件。通過使用NFS,用戶和程序就可以像訪問本地文件一樣訪問遠端系統上的文件。NFS是一個非常穩定的,可移植的網絡文件系統。

2、原理

NFS 使用RPC(Remote Procedure Call)的機制進行實現,RPC使得客戶端可以調用服務端的函數。同時,由於有 VFS 的存在,客戶端可以像使用其它普通文件系統一樣使用 NFS 文件系統。經由操作系統的內核,將 NFS 文件系統的調用請求通過 TCP/IP 發送至服務端的 NFS 服務。NFS服務器執行相關的操作,並將操作結果返回給客戶端。
nfs詳解

NFS服務主要進程包括:

rpc.nfsd:最主要的NFS進程,管理客戶端是否可登錄
rpc.mountd:掛載和卸載NFS文件系統,包括權限管理
rpc.lockd:非必要,管理文件鎖,避免同時寫出錯
rpc.statd:非必要,檢查文件一致性,可修復文件
nfs的關鍵工具包括:

主要配置文件:/etc/exports;
NFS文件系統維護命令:/usr/bin/exportfs;
共享資源的日誌文件: /var/lib/nfs/*tab;
客戶端查詢共享資源命令: /usr/sbin/showmount;
端口配置: /etc/sysconfig/nfs。

3、共享配置

在NFS服務器端的主要配置文件爲/etc/exports時,通過此配置文件可以設置共享文件目錄。每條配置記錄由NFS共享目錄、NFS客戶端地址和參數這3部分組成,格式如下:

[NFS共享目錄] [NFS客戶端地址1(參數1,參數2,參數3……)] [客戶端地址2(參數1,參數2,參數3……)]

NFS共享目錄:服務器上共享出去的文件目錄;
NFS客戶端地址:允許其訪問的NFS服務器的客戶端地址,可以是客戶端IP地址,也可以是一個網段(192.168.64.0/24);
訪問參數:括號中逗號分隔項,主要是一些權限選項。
1)訪問權限參數

1 ro 客戶端對於共享文件目錄爲只讀權限。(默認設置)
2 rw 客戶端對共享文件目錄具有讀寫權限。

2)用戶映射參數(這幾個是難點,比較難以理解)

1 root_squash 使客戶端使用root賬戶訪問時,服務器映射爲服務器本地的匿名賬號。
2 no_root_squash 客戶端連接服務端時如果使用的是root的話,那麼也擁有對服務端分享的目錄的root權限。
3 all_squash 將所有客戶端用戶請求映射到匿名用戶或用戶組(nfsnobody)。
4 no_all_squash 與上相反(默認設置)。
5 anonuid=xxx 將遠程訪問的所有用戶都映射爲匿名用戶,並指定該用戶爲本地用戶(UID=xxx)。
6 anongid=xxx 將遠程訪問的所有用戶組都映射爲匿名用戶組賬戶,並指定該匿名用戶組賬戶爲本地用戶組賬戶(GID=xxx)。
3)其它配置參數

1 sync 同步寫操作,數據寫入存儲設備後返回成功信息。(默認設置)
2 async 異步寫操作,數據在未完全寫入存儲設備前就返回成功信息,實際還在內存。
3 wdelay 延遲寫入選項,將多個寫操請求合併後寫入硬盤,減少I/O次數,NFS非正常關閉數據可能丟失(默認設置)。
4 no_wdelay 與上相反,不與async同時生效,如果NFS服務器主要收到小且不相關的請求,該選項實際會降低性能。
5 subtree 若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
6 no_subtree 即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率
7 secure 限制客戶端只能從小於1024的tcp/ip端口連接nfs服務器(默認設置)。
8 insecure 允許客戶端從大於1024的tcp/ip端口連接服務器。

4、安裝

服務端安裝
yum -y install nfs-utils rpcbind

使用的客戶端必須安裝
yum -y install nfs-utils

檢查服務
rpcinfo -p 127.0.0.1

啓動服務
/etc/init.d/nfs start

共享目錄
cat /etc/exports

/nfs/unit-1 10.59.0.0/16(rw,sync,no_root_squash)
/nfs/unit-2 10.59.0.0/16(rw,sync,all_squash)
/nfs/redis 10.59.0.0/16(rw,sync,no_root_squash)

配置生效
exportfs -rv

查看export出去的list
showmount -e 127.0.0.1

重要文件
/var/lib/nfs/etab

裏面包含所有export出去的目錄並且參數(默認參數也包含)

報錯1:
[root@dev-tools002 ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS mountd: rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
[FAILED]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: address family inet6 not supported by protocol TCP
rpc.nfsd: unable to set any sockets for nfsd

參考
https://blog.51cto.com/mingyang/1584675

報錯2
Starting NFS services: [ OK ]
Starting NFS mountd: [FAILED]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd

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