一、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/
注:可能需要修改目录权限 :chmod 777 -R /home/shareTwo/
验证:df -h
挂载成功:
卸载: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