NFS是Network File System的縮寫,即網絡文件系統。客戶端通過掛載的方式將NFS服務器端共享的數據目錄掛載到本地目錄下。
一、nfs為什么需要RPC?
因為NFS支持的功能很多,不同功能會使用不同程序來啟動,因此,NFS對應的功能所對應的端口無法固定。
端口不固定造成客戶端與服務端之間的通信障礙,所以需要RPC來從中幫忙。
NFS啟動時會隨機取用若干端口,然后主動向RPC服務注冊取用相關端口和功能信息,RPC使用固定端口111來監聽來自NFS客戶端的請求,
並將正確的NFS服務端口信息返回給客戶端,這樣客戶端與服務端就可以進行數據傳輸了。
二、NFS的工作流程
1、由程序在NFS客戶端發起存取文件的請求,客戶端本地的RPC(rpcbind)服務會通過網絡向NFS服務端的RPC的111端口發出文件存取功能的請求。
2、NFS服務端的RPC找到對應已注冊的NFS端口,通知客戶端RPC服務。
3、客戶端獲取正確的端口,並與NFS daemon聯機存取數據。
4、存取數據成功后,返回前端訪問程序,完成一次存取操作。
所以無論客戶端,服務端,需要使用NFS,必須安裝RPC服務。
NFS的RPC服務,在Centos5下名為portmap,Centos6下名稱為rpcbind。
三、安裝配置
1、首先關閉centos7上的firewalld防火牆和iptables防火牆,讓其開機不能自啟,等安裝完畢后可以打開相應的防火牆。
2、安裝。
yum install -y nfs-utils rpcbind
3、安裝完成后后首先啟動,首先啟動,首先啟動rpcbind服務。
systemctl restart rpcbind.service
4、配置nfs配置文件(默認是空的)
首先我們應該建立一個數據文件夾,例如data文件夾也可以是單獨的一個塊硬盤風趣,都可以。
#mkdir data
#vim /etc/exports
/data 192.168.1.0/24(rw,no_root_squash,sync,fsid=0)
參數: •ro:目錄只讀 •rw:目錄讀寫 •sync:將數據同步寫入內存緩沖區與磁盤中,效率低,但可以保證數據的一致性 •async:將數據先保存在內存緩沖區中,必要時才寫入磁盤 •all_squash:將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody) •no_all_squash:與all_squash取反(默認設置) •root_squash:將root用戶及所屬組都映射為匿名用戶或用戶組(默認設置) •no_root_squash:與rootsquash取反 •anonuid=xxx:將遠程訪問的所有用戶都映射為匿名用戶,並指定該用戶為本地用戶(UID=xxx) •anongid=xxx:將遠程訪問的所有用戶組都映射為匿名用戶組賬戶
注:添加no_root_squash參數,表明此時客戶端root用戶的身份等同於NFS server上面的root用戶,否則客戶端只能同步到服務器的數據,無建立文件或文件夾等權限。
啟動nfs
systemctl start nfs.service
客戶端操作:
同樣為了搭建順利,可先關閉iptables和selinux、firewall。客戶端只需要安裝rpcbind服務即可,無需安裝nfs或開啟nfs服務。
#yum install -y rpcbind
#systemctl start rpcbind.service
在客戶端建立文件夾,准備掛在nfs。
#cd /root
#mkdir nfstest
掛載
#mount -t nfs 192.168.1.238:/data nfstest
如果需要卸載的話,mount變成umount就行。
如下正常操作沒有問題。
如上所示,這樣的話在服務器或者在客戶端寫入對方都會發生變化。
注意:
服務器端:
1、先啟動rpcbind,再啟動nfs服務
2、如果配置文件發生變化可以使用exportfs -rv重新加載配置無需重啟服務。
3、查看rpc服務器是否啟動成功rpcinfo -p
4、查看共享目錄是否存在showmount -e 192.168.1.238
5、如果開iptables防火牆的話可以使用rpcinfo -p命令查看都需要允許哪些端口。
客戶端:
錯誤1,:Stale NFS file handle的解決方法
1、首先用umount卸載當前目錄,如果卸載不了使用umount -f /root/nfstest強制卸載,然后再重新掛載即可。
錯誤2:touch: cannot touch ‘test2’: Permission denied nfs
1、這個是提醒你客戶端掛載的nfs服務器的目錄沒有權限,你在nfs客戶端給權限沒用,要不就給nfs服務器目錄777權限,這樣顯得啥,要不就配置文件里面如上加上no_root_squash參數。