NFS是network file system的缩写,它最大的特点是可以通过网络,让不同的机器,不同的系统实现文件共享。

NFS客户端可以将NFS服务器共享的目录挂载在本地的文件系统中,访问目录就如同访问自己本地目录一样。

NFS工作原理

Linux NFS文件服务器实战_NFS文件服务

  1. 首先服务器端启动RPC服务,并开启111端口;启动NFS服务,并向RPC注册端口信息
  2. 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口(由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求。)
  3. 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
  4. 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。(客户端获取正确的端口,并与NFS daemon联机存取数据。)
  5. 存取数据成功后,返回前端访问程序,完成一次存取操作。

         NFS在文件传送或信息传送过程中依赖于RPC协议。RPC,远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责信息的传输。

        NFS的原理结构其实还是挺简单,NFS就是网络共享目录,就是共享文件.服务端共享,客户端挂载使用。挂载流程原理,就是上面提到的5个流程。NFS要向RPC去注册端口信息。NFS的端口也是随机获取的。

NFS安装部署

服务器和客户端关闭防火墙,安装nfs服务组件:

nfs服务端:192.168.1.1

nfs客户端:192.168.1.2

#关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
#临时关闭selinux
setenforce 0
#永久关闭selinux
vim /etc/selinux/config
修改为SELINUX=disabled

#安装NFS服务组件(两台都需要装)
yum -y install nfs-utils

#服务端创建共享目录/share
mkdir -p /data/share

#配置服务端/etc/exports文件
vim /etc/exports
/data/share 192.168.1.2(ro,sync)

#启动nfs服务
systemctl start nfs

#启动rpcbind
systemctl start rpcbind

#重新读取NFS配置文件
exportfs -r

#查看共享详细信息
exportfs -v

#客户端查询NFS服务器
showmount -e 192.168.1.1

#客户端挂载nfs共享目录
mkdir /mnt/nfs -p
mount -t nfs 192.168.1.1:/data/share /mnt/nfs

exports文件详情

Linux NFS文件服务器实战_NFS文件服务_02


报错处理

卸载时报错:

umont.nfs4: /data/share device is busy

umont -l /data/share  强行接触挂载

或者使用

fuser -m /data/share 将会显示使用这个模块的pid

fuser -mk /data/share 将会直接kill那个pid

NFS知识扩展

Linux NFS文件服务器实战_客户端_03

RPC扩展

Linux NFS文件服务器实战_NFS文件服务_04

NFS自动挂载

自动挂载原理

autofs服务程序与mount命令不同之处在于它是一种守护进程,只有检测到用户识图访问一个尚未挂载的文件系统时才自动的检测并挂载该文件系统。

autofs非常方便,主要由两点:

1、设置不需要在开机就挂载的目录,当用的时候才实现自动挂载

2、用户不使用自动挂载的目录过一段时间会自动卸载(默认时间为5分钟)

可以在autifs.conf修改配置

自动挂载配置

#客户端安装autofs
yum -y install autofs

#编辑/etc/auto.master文件
vim /etc/auto.master
/mnt/nfs /etc/nfs.misc

#编辑/etc/auto.misc文件
vim /etc/auto.misc
cdrom -fstype=nfs,ro,sync 192.168.1.1:/data/share

#重启服务
systemctl restart autofs