NFSNetwork File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。

nfs为什么需要RPC?

因为NFS支持的功能很多,不同功能会使用不同程序来启动,因此,NFS对应的功能所对应的端口无法固定。
端口不固定造成客户端与服务端之间的通信障碍,所以需要RPC来从中帮忙。
NFS启动时会随机取用若干端口,然后主动向RPC服务注册取用相关端口和功能信息,RPC使用固定端口111来监听来自NFS客户端的请求,
并将正确的NFS服务端口信息返回给客户端,这样客户端与服务端就可以进行数据传输了。

NFS的工作流程

所以无论客户端,服务端,需要使用NFS,必须安装RPC服务。NFS的RPC服务。

Centos5下名为portmap,

Centos6下名称为rpcbind。

NFS服务安装配置

nfs-utilsrpcbind

查看是否安装NFS

> rpm -qa nfs-utils rpcbind
> yum install nfs-utils rpcbind

启动rpcbind服务

查看服务状态

> systemctl status rpcbind.service

如果不知道rpcbind命令在哪

> which rpcbind

启动rpc服务

> systemctl restart rpcbind.service

查看rpc

> lsof -i :111
> netstat -lntup|grep rpcbind

如果出现-bash未找到命令可执行下面命令

> yum install net-tools lsof

查看nfs服务向rpc注册的端口信息

> rpcinfo -p localhost

检查rpcbind是否开机启动

> chkconfig --list rpcbind

启动NFS服务

> systemctl start nfs.service

查看状态

> systemctl status nfs.service

再次查看rpc注册的端口信息

> rpcinfo -p localhost

NFS常见进程详解

> ps -ef|egrep "rpc|nfs"

root     19101     2  0 14:13 ?        00:00:00 [rpciod]
rpc      21231     1  0 14:52 ?        00:00:00 /sbin/rpcbind -w
rpcuser  21371     1  0 14:52 ?        00:00:00 /usr/sbin/rpc.statd
root     21394     1  0 14:52 ?        00:00:00 /usr/sbin/rpc.idmapd
root     21395     1  0 14:52 ?        00:00:00 /usr/sbin/rpc.mountd
root     21405     2  0 14:52 ?        00:00:00 [nfsd4_callbacks]
root     21411     2  0 14:52 ?        00:00:00 [nfsd]
root     21412     2  0 14:52 ?        00:00:00 [nfsd]
root     21413     2  0 14:52 ?        00:00:00 [nfsd]
root     21414     2  0 14:52 ?        00:00:00 [nfsd]
root     21415     2  0 14:52 ?        00:00:00 [nfsd]
root     21416     2  0 14:52 ?        00:00:00 [nfsd]
root     21417     2  0 14:52 ?        00:00:00 [nfsd]
root     21418     2  0 14:52 ?        00:00:00 [nfsd]
root     24279 18106  0 15:49 pts/1    00:00:00 grep -E --color=auto rpc|nfs
  • nfsd(rpc.nfsd)主进程,主要是管理客户端能否登入服务端,登入者ID判别。
  • mountd(rpc.mountd)管理NFS文件系统,登入者的权限管理
  • rpc.lockd(非必要)用来锁定文件,用于客户端同时写入
  • rpc.statd(非必要)检查文件一致性
  • rpc.idmapd 名字映射后台进程

配置NFS开机自启动

> chkconfig rpcbind on
> chkconfig nfs on
> chkconfig --list rpcbind
> chkconfig --list nfs

NFS服务端配置

> vi /etc/exports

exports文件配置格式:

NFS共享的目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)

说明:

NFS共享目录、要用绝对路径:

NFS服务配置(客户端链接信息配置)、注意客户端也要安装rpcbind和nfs-utils安装包。Mac OS默认自带。(原因:mount不带有挂载远程的能力。showmount 命令也是通过安装nft-utils包获得)。

exports文件配置中的—客户端地址参数选项

指定IP: 192.168.0.1
指定子网所有主机: 192.168.0.0/24
指定域名的主机: test.com
指定域名所有主机: *.test.com
所有主机: *

参数:

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:将远程访问的所有用户组都映射为匿名用户组账户

例如:

/nfsfile *(rw,sync,root_squash,insecure)

编写配置文件

echo "/nfsfile *(rw,sync,root_squash,insecure)">>/etc/exports

创建需要共享的目录

> mkdir  /nfsfiles
> chown nfsnobody.nfsnobody /nfsfiles

或者给

chmod -R 777 /nfsfile/

重新加载nfs配置

> exportfs -rv

查看nfs服务器挂载情况

> showmount -e localhost

客户端挂载测试

一定要注意客户端也要安装nfs

否则用客户端命令会报错

mount: wrong fs type, bad option, bad superblock on 125.64.41.244:/data/img,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)
       In some cases useful info is found in syslog - try
       dmesg | tail  or so
 
根据错误提示,查看/sbin/mount.<type>文件,果然发现没有/sbin/mount.nfs的文件,安装nfs-utils即可

–一定要注意。。。。。

showmount -e 47.105.179.215

我是Mac系统

如果出现:showmount: Cannot retrieve info from host: 47.105.179.215: RPC failed:: RPC: Unable to send; errno = Bad file descriptor

基本是服务器端口没开放 (或者防火墙屏蔽)、rpcbind的默认端口是111。但是我的阿里云服务器里面有安全组,只开发111端口也不行。

最后我删除了安全组的入站规则后。可以了。

sudo mount 47.105.179.215:/nfsfile /Users/qidong/nfsData

mount_nfs: can’t mount /nfsfile from 47.105.179.215 onto /Users/qidong/nfsData: Operation not permitted

如果出现了上面的错误。在mount 上加上参数

或者

/nfsfile *(rw,sync,root_squash)

加上 insecure 这个参数 /nfsfile *(rw,sync,root_squash,insecure)

sudo mount -o resvport 47.105.179.215:/nfsfile /Users/qidong/nfsData

查看挂载:

df -h

图

卸载挂载:

umount /Users/qidong/nfsData

Last modification:January 30, 2020
如果觉得我的文章对你有用,请随意赞赏