当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h。

既然NFS是通过网络来进行服务器端和客户端之间的数据传输,那么两者之间要传输数据就要有想对应的网络端口,NFS服务器到底使用哪个端口来进行数据传输呢?基本上NFS这个服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口;既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?这时就需要通过远程过程调用(Remote Procedure Call,RPC)协议来实现了!

RPC与NFS如何通讯

  因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能对应的端口并不固定,客户端要知道NFS服务器端的相关端口才能建立连接进行数据传输,而RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111,RPC会记录NFS端口的信息,如此我们就能够通过RPC实现服务端和客户端沟通端口信息。PRC最主要的功能就是指定每个NFS功能所对应的port number,并且通知客户端,记客户端可以连接到正常端口上去。

  那么RPC又是如何知道每个NFS功能的端口呢?

  首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了。

提示:在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs  reload或exportfs –rv即可使修改的/etc/exports生效

查询本地有没有rpc及nfs

rpm -q rpcbind nfs-utils如没有使用yum安装即可

vim /etc/exports定义要服务器上要共享的文件

共享目录                 要共享的主机(共享参数)

NFS挂载 账号密码 nfs挂载点_客户端

共享参数:

NFS挂载 账号密码 nfs挂载点_RPC_02

NFS挂载 账号密码 nfs挂载点_NFS挂载 账号密码_03

NFS挂载 账号密码 nfs挂载点_文件系统_04

root_squash表示压缩root用户的权限变为最小权限nfsnobody用户,反之no_root_squash表示不压缩ROOT权限,all_squash表示压缩所有用户的权限,anonuid,anongid表示指定nfsnobody用户和nfsnobody组

在真实环境中尽量不用systemctl restart nfs,使用exportfs -arv重新加载exports文件

exportfs [-aruv] 
 -a :全部mount或者unmount /etc/exports中的内容 
 -r :重新mount /etc/exports中分享出来的目录 
 -u :umount 目录 
 -v :在 export 的时候,将详细的信息输出到屏幕showmount 
 -a :这个参数是一般在NFS SERVER上使用,是用来显示已经mount上本机nfs目录的cline机器。 
 -e :显示指定的NFS SERVER上export出来的目录。

可以在客户端上使用showmount -e 192.168.0.104 如果没有结果可能是防火墙的问题

firewall-cmd --permanent --add-service=rpcbind
firewall-cmd --permanent -add-servicre=nfs
firewall-cmd --permanent --add-service=mountd

命令行挂载:mount -t nfs 192.168.0.104:/var/nfs /mnt/nfs

fstab文件挂载:

vim /etc/fstab

加入:192.168.0.104:/var/nfs  /mnt/nfs    nfs    defaults 0 0

在mount -a使fstab文件生效

autofs简介:

autofs —— 自动挂载工具 
特点:它与 mount 的不同,autofs 是一个守护进程,如果它检测到用户正在访问一个尚未挂载的文件系统,如果存在,autofs 会自动将其挂载;如果它检测到某个已经挂载的文件系统在一段时间内没有被使用,那么 autofs 会自动将其卸载。

Autofs与Mount/Umount的不同之处在于,它是一种看守程序。如果它检测到用户正试图访问一个尚未挂接的文件系统,它就会自动检测该文件系统,如果存在,那么Autofs会自动将其挂接,另一方面,如果它检测到某个已挂接的文件系统在一段时间内没有被使用,那么Autofs会自动将其卸载。因此一旦运行了Autofs后,用户就不再需要手动完成文件系统的挂接和卸载。

autofs配置比较简单,由两个文件组成

/etc/auto.master   //这个文件是统一,唯一的。系统配置文件,里面注明了自动挂载的根目录和应用的配置文件
/media    /etc/auto.media --timeout 300
/media代表了挂载的根目录所在,auto.media代表所应用的配置文件  --timeout 300代表系统超时,单位s
/etc/auto.media    //这个文件时自定义的,对应master中的配置文件,里面写明了实际挂载目录,挂载参数和挂载项所在位置
Rhel6.4                 -fstype=iso9660,loop,ro         :/iso/Rhel6p4.iso

Rhel6.4代表挂载位于/media/Rhel6.4  -fstype=iso9660文件类型为光盘 loop是将文件模拟块设备挂载在本地 ro=readonly  :/iso/Rhel6p4.iso为镜像所在位置为/iso

配置如下:

cat /etc/auto.master

NFS挂载 账号密码 nfs挂载点_文件系统_05

auto.msc为配置文件,挂载点为/test

cat /etc/auto.msc

NFS挂载 账号密码 nfs挂载点_RPC_06

auto.msc定义实际挂载目录/test/chenbo,文件系统类型为nfs4,rw为挂载选项,后面为服务器目录

systemctl start autofs

NFS挂载 账号密码 nfs挂载点_文件系统_07

注意这里查看test目录下没有东西,不要紧张继续cd chenbo会查看到内容

NFS挂载 账号密码 nfs挂载点_客户端_08

当初笔者弄这个实验这算是一个坑