网络文件系统(NFS)也称为客户端/服务器文件系统,是一种流行的跨平台分布式文件系统协议,用于通过网络导出本地文件系统,以便客户端可以通过网络与其他用户共享目录和文件并进行交互与它们一样,好像它们已安装在本地。
在CentOS / RHEL 8中,受支持的NFS版本是NFSv3和NFSv4,默认的NFS版本是4.2,其特征是支持访问控制列表(ACL),服务器端副本,稀疏文件,空间保留,标记为NFS,布局增强和多得多。
在本文中,您将学习如何在CentOS / RHEL 8 Linux发行版上安装和配置NFS服务器和NFS客户端。
KVM主机 | NFS客户端 | |
---|---|---|
主机名 | nfsserver | nfsclient |
IP信息 | 192.168.6.58 | 192.168.6.149 |
1.首先在NFS服务器上安装所需的软件包。软件包是nfs-utils,它为内核NFS服务器和相关工具(例如包含showmount程序)提供了守护程序。
运行以下命令以将软件包安装在NFS服务器上(如果以非root用户身份管理系统,请使用sudo)。
# dnf install nfs-utils -y
2.安装完成后,启动nfs-server服务,使其能够在系统引导时自动启动,然后使用systemctl命令验证其状态。
# systemctl start nfs-server.service
# systemctl enable nfs-server.service
# systemctl status nfs-server.service
systemctl restart nfs-server.service
请注意,运行NFS服务器或装入NFS共享所需的其他服务(例如nfsd,nfs-idmapd,rpcbind,rpc.mountd,lockd,rpc.statd,rpc.rquotad和**rpc.idmapd)**将自动启动。
NFS服务器的配置文件为:
/etc/nfs.conf – NFS守护程序和工具的主要配置文件。
/etc/nfsmount.conf-NFS安装配置文件。
3.接下来,创建要在NFS服务器上导出或共享的文件系统。本文中,我们将创建四个文件系统,其中三个部门的三个部门的工作人员使用三个文件系统:运维,网络和数据库以及共享文件,而另一个则用于root用户备份。
[root@nfsserver mnt]# mkdir -p /mnt/nfs_shares/{system,network,dba}
[root@nfsserver mnt]# mkdir -p /mnt/backups
[root@nfsserver mnt]# ls -l /mnt/nfs_shares/
total 0
drwxr-xr-x. 2 root root 6 Dec 6 21:32 dba
drwxr-xr-x. 2 root root 6 Dec 6 21:32 network
drwxr-xr-x. 2 root root 6 Dec 6 21:32 system
[root@nfsserver mnt]# ls -l /mnt/
total 0
drwxr-xr-x. 2 root root 6 Dec 6 21:32 backups
drwxr-xr-x. 5 root root 46 Dec 6 21:32 nfs_shares
[root@nfsserver mnt]#
4.然后将以上文件系统导出到NFS服务器/etc/exports配置文件中,确定NFS客户端可以访问到本地物理文件系统。
[root@nfsserver mnt]# vi /etc/exports
/mnt/nfs_shares /system 192.168.6.0/24(rw,sync)
/mnt/nfs_shares /network 192.168.6.0/24(rw,sync)
/mnt/nfs_shares /dba 192.168.6.0/24(rw,sync)
/mnt/backups 192.168.6.149/24(rw,sync,no_all_squash,root_squash)
以下是一些导出选项
5.要导出上述文件系统,请运行带有以下标志的exportfs命令:
-a
导出或取消导出所有目录,-r
意味着重新导出所有目录,
将**/ var/lib/nfs/etab与/etc/exports和/etc/ exports下的文件同步。 d和-v**启用详细输出。
[root@nfsserver mnt]# exportfs -arv
6.要显示当前的导出列表,请运行以下命令。请注意,导出表还应用了一些未明确定义的默认导出选项,如以下屏幕截图所示。
[root@nfsserver mnt]# exportfs -s
列出NFS共享
7.接下来,如果您正在运行Firewalld服务,则需要允许通过防火墙的流量通过必要的NFS服务(mountd,nfs,rpc-bind),然后重新加载防火墙规则以应用更改,如下所示。
[root@nfsserver mnt]# firewall-cmd --permanent --add-service=nfs
[root@nfsserver mnt]# firewall-cmd --permanent --add-service=rpc-bind
[root@nfsserver mnt]# firewall-cmd --permanent --add-service=mountd
[root@nfsserver mnt]# firewall-cmd --reload
[root@nfsserver mnt]# firewall-cmd --list-all
[root@nfsserver mnt]# firewall-cmd --state #查看状态
8.在客户端节点上,安装必要的软件包以访问客户端系统上的NFS共享。运行命令:
[root@nfsclient ~]# dnf -y install nfs-utils nfs4-acl-tools
9.然后运行showmount命令以显示NFS服务器的安装信息。该命令在客户端上输出导出的文件系统,如屏幕截图所示。
[root@nfsclient ~]# showmount -e 192.168.6.58
**10.**接下来,创建用于挂载远程NFS文件系统的本地文件系统/目录,并将其挂载为ntf文件系统。
[root@nfsclient ~]#mkdir -p /mnt/backups
[root@nfsclient ~]#mount -t nfs 192.168.6.58:/mnt/backups /mnt/backups
11.然后通过运行mount命令和filter nfs mounts确认已安装远程文件系统。
[root@nfsclient ~]# mount | grep nfs
12.要使挂载即使在系统重新引导后也能够持久进行,请运行以下命令在/ etc / fstab中输入相应的条目。
# echo "192.168.6.58:/mnt/backups /mnt/backups nfs defaults 0 0">>/etc/fstab
# cat /etc/fstab
13. 通过在服务器上创建文件来测试NFS设置是否工作正常,并检查是否可以在客户端中看到该文件。
# touch /mnt/backups/file_created_on_server.text [On NFS Server]
# ls -l /mnt/backups/file_created_on_server.text [On NFS client]
[1].NFS服务端创建文件
[2].NFS 客户端查看文件
然后进行相反的操作,
# touch /mnt/backups/file_created_on_client.text [On NFS Client]
# ls -l /mnt/backups/file_created_on_client.text [On NFS Server]
[3].NFS客户端创建文件
[root@nfsclient backups]# touch /mnt/backups/file_created_on_client.text
[root@nfsclient backups]# echo "client created file" > /mnt/backups/file_created_on_client.text
[root@nfsclient backups]#
提示:无权限,查找可能是因为服务端没有读写权限
修复方法:给NFS共享的目录添加权限即可, chmod go+w /mnt/backups/ 重启NFS和rpcbind服务后生效
[4].NFS服务端查看创建文件
[root@nfsserver mnt]# ls /mnt/backups/file_created_on_client.text
/mnt/backups/file_created_on_client.text
[root@nfsserver mnt]# cat /mnt/backups/file_created_on_client.text
client created file
**14.**在客户端上卸载远程文件系统。
# umount /mnt/backups
请注意,如下面的屏幕快照所示,如果要在远程文件系统中进行操作,则无法卸载该文件系统。
选项 | 描述 |
---|---|
w | 允许在NFS卷上进行读写请求。 |
RO | 仅允许读取NFS卷上的请求。 |
同步 | 仅在将更改提交到稳定存储后才回复请求。(默认) |
异步的 | 此选项允许NFS服务器违反NFS协议并在对该请求进行的任何更改提交到稳定存储之前答复该请求。 |
安全 | 此选项要求请求源自小于IPPORT_RESERVED(1024)的Internet端口。(默认) |
不安全的 | 此选项接受所有端口。 |
wdelay | 如果它怀疑另一个相关的写请求可能正在进行中或可能很快到达,则稍微延迟向磁盘提交写请求。(默认) |
no_wdelay | 如果还设置了异步,则此选项无效。如果NFS服务器怀疑另一个相关的写请求可能正在进行中或可能很快到达,则通常会稍稍延迟向磁盘提交写请求。这样一来,就可以将多个写入请求提交到磁盘,从而提高性能。如果NFS服务器主要接收小的无关请求,则此行为实际上可能会降低性能,因此no_wdelay可用于将其关闭。 |
subtree_check | 此选项启用子树检查。(默认) |
no_subtree_check | 此选项禁用子树检查,这对安全性有轻微的影响,但在某些情况下可以提高可靠性。 |
root_squash | 将请求从uid / gid 0映射到匿名uid / gid。请注意,这不适用于可能同样敏感的任何其他uid或gid,例如用户bin或组人员。 |
no_root_squash | 关闭根挤压。此选项主要对无磁盘客户端有用。 |
all_squash | 将所有uid和gid映射到匿名用户。对于NFS导出的公共FTP目录,新闻假脱机目录等有用。 |
no_all_squash | 关闭所有壁球。(默认) |
anonuid = UID | 这些选项显式设置匿名帐户的uid和gid。此选项主要对PC / NFS客户端有用,在PC / NFS客户端中,您可能希望所有请求看起来都是来自一个用户的。作为示例,请考虑以下示例部分中/ home / joe的导出条目,该条目将所有请求映射到uid 150。 |
anongid = GID | 阅读以上内容(anonuid = UID) |