环境介绍

NFS网络文件系统服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,从而使得本地主机(Linux客户端)基于TCP/IP协议,像使用本地主机上的资源那样读写远程Linux系统上的共享文件。

安装及配置

  1. 安装nfs软件
[root@elk ~]# yum -y install nfs-utils
已加载插件:fastestmirror
Determining fastest mirrors
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
updates/7/x86_64/primary_db | 13 MB 00:00:35
正在解决依赖关系
--> 正在检查事务
---> 软件包 nfs-utils.x86_64.1.1.3.0-0.68.el7.2 将被 安装
--> 正在处理依赖关系 libtirpc >= 0.2.4-0.7,它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在处理依赖关系 gssproxy >= 0.7.0-3,它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在处理依赖关系 rpcbind,它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在处理依赖关系 quota,它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在处理依赖关系 libnfsidmap,它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在处理依赖关系 libevent,它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在处理依赖关系 keyutils,它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在处理依赖关系 libtirpc.so.1()(64bit),它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在处理依赖关系 libnfsidmap.so.0()(64bit),它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在处理依赖关系 libevent-2.0.so.5()(64bit),它被软件包 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 需要
--> 正在检查事务
---> 软件包 gssproxy.x86_64.0.0.7.0-30.el7_9 将被 安装
--> 正在处理依赖关系 libini_config >= 1.3.1-31,它被软件包 gssproxy-0.7.0-30.el7_9.x86_64 需要
--> 正在处理依赖关系 libverto-module-base,它被软件包 gssproxy-0.7.0-30.el7_9.x86_64 需要
--> 正在处理依赖关系 libref_array.so.1(REF_ARRAY_0.1.1)(64bit),它被软件包 gssproxy-0.7.0-30.el7_9.x86_64 需要
--> 正在处理依赖关系 libini_config.so.3(INI_CONFIG_1.2.0)(64bit),它被软件包 gssproxy-0.7.0-30.el7_9.x86_64 需要
--> 正在处理依赖关系 libini_config.so.3(INI_CONFIG_1.1.0)(64bit),它被软件包 gssproxy-0.7.0-30.el7_9.x86_64 需要
--> 正在处理依赖关系 libref_array.so.1()(64bit),它被软件包 gssproxy-0.7.0-30.el7_9.x86_64 需要
--> 正在处理依赖关系 libini_config.so.3()(64bit),它被软件包 gssproxy-0.7.0-30.el7_9.x86_64 需要
--> 正在处理依赖关系 libcollection.so.2()(64bit),它被软件包 gssproxy-0.7.0-30.el7_9.x86_64 需要
--> 正在处理依赖关系 libbasicobjects.so.0()(64bit),它被软件包 gssproxy-0.7.0-30.el7_9.x86_64 需要
---> 软件包 keyutils.x86_64.0.1.5.8-3.el7 将被 安装
---> 软件包 libevent.x86_64.0.2.0.21-4.el7 将被 安装
---> 软件包 libnfsidmap.x86_64.0.0.25-19.el7 将被 安装
---> 软件包 libtirpc.x86_64.0.0.2.4-0.16.el7 将被 安装
---> 软件包 quota.x86_64.1.4.01-19.el7 将被 安装
--> 正在处理依赖关系 quota-nls = 1:4.01-19.el7,它被软件包 1:quota-4.01-19.el7.x86_64 需要
--> 正在处理依赖关系 tcp_wrappers,它被软件包 1:quota-4.01-19.el7.x86_64 需要
---> 软件包 rpcbind.x86_64.0.0.2.0-49.el7 将被 安装
--> 正在检查事务
---> 软件包 libbasicobjects.x86_64.0.0.1.1-32.el7 将被 安装
---> 软件包 libcollection.x86_64.0.0.7.0-32.el7 将被 安装
---> 软件包 libini_config.x86_64.0.1.3.1-32.el7 将被 安装
--> 正在处理依赖关系 libpath_utils.so.1(PATH_UTILS_0.2.1)(64bit),它被软件包 libini_config-1.3.1-32.el7.x86_64 需要
--> 正在处理依赖关系 libpath_utils.so.1()(64bit),它被软件包 libini_config-1.3.1-32.el7.x86_64 需要
---> 软件包 libref_array.x86_64.0.0.1.5-32.el7 将被 安装
---> 软件包 libverto-tevent.x86_64.0.0.2.5-4.el7 将被 安装
---> 软件包 quota-nls.noarch.1.4.01-19.el7 将被 安装
---> 软件包 tcp_wrappers.x86_64.0.7.6-77.el7 将被 安装
--> 正在检查事务
---> 软件包 libpath_utils.x86_64.0.0.2.1-32.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

