Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
第 8 章 网络文件系统 (NFS)
网络文件系统(NFS )允许远程主机通过网络挂载文件系统,并像在本地挂载这些文件系统一样与这些文件系统交互。这使系统管理员能够将资源整合到网络的集中服务器上。
本章重点介绍基本的 NFS 概念和补充信息。
8.1. NFS 简介
目前,Red Hat Enterprise Linux 包括两个主要版本的 NFS:
- NFS 版本 3(NFSv3)支持安全的异步写入,并在错误处理时比之前的 NFSv2 更强大。它还支持 64 位文件大小和偏移,允许客户端访问 2 GB 以上的文件数据。
- NFS 版本 4(NFSv4)通过防火墙和 Internet,不再需要 an rpcbind 服务,支持 ACL,并且利用有状态操作。
自 Red Hat Enterprise Linux 7.4 版本起,Red Hat Enterprise Linux 4.2(NFSv4.2)完全支持 NFS 版本 4.2(NFSv4.2)。
以下是 Red Hat Enterprise Linux 中的 NFSv4.2 的功能:
- 稀疏文件:验证文件的空间效率,允许占位符提高存储效率。它是一个含有一个或多个漏洞的文件;漏洞是未分配或未初始化的数据块,仅由零组成。
lseek()
在 NFSv4.2 中操作,支持seek_hole()
和seek_data()
,允许应用程序映射稀疏文件中的漏洞位置。 - 空间保留:它允许存储服务器保留可用空间,这样可防止服务器耗尽空间。NFSv4.2 支持
allocate()
操作来保留空间、为取消保留空间的deallocate()
操作,以及预分配或取消分配文件中空间的fallocate()
操作。 - 标记的 NFS:强制实施数据访问权限,并为 NFS 文件系统上的个别文件启用客户端和服务器之间的 SELinux 标签。
- 布局增强:NFSv4.2 提供新的操作
layoutstats()
,客户端可以使用它来通知元数据服务器与布局的通信。
早于 7.4 的 Red Hat Enterprise Linux 版本支持版本 4.1。
以下是 NFSv4.1 的功能:
- 提高网络的性能和安全性,还包括对 Parallel NFS(pNFS)的客户端支持。
- 回调不再需要单独的 TCP 连接,这样可允许 NFS 服务器即使无法联系客户端也向 NFS 服务器授予保护权。例如,当 NAT 或防火墙干扰时。
- 它提供了一次精确的语义(除重新启动操作外),防止出现先前的问题,即:如果回复丢失并且操作被发送两次,某些操作可能会返回不准确的结果。
默认情况下,NFS 客户端尝试使用 NFSv4.1 挂载,并在服务器不支持 NFSv4.1 时回退到 NFSv4.0。当服务器不支持 NFSv4.0 时,挂载稍后会回退到 NFSv3。
注意
红帽不再支持 NFS 版本 2(NFSv2)。
所有版本的 NFS 都可以使用通过 IP 网络运行的 传输控制协议 (TCP),NFSv4 需要此协议。NFSv3 可以使用通过 IP 网络运行的 用户数据报协议(UDP )提供客户端和服务器之间的无状态网络连接。
将 NFSv3 与 UDP 搭配使用时,无状态 UDP 连接(在正常情况下)协议开销比 TCP 少。这可在非常干净、不相邻的网络上转化为更佳的性能。但是,由于 UDP 无状态,因此如果服务器意外停机,UDP 客户端将继续通过服务器的请求使网络饱和。此外,当使用 UDP 丢失帧时,必须重新传输整个 RPC 请求;使用 TCP 时,仅需要重新传输丢失的帧。因此,在连接到 NFS 服务器时,TCP 是首选的协议。
挂载和锁定协议已合并到 NFSv4 协议中。该服务器还会侦听已知的 TCP 端口 2049。因此,NFSv4 不需要与 rpcbind交互[1]、lockd 和 rpc.statd 守护进程.NFS 服务器上仍然需要使用 The rpc.mountd 守护进程来设置导出,但不涉及任何无线操作。
注意
TCP 是 Red Hat Enterprise Linux 下 NFS 版本 3 的默认传输协议。UDP 可以根据需要用于兼容性目的,但不建议广泛使用。NFSv4 需要 TCP.
所有 RPC/NFS 后台程序都有一个 "-p" 命令行选项,可设置端口,从而简化防火墙配置。
TCP 打包程序授予客户端访问权限后,NFS 服务器引用
/etc/exports
配置文件,以确定是否允许客户端访问任何导出的文件系统。一旦被验证,所有文件和目录操作都对用户有效。
重要
为了使 NFS 使用启用了防火墙的默认 Red Hat Enterprise Linux 安装,请使用默认 TCP 端口 2049 配置 IPTables。如果没有正确的 IPTables 配置,NFS 无法正常工作。
NFS 初始化脚本和 rpc.nfsd 进程现在允许在系统启动时绑定到任何指定端口。但是,如果端口不可用,或者与其他守护进程冲突,这可能会出错。
8.1.1. 所需的服务
Red Hat Enterprise Linux 使用内核级支持和守护进程进程的组合来提供 NFS 文件共享。所有 NFS 版本都依赖于客户端和服务器之间的 远程过程调用 (RPC)。红帽企业 Linux 7 中的 RPC 服务由 rpcbind 服务控制。要共享或者挂载 NFS 文件系统,下列服务根据所使用的 NFS 版本而定:
注意
portmap 服务用于将 Red Hat Enterprise Linux 早期版本的 RPC 程序号映射到 IP 地址端口号。现在,该服务在 Red Hat Enterprise Linux 7 中被 rpcbind 替代来启用 IPv6 支持。
- nfs
- systemctl start nfs 启动 NFS 服务器和相应的 RPC 进程,以服务对共享 NFS 文件系统的请求。
- nfslock
- systemctl start nfs-lock 可激活强制服务,启动适当的 RPC 进程,允许 NFS 客户端锁定服务器上的文件。
- rpcbind
- rpcbind 接受本地 RPC 服务的端口保留。这些端口随后可用(或公告),以便对应的远程 RPC 服务可以访问它们。rpcbind 响应对 RPC 服务的请求,并设置与请求的 RPC 服务的连接。这不能与 NFSv4 一起使用。
以下 RPC 进程可促进 NFS 服务:
- rpc.mountd
- NFS 服务器使用这个过程来处理来自 NFSv3 客户端的 MOUNT 请求。它检查所请求的 NFS 共享是否目前由 NFS 服务器导出,并且允许客户端访问它。如果允许挂载请求,rpc.mountd 服务器会以
Success
状态回复,并为这个 NFS 共享提供File-Handle
返回 NFS 客户端。 - rpc.nfsd
- RPC.nfsd 允许定义服务器公告的显式 NFS 版本和协议。它与 Linux 内核配合使用,以满足 NFS 客户端的动态需求,例如在每次 NFS 客户端连接时提供服务器线程。这个过程对应于 nfs 服务。
- lockd
- 锁定 是在客户端和服务器上运行的内核线程。它实施 网络锁定管理器( NLM)协议,允许 NFSv3 客户端锁定服务器上的文件。每当运行 NFS 服务器以及挂载 NFS 文件系统时,它会自动启动。
- rpc.statd
- 这个过程实施 网络状态监控器 (NSM)RPC 协议,该协议可在重新启动 NFS 服务器时通知 NFS 客户端,而无需正常关闭。RPC.statd 由 nfslock 服务自动启动,不需要用户配置。这不能与 NFSv4 一起使用。
- rpc.rquotad
- 这个过程为远程用户提供用户配额信息。RPC.rquotad 由 nfs 服务自动启动,不需要用户配置。
- rpc.idmapd
- RPC.idmapd 提供 NFSv4 客户端和服务器启动,在 on-the-wire NFSv4 名称(以
user@domain
形式字符串)和本地 UID 和 GID 之间映射。要使 idmapd 使用 NFSv4 起作用,必须配置/etc/idmapd.conf
文件。至少应指定"Domain"参数,该参数定义 NFSv4 映射域。如果 NFSv4 映射域与 DNS 域名相同,可以跳过这个参数。客户端和服务器必须同意 NFSv4 映射域才能使 ID 映射正常工作。注意在红帽企业 Linux 7 中,只有 NFSv4 服务器使用 rpc.idmapd。NFSv4 客户端使用基于密钥环的 idmapper nfsidmap。nfsidmap 是一个独立程序,由内核按需调用以执行 ID 映射;它不是一个守护进程。如果 nfsidmap 出现问题,客户端会回退为使用 rpc.idmapd。有关 nfsidmap 的更多信息,请参阅 nfsidmap man page。
[1]
The rpcbind 服务取代了 portmap,这在之前版本的 Red Hat Enterprise Linux 中用于将 RPC 程序号映射到 IP 地址端口号组合。如需更多信息,请参阅 第 8.1.1 节 “所需的服务”。