一、概念
NFS(Network File Server) 網絡文件系統(映射)。網絡文件系統是FreeBSD支持的文件系統中的一種,也被稱為NFS; NFS允許一個系統在網絡上與他人共享目錄和文件。
作用:用於Linux系統間進行文件共享
優點:配置簡單,使用方便
缺點:兼容性差,安全性低
應用:機房集群內部的服務器共享,企業里常用nfs搭建存儲系統(盤陣系統)
模式:C/S 模式
端口:NFS通常運行於2049端口
二、部署NFS
注意:
1、由於在使用NFS服務進行文件共享之前,需要使用RPC(Remote Procedure Call,遠程過程調用)服務將NFS服務器的IP地址和端口號等信息發送給客戶端。所以,在啟動nfs之前,需要先查詢rpcbind狀態,如果該服務為停止狀態,需要先啟用rpcbind,再啟用nfs;
2、圖形界面會自帶nfs,所以無需執行第一步驟,最小化安裝時,客戶端和服務端都需要安裝;
3、步驟中的掛載,需在客戶端上執行;
4、在設置掛載目錄時,需要注意絕對路徑,且該目錄是否允許訪問;
5、設置共享目錄的權限時,除了服務權限,還要注意系統權限。
搭建步驟:
1、下載安裝
# yum install nfs-utils -y
2、啟動
# systemctl start nfs #開啟后最好查詢一下狀態:systemctl status nfs
3、配置
# vim /etc/exports
/PATH HOSTNAME(rw)/(ro)
共享地址 客戶機的IP 共享權限
/ken 172.20.10.7(rw) #給特定的ip共享,rw表示權限
/data *(rw) #給所有ip 共享
/data 172.20.10.0/28(rw) #把網段共享出去 28表示掩碼
/data 172.20.10.0/28(rw) 192.168.64.0/24(rw) #設置多個網絡
注意:* 表示對所有網段開放權限
nfs也可以共享多個目錄
/ken 192.168.64.5(rw)
/test 192.168.64.7(rw)
4、刷新
# exportfs -r
更改屬主:#chown -R nfsnobody:nfsnobody /home/renyz
或者更改權限:#chmod 757 /home/renyz
5、客戶端掛載使用(客戶端需要下載nfs-utils)
# mount -t nfs ServerIP:/PATH /LocalIDIR
# mount 服務機IP:/共享目錄 /本地目錄
# showmount -e ServerIP #查看共享
6、開機自動掛載
服務機IP:/共享目錄 /本地目錄 nfs default 0 0 /etc/fstab
三、autofs(客戶端操作)
nfs 是長連接的服務(客戶端掛載完成之后,客戶端與服務端之間連接一直保持,不管有無數據傳輸)
優點:響應速度快;缺點:浪費資源
自動掛載取消掛載的服務(15分鍾后自動解掛)
1、安裝
# yum install autofs -y
2、配置主配文件
# vim /etc/auto.master
/misc /etc/auto.misc
#客戶端掛載點目錄 /etc/auto.misc
# 陷阱 規則文件
# 進入左邊的路徑將執行右邊的規則
3、配置規則文件
# vim /etc/auto.misc
觸發點 執行規則(命令)
cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
1 -fstype=nfs,rw 192.168.11.3:/renyz/1
2 -fstype=nfs,rw 192.168.11.3:/renyz/2
4、重啟autofs服務
# systemctl restart autofs
5、測試
四、SSH
SSH為Secure Shell縮寫,由IETF的網絡小組所制定。SSH為建立在應用層基礎上的安全協議。SSH是目前較可靠的,為遠程登錄會話和其他網絡服務提供安全性的協議。
使用格式:ssh USERNAME@HOSTNAME
注意:其中USERNAME是服務端的用戶名稱,HOSTNAME是服務器的訪問地址。
五、掛載問題一
1、問題起因:
在配置好一台NFS服務器,建立好分享目錄,刷新配置以后,在另一台客戶機中使用showmount -e 出現報錯:
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
2、問題原因:
服務端的防火牆上默認沒有開啟nfs服務相應的端口
3、解決辦法:
(1)簡單粗暴地關閉防火牆
systemctl stop firewalld
如果開啟了iptables的話,也是一樣的,iptables的策略里也默認不會為nfs服務開啟需要的端口
systemctl stop iptables
(2)在防火牆上開啟端口
在設置了防火牆的環境中使用NFS,需要在防火牆上打開如下端口:
1. portmap 端口 111 udp/tcp;
2. nfsd 端口 2049 udp/tcp;
3. mountd 端口 "xxx" udp/tcp
系統 RPC服務在 nfs服務啟動時默認會為 mountd動態選取一個隨機端口(32768--65535)來進行通訊,我們可以通過編輯/etc/services 文件為 mountd指定一個固定端口:
# vim /etc/services
在末尾添加
mountd 1011/udp mountd 1011/tcp
wq退出保存該文件
# stopsrc -s rpc.mountd
# startsrc -s rpc.mountd
# exportfs -a
# rpcinfo -p Hostname
現在我們會發現 mountd已經和端口 1011綁定了。
另外,nfs中需要通訊的服務還有 rpc.lockd和 rpc.statd,其中對lockd我們可以用類似的方法來指定固定端口,
# vim /etc/services
添加
lockd 35000/ucp lockd 35000/tdp
# stopsrc -s rpc.lockd
# startsrc -s rpc.lockd
# exportfs -a
nfs客戶端mount文件系統
# rpcinfo -p Hostname
但 rpc.statd無法通過該方法來指定端口,它只能使用隨機端口,如有必要,在防火牆上要根據下面命令的顯示來開放隨機端口:
# no -a |grep ephemeral
tcp_ephemeral_high = 65535
tcpp_ephemeral_low = 32768
udp_ephemeral_high = 65535
udp_ephemeral_low = 32768
當然也可以不開放 rpc.statd需要的隨機端口,帶來的影響就是如果 nfs連接中斷(比如server或client宕掉了),系統將無法通過statd來恢復連接中斷前的狀態,而必須重新 mount該nfs文件系統。
有關statd的詳細功能說明,請參閱 http://publib.boulder.ibm.com/infocenter/
pseries/v5r3/topic/com.ibm.aix.cmds/doc/aixcmds5/statd.htm
六、掛載問題二
用mount掛載時卻出現“access denied by server while mounting”這個錯誤;
原因及解決辦法:
1、使用了非法端口,也就是使用了大於1024的端口。
這個錯誤,可以通過查看日志確認:
[root@local~ /]# cat /var/log/messages | grep mount
Jan 2 12:49:04 localhost mountd[1644]: refused mount request from 192.168.0.100 for /home/nfsshare/ (/home/nfsshare): illegal port 1689
解決辦法:
修改配置文件/etc/exports,加入 insecure 選項,重啟nfs服務,再嘗試掛載。
/home/nfsshare/ *(insecure,rw,async,no_root_squash)
2、NFS版本問題
編輯/etc/sysconfig/nfs文件,找到下面:
#Turn off v2 and v3 protocol support #RPCNFSDARGS="-N 2 -N 3" #Turn off v4 protocol support #RPCNFSDARGS="-N 4" /*把這句前面的#號去掉*/
最后保存,重啟nfs服務,再嘗試掛載;如果掛載不上,可嘗試在后面加-o nolock參數。
3、查看客戶端掛載的目錄是否具備讀寫權限,添加相應權限即可。
4、nfs服務器上的/etc/hosts中設置了客戶端機器IP對應域名,去掉即可。
通過以上這幾種方法,access denied by server while mounting這個錯誤應該可以得到解決了。