本章概述了可用于通过网络访问文件系统的 NFS 服务。本章论述了了解 NFS 服务所必需的概念并介绍了 NFS 和 autofs 的最新功能。
如果系统启用了区域并且您要在非全局区域中使用此功能,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》以了解更多信息。
从 Solaris 10 发行版开始,NFS 版本 4 为缺省版本。有关 NFS 版本 4 的功能及其他更改的信息,请参阅以下内容:
此外,NFS 服务还可通过服务管理工具进行管理。可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。可以使用 svcs 命令查询该服务的状态。有关服务管理工具的更多信息,请参阅 smf(5) 手册页以及《系统管理指南:基本管理》中的第 14 章 “管理服务(概述)”。
有关任务信息,请参见设置 NFS 服务。
本节介绍使用 NFS 服务时必须了解的一些基本术语。第 6 章,访问网络文件系统(参考)中包括 NFS 服务扩展的适用范围。
术语客户机和服务器用于说明计算机在共享文件系统时承担的角色。通过网络共享它们的文件系统的计算机用作服务器。访问文件系统的计算机则视为客户机。使用 NFS 服务,任何计算机都可以访问其他任何计算机的文件系统。同时,NFS 服务还提供对其自身文件系统的访问。一台计算机可以在网络中的任何特定时间承担客户机或服务器的角色,也可以同时承担客户机和服务器的双重角色。
客户机通过挂载服务器的共享文件系统来访问服务器上的文件。客户机挂载远程文件系统时,不会复制该文件系统。不过,挂载进程会使用一系列远程过程调用,客户机将通过这些调用对服务器磁盘上的文件系统进行透明访问。该挂载与本地挂载类似。用户键入命令就像这些文件系统是本地文件系统一样。有关文件系统挂载任务的信息,请参见挂载文件系统。
通过 NFS 操作在服务器上共享文件系统后,即可从客户机对该文件系统进行访问。可以使用 autofs 自动挂载 NFS 文件系统。有关涉及 share 命令和 autofs 的任务,请参见自动文件系统共享和Autofs 管理的任务概述。
可使用 NFS 服务共享的对象包括任何整个或部分目录树或文件分层结构(包括单个文件)。计算机共享的文件分层结构不能与已共享的文件分层结构重叠。不能共享外围设备(如调制解调器和打印机)。
在大多数 UNIX 系统环境中,可共享的文件分层结构与文件系统或部分文件系统对应。但是,NFS 支持可跨多个操作系统运行,并且文件系统的概念在其他非 UNIX 环境中可能是没有意义的。因此,术语文件系统是指可使用 NFS 共享和挂载的文件或文件分层结构。
使用 NFS 服务,不同体系结构的计算机(运行不同的操作系统)可以通过网络来共享文件系统。从 MS-DOS 到 VMS 操作系统的许多平台上都已实现 NFS 支持。
由于 NFS 定义的是抽象的文件系统模型,而不是体系结构规范,因此可以在不同的操作系统上实现 NFS 环境。每个操作系统都会将 NFS 模型应用于其文件系统语义。此模型意味着文件系统操作(如读取和写入)可以正常进行,就像这些操作访问本地文件一样。
NFS 服务具有以下优点:
使多台计算机可以使用同一文件,以便网络中的每个人都可以访问相同的数据
通过使计算机共享应用程序而无需每个用户应用程序的本地磁盘空间来降低存储成本
提供数据一致性和可靠性(因为所有的用户都可以读取同一组文件)
使文件系统挂载对用户是透明的
使远程文件访问对用户是透明的
支持异构环境
减少系统管理开销
NFS 服务使文件系统的物理位置与用户无关。通过使用 NFS 实现,用户可以查看所有相关的文件,无论其位置如何。使用 NFS 服务,可以将常用文件的一个副本放在一台计算机的磁盘上,而不是放在每个系统上。所有其他系统将通过网络访问这些文件。在 NFS 操作下,远程文件系统与本地文件系统几乎没有区别。
可以使用自动挂载功能挂载通过 NFS 服务共享的文件系统。Autofs(一种客户端服务)是可提供自动挂载功能的文件系统结构。autofs 文件系统通过 automount 进行初始化,引导系统时会自动运行该命令。自动挂载守护进程 automountd 将持续运行,以便根据需要挂载和取消挂载远程目录。
只要运行 automountd 的客户机尝试访问远程文件或远程目录,守护进程就会挂载远程文件系统。该远程文件系统可根据需要持续挂载很长时间。如果在一段时间内未访问该远程文件系统,则会自动取消挂载该文件系统。
无需在引导时进行挂载,并且用户今后不必知道用于挂载目录的超级用户口令。用户无需使用 mount 和 umount 命令。autofs 服务会根据需要挂载和取消挂载文件系统,无需用户的任何介入。
使用 automountd 挂载某些文件分层结构不排除会使用 mount 挂载其他分层结构的可能性。无盘计算机必须通过 mount 命令和 /etc/vfstab 文件来挂载 /(根目录)、/usr 和 /usr/kvm。
Autofs 管理的任务概述和Autofs 如何工作提供了有关 autofs 服务的更具体信息。
本节介绍了 NFS 服务中包括的重要功能。
版本 2 曾经是广泛使用的 NFS 协议的第一个版本。版本 2 现在仍可用在多种平台上。所有的 Solaris 发行版都支持 NFS 协议版本 2,但 Solaris 2.5 之前的 Solaris 发行版仅支持版本 2。
NFS 版本 3 协议的实现是 Solaris 2.5 发行版的一个新增功能。为了提高互操作性和性能,已进行了几处更改。为了获得最佳效能,版本 3 协议必须同时在 NFS 服务器和客户机上运行。
与 NFS 版本 2 协议不同,NFS 版本 3 协议可以处理大于 2 GB 的文件。以前的限制已被取消。请参见NFS 大文件支持。
使用 NFS 版本 3 协议,可在服务器上安全异步写入,该功能通过允许服务器在内存中高速缓存客户机写入请求,从而提高性能。客户机无需等待服务器将更改提交到磁盘,因此响应时间更快。另外,服务器还可以对请求进行批处理,这样就改进了服务器上的响应时间。
许多 Solaris NFS 版本 3 操作都会返回文件属性,这些属性存储在本地高速缓存中。由于高速缓存更新越来越频繁,因此需要进行单独操作来更新此数据的情况也越来越少。因此,对服务器的 RPC 调用的数量也会减少,从而提高了性能。
验证文件访问权限的过程也得到了改进。 如果用户尝试在没有适当权限时复制远程文件,版本 2 即会生成“写入错误”消息或“读取错误”消息。在版本 3 中,权限在打开文件之前进行检查,因此报告的错误为“打开错误”。
NFS 版本 3 协议取消了 8 KB 传输大小限制。客户机和服务器可以协商它们所支持的任意传输大小,而不用遵循版本 2 强制规定的 8 KB 限制。请注意,在 Solaris 2.5 实现中,协议的传输大小缺省为 32 KB。从 Solaris 10 发行版开始,对线路传输大小的限制更加宽松了。传输大小取决于基础传输的能力。
NFS 版本 4 具有以前版本中所未提供的功能:
NFS 版本 4 协议将用户 ID 和组 ID 表示为字符串。客户机和服务器使用 nfsmapid 来执行以下操作:
将这些版本 4 ID 字符串映射为本地数字 ID
将本地数字 ID 映射为版本 4 ID 字符串
有关更多信息,请参阅nfsmapid 守护进程。
请注意,在 NFS 版本 4 中,ID 映射器 nfsmapid 用于将服务器上的 ACL 项中的用户 ID 或组 ID 映射为客户机上的 ACL 项中的用户 ID 或组 ID。反之也能实现。有关更多信息,请参见NFS 版本 4 中的 ACL 和 nfsmapid。
使用 NFS 版本 4 取消共享文件系统时,将破坏该文件系统中任何打开文件或文件锁定的所有状态。在 NFS 版本 3 中,服务器会保留客户机在取消共享文件系统之前获取的任何锁定。有关更多信息,请参阅在 NFS 版本 4 中取消共享和重新共享文件系统。
NFS 版本 4 服务器使用伪文件系统为客户机提供访问服务器上导出对象的权限。在 NFS 版本 4 之前,伪文件系统不存在。有关更多信息,请参阅NFS 版本 4 中的文件系统名称空间。
在 NFS 版本 2 和版本 3 中,服务器返回持久性文件句柄。NFS 版本 4 支持可变文件句柄。有关更多信息,请参阅NFS 版本 4 中的可变文件句柄。
委托是服务器用于将文件委托给客户机进行管理的一项技术,客户机和服务器上均支持该技术。例如,服务器可以授予客户机读取委托或写入委托。有关更多信息,请参阅NFS 版本 4 的委托。
从 Solaris 10 发行版开始,NFS 版本 4 不支持 LIPKEY/SPKM 安全特性。
另外,NFS 版本 4 也不会使用以下守护进程:
mountd
nfslogd
statd
有关 NFS 版本 4 的完整功能列表,请参阅NFS 版本 4 的功能。
有关与使用 NFS 版本 4 相关的过程信息,请参阅设置 NFS 服务。
/etc/default/nfs 文件使用关键字来控制客户机和服务器都使用的 NFS 协议。例如,可以使用关键字来管理版本协商。有关更多信息,请参阅/etc/default/nfs 文件的关键字或 nfs(4) 手册页。
Solaris 2.5 发行版中已添加了访问控制列表 (Access Control List, ACL) 支持。ACL 提供了一种用于设置文件访问权限的机制,该机制比可用于标准 UNIX 文件权限的机制划分更细。NFS ACL 支持提供了一种从 Solaris NFS 客户机到 Solaris NFS 服务器进行更改和查看 ACL 项的方法。有关 ACL 的更多信息,请参见《系统管理指南:安全性服务》中的“使用访问控制列表保护文件”。
有关 NFS 版本 4 中的 ACL 支持的信息,请参见NFS 版本 4 中的 ACL 和 nfsmapid。
在 Solaris 2.5 发行版中,NFS 协议的缺省传输协议已更改为传输控制协议 (Transport Control Protocol, TCP)。TCP 有助于提高慢速网络和广域网的性能。TCP 还提供拥塞控制和错误恢复功能。NFS over TCP 可用于版本 2、版本 3 和版本 4。在 Solaris 2.5 发行版之前,缺省的 NFS 协议为用户数据报协议 (User Datagram Protocol, UDP)。
从 Solaris 10 发行版开始,如果 InfiniBand 的 RDMA 可用,则 RDMA 为 NFS 的缺省传输协议。有关更多信息,请参见NFS Over RDMA。但是,请注意,如果使用 proto=tcp 挂载选项,则系统将强制 NFS 挂载仅使用 TCP。
从 Solaris 10 发行版开始,NFS 客户机不再使用过多的 UDP 端口。以前,NFS 通过 UDP 进行传送,针对每个未解决的请求使用单独的 UDP 端口。现在,缺省情况下,NFS 客户机仅使用一个 UDP 保留端口。但是,此支持是可配置的。如果同时使用多个端口会通过增强的可伸缩性来提高系统性能,则可以将系统配置为使用多个端口。此功能还可以对 NFS over TCP 支持建立镜像,这种配置能力是与生俱来的。有关更多信息,请参阅《Solaris 可调参数参考手册》。
NFS 版本 4 不使用 UDP。如果使用 proto=udp 选项挂载文件系统,则会使用 NFS 版本 3 而不是版本 4。
从 Solaris 10 发行版开始,NFS 的缺省传输协议为远程直接内存访问 (Remote Direct Memory Access, RDMA) 协议,这是一种通过高速网络实现内存到内存数据传输的技术。具体来说,RDMA 可提供不受 CPU 干预直接进出内存的远程数据传输。为提供此功能,RDMA 将 InfiniBand-on-SPARC 平台的互连 I/O 技术与 Solaris 操作系统相结合。有关更多信息,请参阅NFS Over RDMA。
Solaris 2.5 发行版还包括改进的网络锁定管理器版本。网络锁定管理器为 NFS 文件提供了 UNIX 记录锁定和 PC 文件共享功能。现在,用于 NFS 文件的锁定机制更为可靠,因此使用锁定的命令挂起的可能性也越来越小。
网络锁定管理器仅用于 NFS 版本 2 和版本 3 挂载。文件锁定内置于 NFS 版本 4 协议。
Solaris 2.6 对 NFS 版本 3 协议的实现已经过更改,可以正确处理大于 2 GB 的文件。NFS 版本 2 协议和 Solaris 2.5 对版本 3 协议的实现不能处理大于 2 GB 的文件。
Solaris 2.6 发行版中添加了只读文件系统的动态故障转移。故障转移可为已复制的只读资源(如手册页、其他文档和共享的二进制文件)提供高级别的可用性。挂载文件系统后,随时可能发生故障转移。现在,手动挂载可以列出多个副本,这与以前发行版中的自动挂载程序非常相似。除了无需等到重新挂载文件系统后再进行故障转移的情况外,自动挂载程序不会发生更改。有关更多信息,请参见如何使用客户端故障转移和客户端故障转移。
Solaris 2.0 发行版中包括对 Kerberos V4 客户机的支持。在 2.6 发行版中,mount 和 share 命令已更改,以支持使用 Kerberos V5 验证的 NFS 版本 3 挂载。另外,还更改了 share 命令,以针对不同的客户机启用多种验证特性。有关涉及安全特性的更改的更多信息,请参见RPCSEC_GSS 安全特性。有关 Kerberos V5 验证的信息,请参见《系统管理指南:安全性服务》中的“配置 Kerberos NFS 服务器”。
Solaris 2.6 发行版还包括可通过防火墙访问 Internet 中文件系统的功能。此功能是通过使用 NFS 协议的扩展提供的。使用 WebNFSTM 协议进行 Internet 访问的优点之一是该协议的可靠性。该服务作为 NFS 版本 3 和版本 2 协议的扩展而构建。此外,WebNFS 实现还提供了共享这些文件的能力,而不会产生匿名 ftp 站点的管理开销。有关与 WebNFS 服务相关的更多更改的说明,请参见WebNFS 服务的安全协商。有关更多任务信息,请参见WebNFS 管理任务。
NFS 版本 4 协议优于 WebNFS 服务。NFS 版本 4 可将已添加到 MOUNT 协议和 WebNFS 服务的所有安全协商完全集成。
Solaris 7 发行版支持一种名为 RPCSEC_GSS 的安全特性。此特性使用标准的 GSS-API 接口来提供验证、完整性和保密性,以及对多种安全机制的启用支持。有关 Kerberos V5 验证支持的更多信息,请参见对 NFS 服务的 Kerberos 支持。有关 GSS-API 的更多信息,请参见《Solaris 开发者安全性指南》。
Solaris 7 发行版包括对 mount 命令和 automountd 命令的扩展。通过扩展,挂载请求可以使用公共文件句柄而不是 MOUNT 协议。MOUNT 协议是 WebNFS 服务使用的同一种访问方法。通过避免使用 MOUNT 协议,可通过防火墙进行挂载。此外,由于服务器与客户机之间需要发生的事务更少,因此挂载速度应该会更快。
通过这些扩展,还可以使用 NFS URL 而不是标准路径名。另外,也可以使用带有 public 选项的 mount 命令以及自动挂载程序映射来强制使用公共文件句柄。有关 WebNFS 服务更改的更多信息,请参见WebNFS 支持。
Solaris 8 发行版中添加了一种新的协议,用于使 WebNFS 客户机可与 NFS 服务器协商安全机制。此协议可提供在使用 WebNFS 服务时使用安全事务的能力。有关更多信息,请参见WebNFS 安全协商如何工作。
在 Solaris 8 发行版中,通过 NFS 服务器日志记录,NFS 服务器可以提供已对其文件系统执行的文件操作记录。该记录包括有关访问哪个文件、何时访问文件以及谁访问文件的信息。可以通过一组配置选项来指定包含此信息的日志的位置,也可以使用这些选项来选择应该记录的操作。对于使匿名 FTP 归档文件可用于 NFS 和 WebNFS 客户机的站点而言,此功能特别有用。有关更多信息,请参见如何启用 NFS 服务器日志记录。
NFS 版本 4 不支持服务器日志记录。
Autofs 用于本地名称空间中指定的文件系统。此信息可以在 NIS、NIS+ 或本地文件中进行维护。
Solaris 2.6 发行版中包括 automountd 的完全多线程版本。此增强功能使 autofs 更可靠,并且可以启用多个挂载的并发服务,这可防止服务在服务器不可用时挂起。
新的 automountd 还提供了更好的即时挂载功能。如果文件系统具有分层结构关系,则以前的发行版将挂载一组完整的文件系统。现在,仅会挂载顶层文件系统。如果需要,可以挂载与此挂载点相关的其他文件系统。
autofs 服务支持间接映射的浏览功能。用户可通过此支持查看可以挂载的目录,而不必实际挂载每个文件系统。-nobrowse 选项已添加到 autofs 映射中,因此不能自动浏览大文件系统,如 /net 和 /home。另外,还可以使用带有 -n 选项的automount 来关闭每台客户机上的 autofs 浏览功能。有关更多信息,请参见禁用 Autofs 浏览功能。