一、什么是NFS?
![](https://i-blog.csdnimg.cn/blog_migrate/6af9760cfb4b8e558640332ebb8b5574.png)
### --- 什么是NFS?
~~~ NFS是Network File System的缩写,即网络文件系统,一种使用分散式文件系统的协定,
~~~ 由Sun公司开发,于1984年向外公布,
~~~ 功能是通过#网络让不同的机器,不同的操作系统能够彼此分享个别的数据,
~~~ 让应用程序在客户端通过网络访问位于服务器磁盘中的数据,
~~~ 是在#Unix系统间实现磁盘文件共享的一种方式。
### --- 它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录,
~~~ NFS服务器可以允许NFS客户端将远端NFS服务器的东西那个目录挂载到本地的NFS客户端中,
~~~ 在本地的NFS客户端的机器看来,NFS服务器共享的目录就好像自己的磁盘分区和目录一样,
~~~ 一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。
NFS一般用来存储共享视频,图片等静态数据
![](https://i-blog.csdnimg.cn/blog_migrate/f202befae7c7cb8103968c954b45a401.png)
二、NFS挂载原理
### --- NFS挂载原理
~~~ NFS是通过网络来进行服务端和客户端之间的数据传输,
~~~ 两者之间要传输数据就要有相对应的网络端口来进行传输,
~~~ NFS服务器到底使用什么网络端口来传输数据的,
~~~ NFS服务器端其实是选择端口来进行数据传输,
~~~ 那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?
~~~ 其实NFS服务器时通过远程调用(remote procedure call简称RPC)协议/服务来实现的,
~~~ 也就是RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了那些端口,
~~~ 之后再利用这些端口(小于1024)来进行数据的传输。
~~~ 也就是RPC管理服务端的NFS端口分配,客户端要传输数据,
~~~ 那客户端的RPC会先跟RPC去要服务器的端口,要到端口后再进行连接,然后传输数据。
### --- 那RPC和NFS之间有时如何之间相互通讯的?
~~~ 首先NFS启动后,就会随机的使用一些端口,然后NFS就会RPC去注册这些端口,
~~~ RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,
~~~ 如果客户端有请求,那服务端的NFS端口信息告知客户端。
### --- RPC和NFS的启动顺序是怎样的?
~~~ 在启动NFS SERVER之前,
~~~ 首先启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,
~~~ 另外,如果RPC服务重新启动,原来已经注册号的NFS端口数据就会全部丢失,
~~~ 因此此时RPC服务管理的NFS顺序也要重新启动以重新想RPC注册,
~~~ 特别注意:一般修改NFS配置文档后,是不需要重启NFS的,
~~~ 直接在命令执行/etc/init.d/nfs reload
### --- 总结:客户端NFS和服务端NFS通讯过程
~~~ 首先服务端启动RPC服务,并开启111端口
~~~ 启动NFS服务,并向RPC注册端口信息
~~~ 客户端启动RPC(portmap服务)向服务端的RPC(portmap)服务请求服务端的NFS端口
~~~ 服务端的RPC(portmap)服务反馈NFS端口信息给客户端
~~~ 客户端通过获取的NFS端口来寄哪里和服务端的NFS连接并进行数据的传输
![](https://i-blog.csdnimg.cn/blog_migrate/ea4e229affd6b1ad0c5d3693b1a4609c.png)
三、NFS相关协议及软件安装管理
### --- NFS相关协议及软件安装管理
~~~ 协议:RPC(Remote Procedure Call Protocol)——远程过程调用协议
~~~ 软件:nfs-utils-*:包括NFS命令与监控程序
~~~ rpcbind-*:支持安全NFS RPC服务的连接
### --- 安装nfs-utils服务
~~~ 注:通常情况下:是作为系统的默认包安装的
~~~ CentoOS6.x之前rpcbind叫portmap
[root@server21 ~]# yum install -y nfs-utils-*
[root@server21 ~]# yum install -y rpcbind-*
四、NFS系统守护进程
### --- NFS系统守护进程
~~~ nfs:它是基本的NFS守护进程,主要功能是管理客户端是否能够登陆服务器
~~~ rpcbind:主要功能是进行端口映射工作,
~~~ 当客户端尝试并使用RPC服务器提供的服务(如NFS服务)时,
~~~ rpcbind会将所管理的服务网对应的端口提供给客户端,
~~~ 从而是客户可以通过该端口向服务器请求服务。
五、NFS服务器的配置
### --- NFS服务器的配置
~~~ NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,
~~~ 然后启动NFS服务器即可。
~~~ NFS服务的配置文件为/etc/exports,这个文件是NFS的主要配置文件,
~~~ 不过系统并没有默认值,所以这个文件不一定存在,可能要使用vim手动建立,
~~~ 然后在文件里面写入配置内容。
~~~ /etc/exports 文件内容格式:
### --- 共享目录 客户端1(访问权限,用户映射,其他)
### --- 客户端2 (访问权限,用户映射,其他)
~~~ 共享目录:共享目录是指NFS服务器共享给客户机使用过的目录
~~~ 客户端:客户端时指网络中可以访问这个NFS共享目录的计算机。
### --- 客户端常用的指定方式:
~~~ 指定IP地址的主机:192.168.0.200
~~~ 指定子网中所有主机:192.168.88.0
~~~ 指定域名的主机:www.atyanqi.com
~~~ 指定域中的所有主机:*.atyanqi.com
~~~ 所有主机:*
### --- 设置输出目录的访问权限,用户映射等
~~~ 访问权限选项:
~~~ 设置输出目录只读:ro
~~~ 设置输出目录读写:rw
### --- 用户映射选项:
~~~ root_squash:将root用户的访问映射为匿名(nfsnobody)用户UID和GID:(默认生效)
~~~ no_root_squash:保留管理员权限,以服务器管理员的权限管理
~~~ all_squash:将远程访问的用户及所属组都映射为指定UID,GID的匿名用户。
~~~ anonuid=xxx:将远程访问的所有用户都映射为指定UID的匿名用户:
~~~ anongid=xxx:将远程访问的所有组都映射为指定GID匿名组账号:
### --- 其他选项:
~~~ sync:将数据同步写入内存缓冲区域磁盘中,效率低,但可以保证数据的一致性(同步)
~~~ async:将数据先保存在内存缓冲区中,必要时才写入磁盘(异步)