使用网络文件系统NFS实现Linux系统间文件共享

一、NFS简介

1、NFS (Network File System/网络文档系统)

是C/S(客户机/服务器) 架构,可以实现Linux 系统之间的文档共享
(Linux 和Windows 间的文档共享需采用SAMBA 服务);

注意: NFS 只是一种文档系统,本身没有传输功能,是基于RPC协议才能达到两个Linux系统之间的文档目录共享;

2、RPC(远程过程调用)

它的功能是指定每个NFS功能对应的端口号,当NFS服务器启动时会随机启用数个端口号,并主动向RPC注册,
这样RPC就知道每个端口号对应的功能了,RPC使用111号端口来监听客户机的请求并回应正确的端口号。

注意: 启动NFS之前要先启动RPC,否则NFS无法向RPC注册,当RPC重新启动后,原来注册的端口数据会丢失,
这时,它管理的所有程序都必须重新向RPC注册。

二、NFS工作原理

  • 1)客户机发送RPC请求到远程NFS服务器中。
  • 2)NFS服务器利用PORTMAP或者rpcbind服务查询NFS的工作端口。(centos5为portmat,6为rpcbind)
  • 3)客户机联系要装载的分区,同时服务器会验证客户机是否有权加载。
  • 4)客户机更新MTAB文件,表示加载成功。

三、服务器端搭建(共享自己的文件给其他服务器)

1、查看

1)、查看系统版本:cat /etc/redhat-release(不同版本命令不同)

2)、查看是否安装了rpcbind和nfs

  • rpm -qa | grep rpcbind(centos6以下版本名为portmap)

  • rpm -qa | grep nfs

执行之后显示为空则表示没有安装

2、安装

方式1: 一起安装(推荐)
yum install nfs-utils rpcbind -y

方式2:分别安装
安装nfs:

yum install nfs-utils.x86_64(64位系统)

yum install nfs-utils(32位系统)

安装rpcbind服务:
yum install rpcbind(centos6以下版本为portmap)

3、配置vi /etc/exports

格式:共享目录 授权可访问的ip,也可以是范围(参数见附录)

实例:/home/share 192.168.127.33(insecure,rw,sync,no_root_squash)

注:也可使用通配符方式:192.168.127.* 或 192.168.

4、启动(注意顺序先启动rpc)

1、/etc/init.d/rpcbind start

2、/etc/init.d/nfs start

注:如果系统是centOS7,命令为:systemctl start rpcbind.service

5、验证

1)、查看nfs服务:showmount -e 127.0.0.1

2)、查看nfs和rpc状态

/etc/init.d/nfs status

/etc/init.d/rpcbind status

prcinfo -p (localhost)

3)exportfs [-aruv] 当修改了/etc/exports文档后,能够不用重新启动nfs 服务,直接采用exports –rv重新扫描一次/etc/exports,重新加载即可;

-a:全部mount 或unmount /etc/exports中的内容  

-r:重新加载 /etc/exports中分享出来的目录  

-u:卸载某一目录 (exportfs -au//全部卸载)

-v:在export的时候,将分享的目录显示到荧屏上。

四、客户端(可以看其它服务器的共享文件)

参照服务器端进行查看、安装、启动(不需配置etc/exports),
验证(查看能否访问服务端目录:Showmount -e 服务器端ip),之后需要挂载。

挂载:

mount -t nfs 服务器端ip:共享目录 挂载点(客户端文件夹)

mount -t nfs 10.130.29.33:/home/share /home/shareTwo/
使用网络文件系统NFS实现Linux系统间文件共享_第1张图片
注:可能需要修改目录权限 :chmod 777 -R /home/shareTwo/

验证:df -h

挂载成功:
使用网络文件系统NFS实现Linux系统间文件共享_第2张图片

卸载:umount /mnt

五、脚本

! bin/bash
# 2018-09-05 nfs mount

#echo "please input server:"
#read server
read -p "please input clint:" clint
mount -t nfs 10.130.29.33:/home/ivrShare $clint
#mount -t nfs $server $clint
#mount -t nfs 10.130.29.33:/home/ivrShare /home/shareSleeTwo/

六、常见问题

1:卸载失败:

1)当你的当前路径为/mnt下,即在挂载文件的里面时,卸载会失败,提示:Dev is besy.

解决办法:退出挂载的目录

2)当有别的程序正在访问挂载的文件时,也会提示卸载失败,

解决办法:通过lsof /mnt查看是哪个进程占用了/mnt,然后kill -9 $pid ,之后在卸载。
也可使用umount -l /mnt(-l:卸载前检查占用该挂载文件的程序并迅速kill掉,以达到快速卸载的目的)

2:nfs环境搭建报错clnt_create: RPC: Program not registered

解决方法:重启nfs

3:mount.nfs: access denied by server while mounting 10.130.29.33:/home/share/

解决:在/etc/exports 中加入参数insecure
注意挂载参数(是否写反)

4:clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)

关掉 重启rpc

5:clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

被访问的服务器有防火墙
检查防火墙:service iptables status。

附录:

rw:读/写权限,只读权限的参数为ro;

sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。

no_root_squash:NFS服务器共享目录用户的属性,如果用户是root,那么对于这个共享目录来说就具有root的权限。root_squash: 在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个身份; 

all_squash: 不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是 nobody 啦!

all_squash    共享文件的UID和GID映射匿名用户anonymous,适合公用目录。 

no_all_squash    保留共享文件的UID和GID(默认) 

secure    NFS通过1024以下的安全TCP/IP端口发送 

insecure    NFS通过1024以上的端口发送 

wdelay    如果多个用户要写入NFS目录,则归组写入(默认) 

no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。 

hide    在NFS共享目录中不共享其子目录 

no_hide    共享NFS目录的子目录(默认)

subtree_check 如果共享/usr/bin之类的子目录,强制NFS检查父目录的权限(默认) 

no_subtree_check    和上面相对,不检查父目录权限 

anonuid=xxx    指定NFS服务器/etc/passwd文件中匿名用户的UID 

anongid=xxx    指定NFS服务器/etc/passwd文件中匿名用户的GID

你可能感兴趣的:(使用网络文件系统NFS实现Linux系统间文件共享)