12.2 NFS网络文件系统

如果大家觉得Samba服务程序的配置太麻烦,而且恰巧需要共享文件的主机都是Linux系统,刘遄老师非常推荐大家在客户端部署NFS服务来共享文件。NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。

由于RHEL 7系统中默认已经安装了NFS服务,外加NFS服务的配置步骤也很简单,因此刘遄老师在授课时会将NFS戏谑为Need For Speed。接下来,我们准备配置NFS服务。首先请使用Yum软件仓库检查自己的RHEL 7系统中是否已经安装了NFS软件包:

  1. [root@linuxprobe ~]# yum install nfs-utils
  2. Loaded plugins: langpacks, product-id, subscription-manager
  3. (1/2): rhel7/group_gz | 134 kB 00:00
  4. (2/2): rhel7/primary_db | 3.4 MB 00:00
  5. Package 1:nfs-utils-1.3.0-0.el7.x86_64 already installed and latest version
  6. Nothing to do

第1步:为了检验NFS服务配置的效果,我们需要使用两台Linux主机(一台充当NFS服务器,一台充当NFS客户端),并按照表12-6来设置它们所使用的IP地址。

表12-6 两台Linux主机所使用的操作系统以及IP地址

主机名称操作系统IP地址
NFS服务端RHEL 7192.168.10.10
NFS客户端RHEL 7192.168.10.20

另外,不要忘记清空NFS服务器上面iptables防火墙的默认策略,以免默认的防火墙策略禁止正常的NFS共享服务。

  1. [root@linuxprobe ~]# iptables -F
  2. [root@linuxprobe ~]# service iptables save
  3. iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

第2步:在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限。

  1. [root@linuxprobe ~]# mkdir /nfsfile
  2. [root@linuxprobe ~]# chmod -Rf 777 /nfsfile
  3. [root@linuxprobe ~]# echo "welcome to linuxprobe.com" > /nfsfile/readme

第3步:NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。我们可以按照“共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。

例如,如果想要把/nfsfile目录共享给192.168.10.0/24网段内的所有主机,让这些主机都拥有读写权限,在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失,以及把来访客户端root管理员映射为本地的匿名用户等,则可以按照下面命令中的格式,将表12-7中的参数写到NFS服务程序的配置文件中。

表12-7 用于配置NFS服务程序配置文件的参数

参数作用
ro只读
rw读写
root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
sync同时将数据写入到内存与硬盘中,保证不丢失数据
async优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

请注意,NFS客户端地址与权限之间没有空格。

  1. [root@linuxprobe ~]# vim /etc/exports
  2. /nfsfile 192.168.10.*(rw,sync,root_squash)

第4步:启动和启用NFS服务程序。由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,在启动NFS服务之前,还需要顺带重启并启用rpcbind服务程序,并将这两个服务一并加入开机启动项中。

  1. [root@linuxprobe ~]# systemctl restart rpcbind
  2. [root@linuxprobe ~]# systemctl enable rpcbind
  3. [root@linuxprobe ~]# systemctl start nfs-server
  4. [root@linuxprobe ~]# systemctl enable nfs-server
  5. ln -s '/usr/lib/systemd/system/nfs-server.service' '/etc/systemd/system/nfs.target.wants/nfs-server.service'

NFS客户端的配置步骤也十分简单。先使用showmount命令(以及必要的参数,见表12-8)查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。

表12-8 showmount命令中可用的参数以及作用

参数作用
-e显示NFS服务器的共享列表
-a显示本机挂载的文件资源的情况NFS资源的情况
-v显示版本号
  1. [root@linuxprobe ~]# showmount -e 192.168.10.10
  2. Export list for 192.168.10.10:
  3. /nfsfile 192.168.10.*

然后在NFS客户端创建一个挂载目录。使用mount命令并结合-t参数,指定要挂载的文件系统的类型,并在命令后面写上服务器的IP地址、服务器上的共享目录以及要挂载到本地系统(即客户端)的目录。

  1. [root@linuxprobe ~]# mkdir /nfsfile
  2. [root@linuxprobe ~]# mount -t nfs 192.168.10.10:/nfsfile /nfsfile

挂载成功后就应该能够顺利地看到在执行前面的操作时写入的文件内容了。如果希望NFS文件共享服务能一直有效,则需要将其写入到fstab文件中:

  1. [root@linuxprobe ~]# cat /nfsfile/readme
  2. welcome to linuxprobe.com
  3. [root@linuxprobe ~]# vim /etc/fstab
  4. #
  5. # /etc/fstab
  6. # Created by anaconda on Wed May 4 19:26:23 2017
  7. #
  8. # Accessible filesystems, by reference, are maintained under '/dev/disk'
  9. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
  10. #
  11. /dev/mapper/rhel-root / xfs defaults 1 1
  12. UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults 1 2
  13. /dev/mapper/rhel-swap swap swap defaults 0 0
  14. /dev/cdrom /media/cdrom iso9660 defaults 0 0
  15. 192.168.10.10:/nfsfile /nfsfile nfs defaults 0 0