NFS是什么
NFS就是Network File System的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
NFS一般用来存储共享视频,图片等静态数据
NFS原理
NFS本身的服务并没有提供数据传递的协议,而是通过使用RPC(远程过程调用 Remote Procedure Call)来实现。当NFS启动后,会随机的使用一些端口,NFS就会向RPC去注册这些端口。RPC就会记录下这些端口,RPC会开启111端口。通过client端和sever端端口的连接来进行数据的传输。在启动nfs之前,首先要确保rpc服务启动。
NFS各服务的作用
- rpc:远程过程调用协议,是实现本地调用远程主机实现系统调用的协议。
- portmapper:负责分配rpc server的端口,并在client端请求时,负责响应目的rpc server端口返回给client端,工作在tcp与udp的111端口上。
- mountd:是nfs服务的认证服务的守护进程,client在收到返回的真正端口时,就会去连接mountd,认证取得令牌。
- nfsd:nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并得到调用结果响应给用户,工作在tcp和udp的2049端口。
- idmapd:是NFS的一个程序,用来负责远程client端创建文件后的权限问题。
- quotad:用用于实现磁盘配额,当client端挂载nfs后可以限制磁盘空间的大小
各软件说明
RPC主程序:rpcbind
NFS 其实可以被视为一个 RPC 服务,因为启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说, 在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)。
NFS主程序:nfs-utils
就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件。
相关配置文件及命令的使用
配置文件:/etc/exports
/path/to/somedir CLIENT_LIST
多个客户之间使用空白字符分隔
每个客户端后面必须跟一个小括号,里面定义了此客户访问特性,如访问权限等:172.16.0.0/16(ro,async) 192.16.0.0/24(rw,sync) *(ro)
权限属性:
ro:只读
rw:读写
sync:同步,同时将数据写入到内存与硬盘中,保证不丢失数据
async:异步,优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
root_squash: 将root用户映射为来宾账号(当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户)
no_root_squash: 有root的权限,不建议使用(当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员)
all_squash: 全部映射为来宾账号(无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户)
anonuid, anongid: 指定映射的来宾账号的UID和GID
命令: exportfs
该全路径:/usr/sbin/exportfs
这个是维护 NFS 分享资源的指令,可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享
-a:跟-r或-u选项同时使用,表示重新挂载所有文件系统或取消导出所有文件系统;
-r: 重新导出
-u: 取消导出
-v: 显示详细信息
命令: showmount
/usr/sbin/showmount
这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。showmount 可以用来察看 NFS 分享出来的目录资源。
showmount -e NFS_SERVER: 查看NFS服务器"导出"的各文件系统
showmount -a NFS_SERVER: 查看NFS服务器所有被挂载的文件系统及其挂载的客户端对应关系列表
showmount -d NFS_SERVER: 显示NFS服务器所有导出的文件系统中被客户端挂载了文件系统列表
命令: rpcinfo
-p hostname(orIP)
-p :显示所有的 port 与 program 的信息!
*分享资源的登录档:/var/lib/nfs/tab
在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据
客户端挂载
mount -t nfs NFS_SERVER:/PATH/TO/SOME_EXPORT /PATH/TO/SOMEWHRERE
如果要让mountd和quotad等进程监听在固定端口,编辑配置文件/etc/sysconfig/nfs
安装配置
服务端
# 安装nfs
yum install nfs-utils rpcbind -y
# 编辑/etc/exports
/test 192.168.245.0/24(ro)
# 先启动rpc服务、设置开机启动
systemctl start rpcbind
systemctl enable rpcbind
# 启动nfs服务
systemctl start nfs
systemctl enable nfs
# 后续如果有修改配置文件可以使用下面的命令重新挂载导出
exportfs –ra
客户端
# 安装nfs
yum install nfs-utils rpcbind -y
# 查看NFS服务器"导出"的各文件系统
showmount –e 192.168.245.155
# 挂载
mount -t nfs 192.168.245.155:/test /nfs-test
# 自动挂载
vim /etc/fstab
192.168.245.155:/test /nfs-test nfs defaults 0 0