========================================================================================================================================================
Package 架构 版本 源 大小
========================================================================================================================================================
正在安装:
nfs-utils x86_64 1:1.3.0-0.68.el7.2 updates 413 k
为依赖而安装:
gssproxy x86_64 0.7.0-30.el7_9 updates 111 k
keyutils x86_64 1.5.8-3.el7 base 54 k
libbasicobjects x86_64 0.1.1-32.el7 base 26 k
libcollection x86_64 0.7.0-32.el7 base 42 k
libevent x86_64 2.0.21-4.el7 base 214 k
libini_config x86_64 1.3.1-32.el7 base 64 k
libnfsidmap x86_64 0.25-19.el7 base 50 k
libpath_utils x86_64 0.2.1-32.el7 base 28 k
libref_array x86_64 0.1.5-32.el7 base 27 k
libtirpc x86_64 0.2.4-0.16.el7 base 89 k
libverto-tevent x86_64 0.2.5-4.el7 base 9.0 k
quota x86_64 1:4.01-19.el7 base 179 k
quota-nls noarch 1:4.01-19.el7 base 90 k
rpcbind x86_64 0.2.0-49.el7 base 60 k
tcp_wrappers x86_64 7.6-77.el7 base 78 k

事务概要
========================================================================================================================================================
安装 1 软件包 (+15 依赖软件包)

总下载量:1.5 M
安装大小:4.3 M
Downloading packages:
(1/16): libbasicobjects-0.1.1-32.el7.x86_64.rpm | 26 kB 00:00:03
(2/16): gssproxy-0.7.0-30.el7_9.x86_64.rpm | 111 kB 00:00:03
(3/16): keyutils-1.5.8-3.el7.x86_64.rpm | 54 kB 00:00:03
(4/16): libcollection-0.7.0-32.el7.x86_64.rpm | 42 kB 00:00:00
(5/16): libevent-2.0.21-4.el7.x86_64.rpm | 214 kB 00:00:00
(6/16): libnfsidmap-0.25-19.el7.x86_64.rpm | 50 kB 00:00:00
(7/16): libpath_utils-0.2.1-32.el7.x86_64.rpm | 28 kB 00:00:00
(8/16): libref_array-0.1.5-32.el7.x86_64.rpm | 27 kB 00:00:00
(9/16): libtirpc-0.2.4-0.16.el7.x86_64.rpm | 89 kB 00:00:00
(10/16): libini_config-1.3.1-32.el7.x86_64.rpm | 64 kB 00:00:00
(11/16): quota-4.01-19.el7.x86_64.rpm | 179 kB 00:00:00
(12/16): libverto-tevent-0.2.5-4.el7.x86_64.rpm | 9.0 kB 00:00:00
(13/16): quota-nls-4.01-19.el7.noarch.rpm | 90 kB 00:00:00
(14/16): tcp_wrappers-7.6-77.el7.x86_64.rpm | 78 kB 00:00:00
(15/16): rpcbind-0.2.0-49.el7.x86_64.rpm | 60 kB 00:00:00
(16/16): nfs-utils-1.3.0-0.68.el7.2.x86_64.rpm | 413 kB 00:00:02
--------------------------------------------------------------------------------------------------------------------------------------------------------
总计 217 kB/s | 1.5 MB 00:00:07
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : libbasicobjects-0.1.1-32.el7.x86_64 1/16
正在安装 : libref_array-0.1.5-32.el7.x86_64 2/16
正在安装 : libcollection-0.7.0-32.el7.x86_64 3/16
正在安装 : libtirpc-0.2.4-0.16.el7.x86_64 4/16
正在安装 : rpcbind-0.2.0-49.el7.x86_64 5/16
正在安装 : 1:quota-nls-4.01-19.el7.noarch 6/16
正在安装 : tcp_wrappers-7.6-77.el7.x86_64 7/16
正在安装 : 1:quota-4.01-19.el7.x86_64 8/16
正在安装 : keyutils-1.5.8-3.el7.x86_64 9/16
正在安装 : libevent-2.0.21-4.el7.x86_64 10/16
正在安装 : libnfsidmap-0.25-19.el7.x86_64 11/16
正在安装 : libpath_utils-0.2.1-32.el7.x86_64 12/16
正在安装 : libini_config-1.3.1-32.el7.x86_64 13/16
正在安装 : libverto-tevent-0.2.5-4.el7.x86_64 14/16
正在安装 : gssproxy-0.7.0-30.el7_9.x86_64 15/16
正在安装 : 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 16/16
验证中 : libtirpc-0.2.4-0.16.el7.x86_64 1/16
验证中 : gssproxy-0.7.0-30.el7_9.x86_64 2/16
验证中 : 1:quota-4.01-19.el7.x86_64 3/16
验证中 : libverto-tevent-0.2.5-4.el7.x86_64 4/16
验证中 : libpath_utils-0.2.1-32.el7.x86_64 5/16
验证中 : libnfsidmap-0.25-19.el7.x86_64 6/16
验证中 : libevent-2.0.21-4.el7.x86_64 7/16
验证中 : keyutils-1.5.8-3.el7.x86_64 8/16
验证中 : tcp_wrappers-7.6-77.el7.x86_64 9/16
验证中 : libcollection-0.7.0-32.el7.x86_64 10/16
验证中 : 1:quota-nls-4.01-19.el7.noarch 11/16
验证中 : libref_array-0.1.5-32.el7.x86_64 12/16
验证中 : libbasicobjects-0.1.1-32.el7.x86_64 13/16
验证中 : 1:nfs-utils-1.3.0-0.68.el7.2.x86_64 14/16
验证中 : libini_config-1.3.1-32.el7.x86_64 15/16
验证中 : rpcbind-0.2.0-49.el7.x86_64 16/16

