一、NFS介绍 NFS(网络文件系统) NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。 中文名:网络文件系统 外文名:Network File System 用 途:网络上与他人共享目录和文件 优 点:节省磁盘空间 用 途:共享文件 好处:以下是NFS最显而易见的好处

  1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。
  2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
  3. 一些存储设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。 组成 NFS体系至少有两个主要部分: 一台NFS服务器和若干台客户机,如上图所示。 客户机通过TCP/IP网络远程访问存放在NFS服务器上的数据。 在NFS服务器正式启用前,需要根据实际环境和需求,配置一些NFS参数。 应用 NFS 有很多实际应用。下面是比较常见的一些:
  4. 多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。
  5. 在大型网络中,配置一台中心 NFS 服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。
  6. 不同客户端可在NFS上观看影视文件,节省本地空间。
  7. 在客户端完成的工作数据,可以备份保存到NFS服务器上用户自己的路径下。 NFS是运行在应用层的协议。随着NFS多年的发展和改进,NFS既可以用于局域网也可以用于广域网,且与操作系统和硬件无关,可以在不同的计算机或系统上运行。 配置 NFS的配置过程相对简单。这个过程只需要对/etc/rc.conf文件作一些简单修改。 1 在NFS服务器这端,确认/etc/rc.conf 文件里头以下开关都配上了: rpcbind_enable="YES" nfs_server_enable="YES" mountd_flags="-r" 只要NFS服务被置为enable,mountd 就能自动运行。 2 在客户端一侧,确认下面这个开关出现在 /etc/rc.conf里头: nfs_client_enable="YES" /etc/exports文件指定了哪个文件系统 NFS应该输出(有时被称为“共享”)。 /etc/exports里面每行指定一个输出的文件系统和哪些机器可以访问该文件系统。在指定机器访问权限的同时,访问选项开关也可以被指定。 NFS服务可以实现其中某一台机器更新文件,另外几台也会实时的去更新 NFS原理图 RPC服务在centos5版本和centos5之前的版本叫做portmap,在centos6和centos7中修改服务名称叫做rpcbind NFS服务虽然它启动了服务,但是它不监听端口,最终监听端口实现tcp/ip通信的这个过程是由rpcbind服务所产生的RPC协议实现的,rpcbind会监听111端口 NFS服务需要借助RPC协议 二、NFS服务端安装配置 安装NFS服务需要在两台机器上分别安装客户端和服务端(说明:linux-01服务端IP:192.168.238.128 linux-02客户端IP:192.168.238.130) 服务端机器上需要安装 nfs-utils 和 rpcbind 两个包 #yum install -y nfs-utils rpcbind #vim /etc/exports //编辑/etc/exports 文件,在里面加入如下一行内容 /home/nfstestdir #192.168.238.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) #mkdir /home/nfstestdir //启动服务之前要先创建分享的目录nfstestdir #chmod 777 /home/nfstestdir //修改目录权限为777,修改777权限的目的是为了方便做实验 #systemctl start rpcbind //启动rpcbind服务 #ps aux |grep rpc 或者 # netstat -lntp 查看rpcbind服务是否启动或者111端口是否被监听 #systemctl start nfs //启动nfs服务 #ps aux |grep nfs //查看nfs服务是否起来 #ps aux |grep rpc //可以看到rpc.statd [rpciod] rpc.mountd rpc.idmapd 这几个服务都起来了 #systemctl enable nfs //nfs服务开机启动 客户端也需要安装 nfs-utils 包 #yum install -y nfs-utils #systemctl start rpcbind //启动rpcbind服务 #netstat -lntp //查看111端口是否启动 三、NFS配置选项 #cat /etc/exports //下面是对exports文件进行详细解释 /home/nfstestdir 192.168.238.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) rw 是读写,read和write的意思 ro 是只读,read和only的意思 sync 是同步模式,内存数据实时写入磁盘,但这样会相应的降低磁盘的效率 async 是非同步模式,每隔一段时间会把数据刷到磁盘里去,好处是能够保证磁盘的效率,不好的是如果断电,数据会丢掉一小部分 no_root_squash 是客户端挂载NFS共享目录后,root用户不受约束,权限很大,比如使用root用户去共享目录下读写文件时,它不受限制,相等于root在本地的磁盘上读写 root_squash 与上面的选项相对,客户端上的root用户受到约束,被限定成某个普通用户 all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户 anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid #showmount -e 192.168.238.128 //假如知道一台机器做了NFS的服务,想查看有没有权限,可以使用showmount -e 命令来查看 clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host) //报错 报错原因是 不能和NFS服务端的rpcbind的111端口通信,可能是NFS服务端的rpcbind服务没开,也可能是防火墙导致,需要暂时关闭客户端和服务端的防火墙(防火墙放行111端口不一定客户端和服务端能进行通信,因为它的端口不固定),并且selinux也要关闭 #systemctl stop firewalld //记得是服务端和客户端的防火墙都必须关闭 #getenforce //查看selinux是否关闭 #setenforce 0 //临时关闭selinux #showmount -e 192.168.238.128 上图可以看到远程服务端192.168.238.128这台机器共享的目录是/home/nfstestdir ,对192.168.238.0/24这个IP段共享 #mount -t nfs 192.168.238.128:/home/nfstestdir /mnt/ //mount -t nfs 服务端IP:服务端共享目录 挂载的目录 #df -h //挂载完之后查看下是否挂载成功 在客户端挂载的目录/mnt下创建随便创建一个文件,验证下这个文件是否实时同步到服务端的共享目录/home/nfstestdir/下面去 客户端操作:随意在挂载点/mnt目录下创建一个test.111文件 服务端验证:可以看到是实时同步的 因为在之前/etc/exports配置文件中定义过anonuid=1000,anongid=1000,意思就是一旦挂载了NFS共享的目录,不管用哪一个用户来操作,它都会以1000uid和1000gid的用户反映过来,属主和属组都是1000 /home/nfstestdir 192.168.238.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000) #id user1 //可以使用id 用户名在客户端和服务端来进行验证 uid=1000(user1) gid=1000(user1) groups=1000(user1),1005(grp2),1012(grp1)