一般情况下文件系统都在内核中实现,RPC远程调用另一个主机上的函数。NFS依赖于RPC所以要先安装RPC,RPC是接受远程请求过来的函数调用的。NFS基于IP的认证。

RPC与NFS的安装:

yum -y install rpcbind   #老版本叫portmap,没有就安装新版本,一样使用
yum -y install nfs-utils #安装NFS


CentOS 6上:

先启动 service rpcbind start  然后启动 service nfs start

查看本机rpc所监听的端口:rpcinfo -p localhost,在本机上localhost可以省略。


CentOS 7上:

systemctl start nfs && systemctl status nfs


nfs启动的进程:

        nfsd              主服务进程,端口固定2049

        mountd        挂载进程,端口随机

        quotad         磁盘配额进程,端口随机

        chkconfig nfs on        设置开机启动


配置文件:

        NFS配置文件为 /etc/exports,配置文件的格式为一行一条,前面写要共享出去的目录,后面写可以访问的IP地址,地址后面紧挨着权限,用于控制此IP的访问权限,IP和地址之间没有空格,目录后面可以有多个IP以及对应的权限,用空格分格;这里的IP地址也可以换成网段、主机名等。

格式如下:

/shared   192.168.96.129(ro,async)  192.168.96.130(rw)

        配置完成后可以用 showmount -e localhost 命令查看,共享列表,后面的IP可以省略,查看所有列表。更多选项可以使用man exports查看。

关于用户:

        在NFS服务上的用户以用户ID为准,如在服务端的用户UID为600,名称为Stephone,在客户端的用户UID为600,名称为Jon,客户端Jon创建了一个文件,单是这个文件在服务器端所属主的用户名显示为Stephone,这就是以用户ID为准的方式。可以使用指定UID的方式在服务器端和客户端创建相同名称且相同UID的用户,使用命令:

useradd -u 600 Stephone

然后在服务器端使用如下命令给此用户权限,这样在客户端的Stephone也可以拥有此权限了。

setfacl -m u:Stephone:rwx /shared/nfs

 

修改配置文件后重新导出:

        exportfs  -rav        重新导出所有的共享目录,这样修改配置文件后就不用重启nfs了。

        exportfs  -ua         取消所有导出的目录,所有共享的目录都被取消

        更多选项使用命令 man exportfs

选项注释:

        rw                 读写,对于root用户即使给了写权限也不能写入内容,因为默认情况下root用户会被映射为一个匿名的普通用户。

        async            异步传输,默认

        sync              同步传输

        root_squash          压缩root权限

        no_root_squash    不压缩root权限

        all_squash     压缩所有用户的权限,映射到匿名用户

        anonuid        匿名用户指定映射的UID

        anongid        匿名用户指定映射的GID

/data  193.168.0.0/16(rw,sync,no_root_squash,no_all_squash)

在客户端主机上查看某主机的共享目录:

        showmount -e  192.168.96.128            查看128服务器上共享的目录

        Export list for 192.168.96.128:

        /shared 192.168.0.0/16

将共享目录挂载

        先创建可供挂载的目录,mkdir  /mnt/nfs,然后将网络磁盘挂载到本地即可像本地硬盘一样使用了。

mount  -t  nfs  192.168.96.128:/shared  /mnt/nfs/

        挂载好后在服务器端的共享目录任意建立一个文件,然后在客户端查看是否能访问到这个文件。

开机自动挂载:

192.168.199.150:/nfs  /test nfs defaults,_netdev 0 0

0 不执行dump操作

0 不执行检测

可能会遇到如下情况:

        问题1:

        -bash: shwomount: command not found

        这是因为没有安装mount命令使用yum  -y install mount 安装即可

        问题2:

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

        这是由于被访问的nfs服务器上没有设置,向iptables里面添加2049端口即可,或关闭防火墙,service iptables  stop

测试是否能够自动挂载:

 卸载:

umount /mnt/nfs

重新挂载/etc/fstab文件:

mount -a


快速使用:

yum -y install nfs-utils

vim /etc/exports
/data  192.168.0.0/16(rw,sync,no_root_squash,no_all_squash)

systemctl status nfs

# 修改配置后重载
exportfs  -rav 

# 查看某主机共享目录
showmount -e  192.168.96.128

# 挂载使用
mount  -t  nfs  192.168.96.128:/shared  /mnt/nfs/

# 开机自动挂载
192.168.199.150:/nfs  /test nfs defaults,_netdev 0 0