已安装:
nfs-utils.x86_64 1:1.3.0-0.68.el7.2

作为依赖被安装:
gssproxy.x86_64 0:0.7.0-30.el7_9 keyutils.x86_64 0:1.5.8-3.el7 libbasicobjects.x86_64 0:0.1.1-32.el7 libcollection.x86_64 0:0.7.0-32.el7
libevent.x86_64 0:2.0.21-4.el7 libini_config.x86_64 0:1.3.1-32.el7 libnfsidmap.x86_64 0:0.25-19.el7 libpath_utils.x86_64 0:0.2.1-32.el7
libref_array.x86_64 0:0.1.5-32.el7 libtirpc.x86_64 0:0.2.4-0.16.el7 libverto-tevent.x86_64 0:0.2.5-4.el7 quota.x86_64 1:4.01-19.el7
quota-nls.noarch 1:4.01-19.el7 rpcbind.x86_64 0:0.2.0-49.el7 tcp_wrappers.x86_64 0:7.6-77.el7

完毕!
  1. 关闭防火墙和selinux
[root@elk ~]# iptables -F
[root@elk ~]# iptables-save
[root@elk ~]# systemctl stop firewalld.service
[root@elk ~]# systemctl disable firewalld.service
[root@elk ~] setenforce 0
[root@elk ~] #getenforce
Permissive
[root@elk ~]# vi /etc/sysconfig/selinux
SELINUX=disabled
[root@elk ~]# reboot
[root@elk ~]# getenforce
Disabled
  1. 在NFS服务器上建立用于NFS文件共享的目录,并设置足够的权限确保其他人也有写入权限。
[root@elk ~]# mkdir /var/nfs
[root@elk ~]# chmod -R 777 /var/nfs/
  1. NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。我们可以按照“共享目录的路径 允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应的权限。例如,如果想要把/nfsfile目录共享给192.168.10.0/24网段内的所有主机,让这些主机都拥有读写权限,在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失,以及把来访客户端root管理员映射为本地的匿名用户等,则可以按照下面命令中的格式,将表12-7中的参数写到NFS服务程序的配置文件中。

参数

作用

ro

只读

rw

读写

root_squash

当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户

no_root_squash

当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员

all_squash

无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户

sync

同时将数据写入到内存与硬盘中,保证不丢失数据

async

优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

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

[root@elk ~]# vim /etc/exports
/var/nfs *(rw,sync,root_squash)

在NFS服务的配置文件中巧用通配符能够实现很多便捷功能,就比如匹配IP地址就有三种方法:

第一种是直接写号,代表任何主机都可以访问;

第二种则是192.168.10.通配格式,代表来自192.168.10.0/24网段的主机;

第三种则是直接写对方的IP地址,如192.168.10.20,代表仅允许某个主机进行访问。

  1. 启动和启用NFS服务程序。由于在使用NFS服务进行文件共享之前,需要使用RPC(Remote Procedure Call,远程过程调用)服务将NFS服务器的IP地址和端口号等信息发送给客户端。因此,在启动NFS服务之前
[root@elk ~]# systemctl restart rpcbind
[root@elk ~]# systemctl enable rpcbind
[root@elk ~]# systemctl start nfs-server
[root@elk ~]# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

NFS客户端的配置步骤也十分简单。先使用showmount命令查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。

参数

作用

-e

显示NFS服务器的共享列表

-a

显示本机挂载的文件资源的情况NFS资源的情况

-v

显示版本号

root@elk ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/var/nfs *

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

[root@elk ~]# mkdir /var/nfsfile
[root@elk ~]# mount -t nfs 192.168.170.134:/var/nfs /var/nfsfile
[root@elk ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 900M 0 900M 0% /dev
tmpfs 910M 435M 476M 48% /dev/shm
tmpfs 910M 9.7M 901M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda2 70G 15G 56G 21% /
/dev/sda1 10G 143M 9.9G 2% /boot
/dev/sda3 16G 33M 16G 1% /home
tmpfs 182M 0 182M 0% /run/user/1004
tmpfs 182M 0 182M 0% /run/user/0
192.168.170.134:/var/nfs 70G 15G 56G 21% /var/nfsfile

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

[root@elk ~]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Fri Sep 24 14:02:17 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=7fe12c48-3968-403b-9905-d0cf7bbb7643 / xfs defaults 0 0
UUID=e31df5ce-846d-4df7-8dd2-410c14baa952 /boot xfs defaults 0 0
UUID=dfc40aff-2407-41eb-87e8-8a6eaf672979 /home xfs defaults 0 0
UUID=c807754e-7f7b-4234-b3c6-7096b053e92b swap swap defaults 0 0
192.168.170.134:/var/nfs /var/nfsfile nfs defaults 0 0

结束之有话想说

既然看完了那就赶紧去试试吧骚年。👊