系统管理指南:网络服务

第 2 部分 访问网络文件系统主题

本节提供 NFS 服务的概述、任务和参考信息。

第 4 章 管理网络文件系统(概述)

本章概述了可用于通过网络访问文件系统的 NFS 服务。本章论述了了解 NFS 服务所必需的概念并介绍了 NFS 和 autofs 的最新功能。


注 –

如果系统启用了区域并且您要在非全局区域中使用此功能,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》以了解更多信息。


NFS 服务的新增功能

从 Solaris 10 发行版开始,NFS 版本 4 为缺省版本。有关 NFS 版本 4 的功能及其他更改的信息,请参阅以下内容:

此外,NFS 服务还可通过服务管理工具进行管理。可以使用 svcadm 命令对此服务执行启用、禁用或重新启动等管理操作。可以使用 svcs 命令查询该服务的状态。有关服务管理工具的更多信息,请参阅 smf(5) 手册页以及《系统管理指南:基本管理》中的第 14  章 “管理服务(概述)”

有关任务信息,请参见设置 NFS 服务

NFS 术语

本节介绍使用 NFS 服务时必须了解的一些基本术语。第 6 章,访问网络文件系统(参考)中包括 NFS 服务扩展的适用范围。

NFS 服务器和客户机

术语客户机服务器用于说明计算机在共享文件系统时承担的角色。通过网络共享它们的文件系统的计算机用作服务器。访问文件系统的计算机则视为客户机。使用 NFS 服务,任何计算机都可以访问其他任何计算机的文件系统。同时,NFS 服务还提供对其自身文件系统的访问。一台计算机可以在网络中的任何特定时间承担客户机或服务器的角色,也可以同时承担客户机和服务器的双重角色。

客户机通过挂载服务器的共享文件系统来访问服务器上的文件。客户机挂载远程文件系统时,不会复制该文件系统。不过,挂载进程会使用一系列远程过程调用,客户机将通过这些调用对服务器磁盘上的文件系统进行透明访问。该挂载与本地挂载类似。用户键入命令就像这些文件系统是本地文件系统一样。有关文件系统挂载任务的信息,请参见挂载文件系统

通过 NFS 操作在服务器上共享文件系统后,即可从客户机对该文件系统进行访问。可以使用 autofs 自动挂载 NFS 文件系统。有关涉及 share 命令和 autofs 的任务,请参见自动文件系统共享Autofs 管理的任务概述

NFS 文件系统

可使用 NFS 服务共享的对象包括任何整个或部分目录树或文件分层结构(包括单个文件)。计算机共享的文件分层结构不能与已共享的文件分层结构重叠。不能共享外围设备(如调制解调器和打印机)。

在大多数 UNIX 系统环境中,可共享的文件分层结构与文件系统或部分文件系统对应。但是,NFS 支持可跨多个操作系统运行,并且文件系统的概念在其他非 UNIX 环境中可能是没有意义的。因此,术语文件系统是指可使用 NFS 共享和挂载的文件或文件分层结构。

关于 NFS 服务

使用 NFS 服务,不同体系结构的计算机(运行不同的操作系统)可以通过网络来共享文件系统。从 MS-DOS 到 VMS 操作系统的许多平台上都已实现 NFS 支持。

由于 NFS 定义的是抽象的文件系统模型,而不是体系结构规范,因此可以在不同的操作系统上实现 NFS 环境。每个操作系统都会将 NFS 模型应用于其文件系统语义。此模型意味着文件系统操作(如读取和写入)可以正常进行,就像这些操作访问本地文件一样。

NFS 服务具有以下优点:

NFS 服务使文件系统的物理位置与用户无关。通过使用 NFS 实现,用户可以查看所有相关的文件,无论其位置如何。使用 NFS 服务,可以将常用文件的一个副本放在一台计算机的磁盘上,而不是放在每个系统上。所有其他系统将通过网络访问这些文件。在 NFS 操作下,远程文件系统与本地文件系统几乎没有区别。

关于 Autofs

可以使用自动挂载功能挂载通过 NFS 服务共享的文件系统。Autofs(一种客户端服务)是可提供自动挂载功能的文件系统结构。autofs 文件系统通过 automount 进行初始化,引导系统时会自动运行该命令。自动挂载守护进程 automountd 将持续运行,以便根据需要挂载和取消挂载远程目录。

只要运行 automountd 的客户机尝试访问远程文件或远程目录,守护进程就会挂载远程文件系统。该远程文件系统可根据需要持续挂载很长时间。如果在一段时间内未访问该远程文件系统,则会自动取消挂载该文件系统。

无需在引导时进行挂载,并且用户今后不必知道用于挂载目录的超级用户口令。用户无需使用 mountumount 命令。autofs 服务会根据需要挂载和取消挂载文件系统,无需用户的任何介入。

使用 automountd 挂载某些文件分层结构不排除会使用 mount 挂载其他分层结构的可能性。无盘计算机必须通过 mount 命令和 /etc/vfstab 文件来挂载 /(根目录)、/usr/usr/kvm

Autofs 管理的任务概述Autofs 如何工作提供了有关 autofs 服务的更具体信息。

NFS 服务的功能

本节介绍了 NFS 服务中包括的重要功能。

NFS 版本 2 协议

版本 2 曾经是广泛使用的 NFS 协议的第一个版本。版本 2 现在仍可用在多种平台上。所有的 Solaris 发行版都支持 NFS 协议版本 2,但 Solaris 2.5 之前的 Solaris 发行版仅支持版本 2。

NFS 版本 3 协议

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 具有以前版本中所未提供的功能:

NFS 版本 4 协议将用户 ID 和组 ID 表示为字符串。客户机和服务器使用 nfsmapid 来执行以下操作:

有关更多信息,请参阅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 也不会使用以下守护进程:

有关 NFS 版本 4 的完整功能列表,请参阅NFS 版本 4 的功能

有关与使用 NFS 版本 4 相关的过程信息,请参阅设置 NFS 服务

控制 NFS 版本

/etc/default/nfs 文件使用关键字来控制客户机和服务器都使用的 NFS 协议。例如,可以使用关键字来管理版本协商。有关更多信息,请参阅/etc/default/nfs 文件的关键字nfs(4) 手册页。

NFS ACL 支持

Solaris 2.5 发行版中已添加了访问控制列表 (Access Control List, ACL) 支持。ACL 提供了一种用于设置文件访问权限的机制,该机制比可用于标准 UNIX 文件权限的机制划分更细。NFS ACL 支持提供了一种从 Solaris NFS 客户机到 Solaris NFS 服务器进行更改和查看 ACL 项的方法。有关 ACL 的更多信息,请参见《系统管理指南:安全性服务》中的“使用访问控制列表保护文件”

有关 NFS 版本 4 中的 ACL 支持的信息,请参见NFS 版本 4 中的 ACL 和 nfsmapid

NFS Over TCP

在 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。


NFS Over UDP

从 Solaris 10 发行版开始,NFS 客户机不再使用过多的 UDP 端口。以前,NFS 通过 UDP 进行传送,针对每个未解决的请求使用单独的 UDP 端口。现在,缺省情况下,NFS 客户机仅使用一个 UDP 保留端口。但是,此支持是可配置的。如果同时使用多个端口会通过增强的可伸缩性来提高系统性能,则可以将系统配置为使用多个端口。此功能还可以对 NFS over TCP 支持建立镜像,这种配置能力是与生俱来的。有关更多信息,请参阅《Solaris 可调参数参考手册》。


注 –

NFS 版本 4 不使用 UDP。如果使用 proto=udp 选项挂载文件系统,则会使用 NFS 版本 3 而不是版本 4。


NFS Over RDMA 概述

从 Solaris 10 发行版开始,NFS 的缺省传输协议为远程直接内存访问 (Remote Direct Memory Access, RDMA) 协议,这是一种通过高速网络实现内存到内存数据传输的技术。具体来说,RDMA 可提供不受 CPU 干预直接进出内存的远程数据传输。为提供此功能,RDMA 将 InfiniBand-on-SPARC 平台的互连 I/O 技术与 Solaris 操作系统相结合。有关更多信息,请参阅NFS Over RDMA

网络锁定管理器和 NFS

Solaris 2.5 发行版还包括改进的网络锁定管理器版本。网络锁定管理器为 NFS 文件提供了 UNIX 记录锁定和 PC 文件共享功能。现在,用于 NFS 文件的锁定机制更为可靠,因此使用锁定的命令挂起的可能性也越来越小。


注 –

网络锁定管理器仅用于 NFS 版本 2 和版本 3 挂载。文件锁定内置于 NFS 版本 4 协议。


NFS 大文件支持

Solaris 2.6 对 NFS 版本 3 协议的实现已经过更改,可以正确处理大于 2 GB 的文件。NFS 版本 2 协议和 Solaris 2.5 对版本 3 协议的实现不能处理大于 2 GB 的文件。

NFS 客户机故障转移

Solaris 2.6 发行版中添加了只读文件系统的动态故障转移。故障转移可为已复制的只读资源(如手册页、其他文档和共享的二进制文件)提供高级别的可用性。挂载文件系统后,随时可能发生故障转移。现在,手动挂载可以列出多个副本,这与以前发行版中的自动挂载程序非常相似。除了无需等到重新挂载文件系统后再进行故障转移的情况外,自动挂载程序不会发生更改。有关更多信息,请参见如何使用客户端故障转移客户端故障转移

对 NFS 服务的 Kerberos 支持

Solaris 2.0 发行版中包括对 Kerberos V4 客户机的支持。在 2.6 发行版中,mountshare 命令已更改,以支持使用 Kerberos V5 验证的 NFS 版本 3 挂载。另外,还更改了 share 命令,以针对不同的客户机启用多种验证特性。有关涉及安全特性的更改的更多信息,请参见RPCSEC_GSS 安全特性。有关 Kerberos V5 验证的信息,请参见《系统管理指南:安全性服务》中的“配置 Kerberos NFS 服务器”

WebNFS 支持

Solaris 2.6 发行版还包括可通过防火墙访问 Internet 中文件系统的功能。此功能是通过使用 NFS 协议的扩展提供的。使用 WebNFSTM 协议进行 Internet 访问的优点之一是该协议的可靠性。该服务作为 NFS 版本 3 和版本 2 协议的扩展而构建。此外,WebNFS 实现还提供了共享这些文件的能力,而不会产生匿名 ftp 站点的管理开销。有关与 WebNFS 服务相关的更多更改的说明,请参见WebNFS 服务的安全协商。有关更多任务信息,请参见WebNFS 管理任务


注 –

NFS 版本 4 协议优于 WebNFS 服务。NFS 版本 4 可将已添加到 MOUNT 协议和 WebNFS 服务的所有安全协商完全集成。


RPCSEC_GSS 安全特性

Solaris 7 发行版支持一种名为 RPCSEC_GSS 的安全特性。此特性使用标准的 GSS-API 接口来提供验证、完整性和保密性,以及对多种安全机制的启用支持。有关 Kerberos V5 验证支持的更多信息,请参见对 NFS 服务的 Kerberos 支持。有关 GSS-API 的更多信息,请参见《Solaris 开发者安全性指南》

Solaris 7 对 NFS 挂载的扩展

Solaris 7 发行版包括对 mount 命令和 automountd 命令的扩展。通过扩展,挂载请求可以使用公共文件句柄而不是 MOUNT 协议。MOUNT 协议是 WebNFS 服务使用的同一种访问方法。通过避免使用 MOUNT 协议,可通过防火墙进行挂载。此外,由于服务器与客户机之间需要发生的事务更少,因此挂载速度应该会更快。

通过这些扩展,还可以使用 NFS URL 而不是标准路径名。另外,也可以使用带有 public 选项的 mount 命令以及自动挂载程序映射来强制使用公共文件句柄。有关 WebNFS 服务更改的更多信息,请参见WebNFS 支持

WebNFS 服务的安全协商

Solaris 8 发行版中添加了一种新的协议,用于使 WebNFS 客户机可与 NFS 服务器协商安全机制。此协议可提供在使用 WebNFS 服务时使用安全事务的能力。有关更多信息,请参见WebNFS 安全协商如何工作

NFS 服务器日志记录

在 Solaris 8 发行版中,通过 NFS 服务器日志记录,NFS 服务器可以提供已对其文件系统执行的文件操作记录。该记录包括有关访问哪个文件、何时访问文件以及谁访问文件的信息。可以通过一组配置选项来指定包含此信息的日志的位置,也可以使用这些选项来选择应该记录的操作。对于使匿名 FTP 归档文件可用于 NFS 和 WebNFS 客户机的站点而言,此功能特别有用。有关更多信息,请参见如何启用 NFS 服务器日志记录


注 –

NFS 版本 4 不支持服务器日志记录。


Autofs 功能

Autofs 用于本地名称空间中指定的文件系统。此信息可以在 NIS、NIS+ 或本地文件中进行维护。

Solaris 2.6 发行版中包括 automountd 的完全多线程版本。此增强功能使 autofs 更可靠,并且可以启用多个挂载的并发服务,这可防止服务在服务器不可用时挂起。

新的 automountd 还提供了更好的即时挂载功能。如果文件系统具有分层结构关系,则以前的发行版将挂载一组完整的文件系统。现在,仅会挂载顶层文件系统。如果需要,可以挂载与此挂载点相关的其他文件系统。

autofs 服务支持间接映射的浏览功能。用户可通过此支持查看可以挂载的目录,而不必实际挂载每个文件系统。-nobrowse 选项已添加到 autofs 映射中,因此不能自动浏览大文件系统,如 /net/home。另外,还可以使用带有 -n 选项的automount 来关闭每台客户机上的 autofs 浏览功能。有关更多信息,请参见禁用 Autofs 浏览功能

第 5 章 网络文件系统管理(任务)

本章提供了有关如何执行设置 NFS 服务、添加要共享的新文件系统和挂载文件系统等 NFS 管理任务的信息,此外,还介绍了如何使用安全 NFS 系统和 WebNFS 功能。本章最后一部分包括疑难解答过程以及一些 NFS 错误消息及其含义的列表。

作为 NFS 管理员,您的责任取决于您的站点的要求和您的计算机在网络中的角色。您可能要负责本地网络中的所有计算机,在这种情况下您可能要负责确定以下配置项:

设置服务器后对其进行维护涉及以下任务:

请记住,计算机既可以是服务器,也可以是客户机。因此,计算机可用于与远程计算机共享本地文件系统,并挂载远程文件系统。


注 –

如果系统启用了区域并且您要在非全局区域中使用此功能,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》以了解更多信息。


自动文件系统共享

服务器通过在 NFS 环境中共享其文件系统来提供对这些文件系统的访问。可以使用 share 命令或 /etc/dfs/dfstab 文件指定要共享的文件系统。

只要启动了 NFS 服务器操作,就会自动共享 /etc/dfs/dfstab 文件中的各项。如果需要定期共享同一组文件系统,则应设置自动共享。例如,如果您的计算机是支持起始目录的服务器,则需要使起始目录随时可用。大多数文件系统共享应自动执行。仅在测试或故障排除期间才应手动执行共享。

dfstab 文件列出了服务器与其客户机共享的所有文件系统。此文件还对可以挂载文件系统的客户机进行控制。可以修改 dfstab 以添加或删除文件系统或更改进行共享的方式。只需使用受支持的任何文本编辑器(如 vi)来编辑文件即可。下次计算机进入运行级 3 时,系统会读取已更新的 dfstab,以确定应自动共享的文件系统。

dfstab 文件中的每一行都包含 share 命令,该命令与在命令行提示符下键入以共享文件系统的命令是同一命令。share 命令位于 /usr/sbin 中。

表 5–1 文件系统共享任务列表

任务 

说明 

参考 

建立自动文件系统共享 

配置服务器以便重新引导服务器时自动共享文件系统的步骤 

如何设置自动文件系统共享

启用 WebNFS 

配置服务器以便用户可使用 WebNFS 来访问文件的步骤 

如何启用 WebNFS 访问

启用 NFS 服务器日志记录 

配置服务器以便在选定的文件系统上运行 NFS 日志记录的步骤 

如何启用 NFS 服务器日志记录

Procedure如何设置自动文件系统共享

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 为要共享的每个文件系统添加项。

    编辑 /etc/dfs/dfstab。向要自动共享的每个文件系统的文件中添加一个项。各项本身在文件中必须占据一行且使用以下语法:


    share [-F nfs] [-o specific-options] [-d description] pathname

    有关 /etc/dfs/dfstab 的说明,请参见 dfstab(4) 手册页;有关完整的选项列表,请参见 share_nfs(1M) 手册页。

  3. 共享文件系统。

    项添加到 /etc/dfs/dfstab 中之后,可通过重新引导系统或使用 shareall 命令来共享文件系统。


    # shareall
    
  4. 验证信息是否正确。

    运行 share 命令以检查是否列出了正确选项:


    # share
    
    -        /export/share/man   ro   ""
    
    -        /usr/src     rw=eng   ""
    
    -        /export/ftp    ro,public  ""
另请参见

下一步是设置 autofs 映射,以便客户机可以访问已在服务器上共享的文件系统。请参见Autofs 管理的任务概述

Procedure如何启用 WebNFS 访问

从 Solaris 2.6 发行版开始,缺省情况下,可用于 NFS 挂载的所有文件系统都可自动用于 WebNFS 访问。需要使用此过程的唯一条件是以下情况之一:

有关在启动 WebNFS 服务之前应考虑问题的列表,请参见规划 WebNFS 访问

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 使用 WebNFS 服务向要共享的每个文件系统添加项。

    编辑 /etc/dfs/dfstab。向每个文件系统的文件中添加一个项。以下示例中显示的 publicindex 标记是可选的。


    share -F nfs -o ro,public,index=index.html /export/ftp

    有关 /etc/dfs/dfstab 的说明,请参见 dfstab(4) 手册页;有关完整的选项列表,请参见 share_nfs(1M) 手册页。

  3. 共享文件系统。

    项添加到 /etc/dfs/dfstab 中之后,可通过重新引导系统或使用 shareall 命令来共享文件系统。


    # shareall
    
  4. 验证信息是否正确。

    运行 share 命令以检查是否列出了正确选项:


    # share
    
    -        /export/share/man   ro   ""
    
    -        /usr/src     rw=eng   ""
    
    -        /export/ftp    ro,public,index=index.html  ""

Procedure如何启用 NFS 服务器日志记录

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. (可选的)更改文件系统配置设置。

    可以采用以下两种方法之一更改 /etc/nfs/nfslog.conf 中的设置。可以通过更改与 global 标记关联的数据来编辑所有文件系统的缺省设置。或者,也可以为此文件系统添加新的标记。如果不需要这些更改,则无需更改此文件。nfslog.conf(4) 中介绍了 /etc/nfs/nfslog.conf 的格式。

  3. 使用 NFS 服务器日志记录向要共享的每个文件系统中添加项。

    编辑 /etc/dfs/dfstab。向要启用 NFS 服务器日志记录的文件系统的文件添加一个项。必须在 /etc/nfs/nfslog.conf 中输入 log=tag 选项中所使用的标记。本示例使用 global 标记中的缺省设置。


    share -F nfs -o ro,log=global /export/ftp

    有关 /etc/dfs/dfstab 的说明,请参见 dfstab(4) 手册页;有关完整的选项列表,请参见 share_nfs(1M) 手册页。

  4. 共享文件系统。

    项添加到 /etc/dfs/dfstab 中之后,可通过重新引导系统或使用 shareall 命令来共享文件系统。


    # shareall
    
  5. 验证信息是否正确。

    运行 share 命令以检查是否列出了正确选项:


    # share
    
    -        /export/share/man   ro   ""
    
    -        /usr/src     rw=eng   ""
    
    -        /export/ftp    ro,log=global  ""
  6. 检查 NFS 日志守护进程 nfslogd 是否正在运行。


    # ps -ef | grep nfslogd
    
  7. (可选的)启动 nfslogd,前提是它尚未运行。

    • (可选的)如果存在 /etc/nfs/nfslogtab,请键入以下内容来启动 NFS 日志守护进程:


      # svcadm restart network/nfs/server:default
      
    • (可选的)如果不存在 /etc/nfs/nfslogtab,请运行任何 share 命令以创建该文件,然后启动守护进程。


      # shareall
      
      # svcadm restart network/nfs/server:default
      

挂载文件系统

可以采用多种方法挂载文件系统。引导系统时、根据需要使用命令行或通过自动挂载程序都可以自动挂载文件系统。自动挂载程序提供了在引导时挂载或通过命令行挂载的许多优点。但是,许多情况需要将所有这三种方法组合起来。此外,还存在多种启用或禁用进程的方法,具体取决于挂载文件系统时使用的选项。有关与文件系统挂载关联的任务的完整列表,请参见下表。

表 5–2 挂载文件系统的任务列表

任务 

说明 

参考 

在引导时挂载文件系统 

每次重新引导系统时即挂载文件系统的步骤。 

如何在引导时挂载文件系统.

使用命令挂载文件系统 

在系统正在运行时挂载文件系统的步骤。此过程在测试时非常有用。 

如何通过命令行挂载文件系统.

使用自动挂载程序挂载 

在不使用命令行的情况下即时访问文件系统的步骤。 

使用自动挂载程序挂载.

阻止大文件 

阻止在文件系统上创建大文件的步骤。 

如何在 NFS 服务器上禁用大文件.

启动客户端故障转移 

服务器出现故障时实现自动切换至工作文件系统的步骤。 

如何使用客户端故障转移.

禁用对客户机的挂载访问 

禁用某台客户机可访问远程文件系统的能力的步骤。 

如何禁用对某台客户机的挂载访问.

通过防火墙提供对文件系统的访问 

允许使用 WebNFS 协议通过防火墙对文件系统进行访问的步骤。 

如何通过防火墙挂载 NFS 文件系统.

使用 NFS URL 挂载文件系统 

允许使用 NFS URL 对文件系统进行访问的步骤。此过程允许在不使用 MOUNT 协议的情况下访问文件系统。 

如何使用 NFS URL 挂载 NFS 文件系统.

Procedure如何在引导时挂载文件系统

如果要在引导时挂载文件系统,而不使用 autofs 映射,请遵照以下过程执行操作。必须在每台应对远程文件系统具有访问权限的客户机上完成此过程。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. /etc/vfstab 添加文件系统的项。

    /etc/vfstab 文件中的各项使用以下语法:

    special  fsckdev  mountp  fstype  fsckpass  mount-at-boot  mntopts

    有关更多信息,请参见 vfstab(4) 手册页。


    注意 – 注意 –

    另外还包含 NFS 客户机 vfstab 项的 NFS 服务器必须始终指定 bg 选项,以避免系统在重新引导过程中挂起。有关更多信息,请参见NFS 文件系统的 mount 选项



示例 5–1 客户机的 vfstab 文件中的项

客户机需要从服务器 wasp 挂载 /var/mail 目录。文件系统需要作为 /var/mail 挂载在客户机上,并且客户机需要具有读写访问权限。请向客户机的 vfstab 文件中添加以下项。


wasp:/var/mail - /var/mail nfs - yes rw

Procedure如何通过命令行挂载文件系统

为了测试新的挂载点,通常要通过命令行来挂载文件系统。这类挂载允许对不能通过自动挂载程序使用的文件系统进行临时访问。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 挂载文件系统。

    键入以下命令:


    # mount -F nfs -o ro bee:/export/share/local /mnt
    

    在本示例中,服务器 bee 中的 /export/share/local 文件系统挂载在本地系统的只读 /mnt 上。通过命令行进行挂载允许临时查看文件系统。可以使用 umount 或通过重新引导本地主机来取消挂载文件系统。


    注意 – 注意 –

    从 Solaris 2.6 发行版开始,mount 命令的所有版本都不会提供有关无效选项的警告。该命令将默认忽略无法解释的所有选项。要防止意外行为,请确保验证已使用的所有选项。


使用自动挂载程序挂载

Autofs 管理的任务概述包括有关使用自动挂载程序来建立和支持挂载的特定说明。在不对普通系统进行任何更改的情况下,客户机应该能够通过 /net 挂载点来访问远程文件系统。要挂载上一个示例中的 /export/share/local 文件系统,请键入以下内容:


% cd /net/bee/export/share/local

由于自动挂载程序允许所有用户挂载文件系统,因此不需要 root 访问权限。自动挂载程序还提供了文件系统的自动取消挂载,因此完成后无需取消挂载文件系统。

Procedure如何在 NFS 服务器上禁用大文件

对于支持无法处理超过 2 GB 的文件的客户机的服务器,可能需要禁用创建大文件的能力。


注 –

Solaris 2.6 发行版以前的版本不能使用大文件。如果客户机需要访问大文件,请检查 NFS 服务器的客户机是否正在运行 2.6 发行版(最低版本)。


  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 检查文件系统上是否不存在大文件。

    例如:


    # cd /export/home1
    
    # find . -xdev -size +2000000 -exec ls -l {} \;
    

    如果文件系统上存在大文件,则必须删除这些文件或将其移至其他文件系统。

  3. 取消挂载文件系统。


    # umount /export/home1
    
  4. 重置文件系统状态,前提是已使用 largefiles 挂载了该文件系统。

    如果文件系统上不存在大文件,则 fsck 会重置文件系统状态:


    # fsck /export/home1
    
  5. 使用 nolargefiles 挂载文件系统。


    # mount -F ufs -o nolargefiles /export/home1
    

    可以通过命令行进行挂载,但要使选项更为持久,请将类似以下内容的项添加到 /etc/vfstab 中:


    /dev/dsk/c0t3d0s1 /dev/rdsk/c0t3d0s1 /export/home1  ufs  2  yes  nolargefiles

Procedure如何使用客户端故障转移

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 在 NFS 客户机上,使用 ro 选项来挂载文件系统。

    可以通过命令行、自动挂载程序或通过向 /etc/vfstab 中添加类似以下内容的项来进行挂载:


    bee,wasp:/export/share/local  -  /usr/local  nfs  -  no  ro

    自动挂载程序允许使用此语法。但是,在已挂载文件系统的同时不能进行故障转移,仅在选择了服务器时才能进行此操作。


    注 –

    不能使用命令行或 vfstab 项来混用运行不同版本NFS 协议的服务器。只能使用 autofs 来混用支持 NFS 版本 2、版本 3 或版本 4 协议的服务器。autofs 中会使用版本 2、版本 3 或版本 4 服务器中最适用的一种版本。


Procedure如何禁用对某台客户机的挂载访问

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. /etc/dfs/dfstab 中添加项。

    第一个示例允许对 eng 网络组中的所有客户机进行挂载访问,但名为 rose 的主机除外。第二个示例允许对 eng.example.com DNS 域中的所有客户机进行挂载访问,但 rose 除外。


    share -F nfs -o ro=-rose:eng /export/share/man
    
    share -F nfs -o ro=-rose:.eng.example.com /export/share/man

    有关访问列表的其他信息,请参见使用 share 命令设置访问列表。有关 /etc/dfs/dfstab 的说明,请参见 dfstab(4)

  3. 共享文件系统。

    再次共享文件系统或重新引导 NFS 服务器之前,NFS 服务器不会使用对 /etc/dfs/dfstab 所做的更改。


    # shareall

Procedure如何通过防火墙挂载 NFS 文件系统

要通过防火墙访问文件系统,请使用以下过程。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 使用如下命令手动挂载文件系统:


    # mount -F nfs bee:/export/share/local /mnt
    

    在本示例中,文件系统 /export/share/local 是通过使用公共文件句柄挂载到本地客户机上的。可以使用 NFS URL 来代替标准路径名。如果服务器 bee 不支持公共文件句柄,则挂载操作将会失败。


    注 –

    此过程要求使用 public 选项来共享 NFS 服务器上的文件系统。此外,客户机与服务器之间的所有防火墙都必须允许在端口 2049 上使用 TCP 连接。从 Solaris 2.6 发行版开始,共享的所有文件系统都允许公共文件句柄访问,因此缺省情况下将应用 public 选项。


Procedure如何使用 NFS URL 挂载 NFS 文件系统

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. (可选的)如果使用的是 NFS 版本 2 或版本 3,请使用如下命令手动挂载文件系统:


    # mount -F nfs nfs://bee:3000/export/share/local /mnt
    

    在本示例中,/export/share/local 文件系统是使用 NFS 端口号 3000 从服务器 bee 中挂载的。端口号不是必需的,缺省情况下会使用标准 NFS 端口号 2049。可以选择在 NFS URL 中包括 public 选项。如果没有 public 选项,则在服务器不支持公共文件句柄的情况下会使用 MOUNT 协议。public 选项强制使用公共文件句柄,如果不支持公共文件句柄,则挂载将失败。

  3. (可选的)如果使用的是 NFS 版本 4,请使用如下命令手动挂载文件系统:


    # mount -F nfs -o vers=4 nfs://bee:3000/export/share/local /mnt
    

设置 NFS 服务

本节介绍了完成以下操作必须执行的一些任务:


注 –

从 Solaris 10 发行版开始,NFS 版本 4 为缺省版本。


表 5–3 NFS 服务的任务列表

任务 

说明 

参考 

启动 NFS 服务器 

启动 NFS 服务的步骤,前提是该服务尚未自动启动。 

如何启动 NFS 服务

停止 NFS 服务器 

停止 NFS 服务的步骤。通常无需停止该服务。 

如何停止 NFS 服务

启动自动挂载程序 

启动自动挂载程序的步骤。更改某些自动挂载程序映射时需要使用此过程。 

如何启动自动挂载程序

停止自动挂载程序 

停止自动挂载程序的步骤。更改某些自动挂载程序映射时需要使用此过程。 

如何停止自动挂载程序

在服务器上选择不同版本的 NFS 

在服务器上选择不同版本的 NFS 的步骤。如果选择不使用 NFS 版本 4,请使用此过程。 

如何在服务器上选择不同版本的 NFS

在客户机上选择不同版本的 NFS 

修改 /etc/default/nfs 文件在客户机上选择不同版本的 NFS 的步骤。如果选择不使用 NFS 版本 4,请使用此过程。

如何通过修改 /etc/default/nfs 文件在客户机上选择不同版本的 NFS

 

使用命令行在客户机上选择不同版本的 NFS 的替代步骤。如果选择不使用 NFS 版本 4,请使用此替代过程。 

如何使用命令行在客户机上选择不同版本的 NFS

Procedure如何启动 NFS 服务

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 在服务器上启用 NFS 服务。

    键入以下命令。


    # svcadm enable network/nfs/server
    

    此命令可启用 NFS 服务。


    注 –

    从 Solaris 9 发行版开始,引导系统时 NFS 服务器会自动启动。此外,引导系统后,可随时通过共享 NFS 文件系统来自动启用 NFS 服务守护进程。请参见如何设置自动文件系统共享


Procedure如何停止 NFS 服务

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 在服务器上禁用 NFS 服务。

    键入以下命令。


    # svcadm disable network/nfs/server
    

Procedure如何启动自动挂载程序

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 启用 autofs 守护进程。

    键入以下命令:


    # svcadm enable system/filesystem/autofs
    

Procedure如何停止自动挂载程序

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 禁用 autofs 守护进程。

    键入以下命令:


    # svcadm disable system/filesystem/autofs
    

Procedure如何在服务器上选择不同版本的 NFS

如果选择不使用 NFS 版本 4,请使用此过程。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 编辑 /etc/default/nfs 文件。

    例如,如果要使服务器仅提供版本 3,请将 NFS_SERVER_VERSMAX 和 NFS_SERVER_VERSMIN 的值都设置为 3。有关关键字及其值的列表,请参阅/etc/default/nfs 文件的关键字


    NFS_SERVER_VERSMAX=value
    
    NFS_SERVER_VERSMIN=value
    
    
    value

    提供版本号。


    注 –

    缺省情况下,将对这些行加以注释。另外,请记住删除井号 (#)。


  3. (可选的)如果要禁用服务器委托,请在 /etc/default/nfs 文件中包括以下行。


    NFS_SERVER_DELEGATION=off
    

    注 –

    在 NFS 版本 4 中,缺省情况下将启用服务器委托。有关更多信息,请参见NFS 版本 4 的委托


  4. (可选的)如果要为客户机和服务器设置公共域,请在 /etc/default/nfs 文件中包括以下行。


    NFSMAPID_DOMAIN=my.comany.com
    
    my.comany.com

    提供公共域

    有关更多信息,请参阅nfsmapid 守护进程

  5. 检查 NFS 服务是否正在服务器上运行。

    键入以下命令:


    # svcs network/nfs/server
    

    此命令将报告 NFS 服务器服务是处于联机状态还是禁用状态。

  6. (可选的)如有必要,请禁用 NFS 服务。

    如果发现在前面的步骤中 NFS 服务处于联机状态,请键入以下命令来禁用该服务。


    # svcadm disable network/nfs/server
    

    注 –

    如果需要配置 NFS 服务,请参阅如何设置自动文件系统共享


  7. 启用 NFS 服务。

    键入以下命令以启用该服务。


    # svcadm enable network/nfs/server
    
另请参见

NFS 中的版本协商

Procedure如何通过修改 /etc/default/nfs 文件在客户机上选择不同版本的 NFS

以下过程说明如何通过修改 /etc/default/nfs 文件来控制在客户机上使用的 NFS 版本。如果希望使用命令行,请参阅如何使用命令行在客户机上选择不同版本的 NFS

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 编辑 /etc/default/nfs 文件。

    例如,如果要使客户机上仅提供版本 3,请将 NFS_CLIENT_VERSMAX 和 NFS_CLIENT_VERSMIN 的值都设置为 3。有关关键字及其值的列表,请参阅/etc/default/nfs 文件的关键字


    NFS_CLIENT_VERSMAX=value
    
    NFS_CLIENT_VERSMIN=value
    
    value

    提供版本号。


    注 –

    缺省情况下,将对这些行加以注释。另外,请记住删除井号 (#)。


  3. 在客户机上挂载 NFS。

    键入以下命令:


    # mount server-name:/share-point /local-dir
    
    server-name

    提供服务器的名称。

    /share-point

    提供要共享的远程目录的路径。

    /local-dir

    提供本地挂载点的路径。

另请参见

NFS 中的版本协商

Procedure如何使用命令行在客户机上选择不同版本的 NFS

以下过程说明如何使用命令行来控制在客户机上使用的用于进行特定挂载的 NFS 版本。如果希望修改 /etc/default/nfs 文件,请参见如何通过修改 /etc/default/nfs 文件在客户机上选择不同版本的 NFS

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 在客户机上挂载所需的 NFS 版本。

    键入以下命令:


    # mount -o vers=value server-name:/share-point /local-dir
    
    value

    提供版本号。

    server-name

    提供服务器的名称。

    /share-point

    提供要共享的远程目录的路径。

    /local-dir

    提供本地挂载点的路径。


    注 –

    此命令使用 NFS 协议来挂载远程目录并覆盖 /etc/default/nfs 文件中的客户机设置。


另请参见

NFS 中的版本协商

管理安全 NFS 系统

要使用安全 NFS 系统,您负责的所有计算机都必须具有域名。域是一个管理实体,通常包含多台计算机,它是大型网络的一部分。如果运行的是名称服务,则还应为域建立名称服务。请参见《System Administration Guide: Naming and Directory Services (NIS+)》

NFS 服务支持 Kerberos V5 验证。《系统管理指南:安全性服务》中的第 20  章 “Kerberos 服务介绍”介绍了 Kerberos 服务。

还可以配置安全 NFS 环境,以使用 Diffie-Hellman 验证。《系统管理指南:安全性服务》中的第 15  章 “使用验证服务(任务)”介绍了此验证服务。

Procedure如何设置使用 DH 验证的安全 NFS 环境

  1. 为域指定域名,并使域中的每台计算机都可识别该域名。

    如果使用 NIS+ 作为名称服务,请参见《System Administration Guide: Naming and Directory Services (NIS+)》

  2. 使用 newkeynisaddcred 命令为客户机用户创建公钥和私钥。使每个用户使用 chkey 命令建立其各自的安全 RPC 口令。


    注 –

    有关这些命令的信息,请参见 newkey(1M)nisaddcred(1M)chkey(1) 手册页。


    生成公钥和私钥后,公钥和加密的私钥会存储在 publickey 数据库中。

  3. 验证名称服务是否正在响应。如果运行的是 NIS+,请键入以下内容:


    # nisping -u
    
    Last updates for directory eng.acme.com. :
    
    Master server is eng-master.acme.com.
    
            Last update occurred at Mon Jun  5 11:16:10 1995
    
    
    
    Replica server is eng1-replica-replica-58.acme.com.
    
            Last Update seen was Mon Jun  5 11:16:10 1995

    如果运行的是 NIS,请验证 ypbind 守护进程是否正在运行。

  4. 验证密钥服务器的 keyserv 守护进程是否正在运行。

    键入以下命令。


    # ps -ef | grep keyserv
    
    root    100      1  16    Apr 11 ?        0:00 /usr/sbin/keyserv
    
    root   2215   2211   5  09:57:28 pts/0    0:00 grep keyserv

    如果守护进程未运行,请键入以下内容以启动密钥服务器:


    # /usr/sbin/keyserv
    
  5. 解密并存储私钥。

    通常,登录口令与网络口令相同。在这种情况下,不需要 keylogin。如果口令不同,则用户必须登录,然后运行 keylogin。您仍然需要以 root 身份使用 keylogin -r 命令将解密的私钥存储在 /etc/.rootkey 中。


    注 –

    如果 root 私钥发生更改或如果 /etc/.rootkey 丢失,则需要运行 keylogin -r


  6. 更新文件系统的挂载选项。

    对于 Diffie-Hellman 验证,请编辑 /etc/dfs/dfstab 文件并向相应项中添加 sec=dh 选项。


    share -F nfs -o sec=dh /export/home
    

    有关 /etc/dfs/dfstab 的说明,请参见 dfstab(4) 手册页。

  7. 更新文件系统的自动挂载程序映射。

    编辑 auto_master 数据,将 sec=dh 作为挂载选项包括在 Diffie-Hellman 验证的相应项中:


    /home	auto_home	-nosuid,sec=dh

    注 –

    Solaris 2.5 前后的发行版有一个限制。如果客户机未安全地挂载安全共享的文件系统,则用户有权以 nobody 身份而不是以其自身身份进行访问。对于使用版本 2 的后续发行版,如果安全模式不匹配,NFS 服务器将拒绝访问,除非 share 命令行中包括 -sec=none。如果使用版本 3,则可从 NFS 服务器中继承该模式,因此客户机无需指定 sec=dh。用户有权以其自身身份访问文件。


    重新安装、移动或升级计算机时,如果未建立新的密钥或更改了 root 的密钥,请记住保存 /etc/.rootkey。如果确实删除了 /etc/.rootkey,则可以始终键入以下内容:


    # keylogin -r
    

WebNFS 管理任务

本节提供有关管理 WebNFS 系统的说明。以下是相关任务。

表 5–4 WebNFS 管理的任务列表

任务 

说明 

参考 

规划 WebNFS 

启用 WebNFS 服务之前应考虑的问题。 

规划 WebNFS 访问

启用 WebNFS 

通过使用 WebNFS 协议来启用 NFS 文件系统挂载的步骤。 

如何启用 WebNFS 访问

启用可穿越防火墙的 WebNFS 

允许使用 WebNFS 协议穿过防火墙对文件进行访问的步骤。 

如何启用可穿越防火墙的 WebNFS 访问

使用 NFS URL 进行浏览 

有关在 Web 浏览器中使用 NFS URL 的说明。 

如何使用 NFS URL 进行浏览

在 autofs 中使用公共文件句柄 

使用自动挂载程序挂载文件系统时强制使用公共文件句柄的步骤。 

如何在 Autofs 中使用公共文件句柄

在 autofs 中使用 NFS URL 

向自动挂载程序映射添加 NFS URL 的步骤。 

如何在 Autofs 中使用 NFS URL

通过防火墙提供对文件系统的访问 

允许使用 WebNFS 协议通过防火墙对文件系统进行访问的步骤。 

如何通过防火墙挂载 NFS 文件系统

使用 NFS URL 挂载文件系统 

允许使用 NFS URL 来访问文件系统的步骤。此过程允许在不使用 MOUNT 协议的情况下访问文件系统。 

如何使用 NFS URL 挂载 NFS 文件系统

规划 WebNFS 访问

要使用 WebNFS,首先需要能够运行和装入 NFS URL(例如 nfs://server/path)的应用程序。下一步是选择可针对 WebNFS 访问导出的文件系统。如果应用程序具有 Web 浏览功能,则通常会使用 Web 服务器的文档根目录。选择要针对 WebNFS 访问导出的文件系统时,需要考虑以下几个因素。

  1. 每台服务器都有一个公共文件句柄,缺省情况下该句柄与服务器的根文件系统关联。系统将相对于与公共文件句柄关联的目录确定 NFS URL 中的路径。如果该路径指向导出的文件系统中的一个文件或目录,则服务器将提供访问权限。可以使用 share 命令的 public 选项将公共文件句柄与特定的导出的目录相关联。使用此选项可使 URL 可相对于共享文件系统,而不是相对于服务器的根文件系统。 根文件系统不允许进行 Web 访问,除非共享根文件系统。

  2. 使用 WebNFS 环境,已具有挂载权限的用户可通过浏览器访问文件。无论文件系统是否是使用 public 选项导出的,都可启用此功能。由于用户已经通过 NFS 设置拥有了访问这些文件的权限,因此这种访问不会引入任何其他安全风险。如果无法挂载文件系统的用户需要使用 WebNFS 访问权限,只需使用 public 选项来共享该文件系统即可。

  3. 对公众开放的文件系统比较适于使用 public 选项。例如,ftp 归档目录中的顶层目录或 Web 站点的主 URL 目录。

  4. 可以使用带有 index 选项的 share 命令来强制装入 HTML 文件。另外,也可以在访问 NFS URL 时列出目录。

    选定文件系统后,请检查文件并根据需要将访问权限设置为限制查看文件或目录。请根据需要,为正在共享的所有 NFS 文件系统建立权限。对于许多站点,目录的 755 种权限和文件的 644 种权限可提供正确的访问级别。

    如果要同时使用 NFS URL 和 HTTP URL 访问某个 Web 站点,则需要考虑其他因素。这些因素将在有关 Web 浏览器使用的 WebNFS 限制中加以介绍。

如何使用 NFS URL 进行浏览

支持 WebNFS 服务的浏览器应允许对以下形式的 NFS URL 进行访问:


nfs://server<:port>/path
server

文件服务器的名称

port

要使用的端口号(默认值为 2049

path

文件的路径,可以相对于公共文件句柄,也可以相对于根文件系统


注 –

在大多数浏览器中,后续事务可以记住前一个事务的 URL 服务类型(例如 nfshttp)。如果装入了包括不同服务类型的 URL,则会出现异常。使用 NFS URL 后,可能会装入对 HTTP URL 的引用。如果装入了这类引用,则后续页面将使用 HTTP 协议而不是 NFS 协议进行装入。


如何启用可穿越防火墙的 WebNFS 访问

通过将防火墙配置为允许在端口 2049 上使用 TCP 连接,可以对不属于本地子网的客户机启用 WebNFS 访问。如果仅允许 httpd 访问,则不允许使用 NFS URL。

Autofs 管理的任务概述

本节介绍在您自己的环境中可能会遇到的一些最常见任务。其中包括针对每种情况的建议过程,以帮助您配置 autofs,从而最好地满足客户机的需要。要执行本节介绍的任务,请使用 Solaris Management Console 工具或参见《System Administration Guide: Naming and Directory Services (NIS+)》


注 –

从 Solaris 10 发行版开始,还可以使用 /etc/default/autofs 文件来配置 autofs 环境。有关任务信息,请参阅使用 /etc/default/autofs 文件配置 autofs 环境


Autofs 管理的任务列表

下表提供了与 autofs 相关的许多任务的说明和链接。

表 5–5 Autofs 管理的任务列表

任务 

说明 

参考 

启动 autofs 

启动自动挂载服务而不必重新引导系统 

如何启动自动挂载程序

停止 autofs 

停止自动挂载服务而不禁用其他网络服务 

如何停止自动挂载程序

使用 /etc/default/autofs 文件配置 autofs 环境

/etc/default/autofs 文件中的关键字赋值

使用 /etc/default/autofs 文件配置 autofs 环境

使用 autofs 访问文件系统 

使用自动挂载服务访问文件系统 

使用自动挂载程序挂载

修改 autofs 映射 

修改主映射的步骤,这些步骤应该用于列出其他映射 

如何修改主映射

 

修改间接映射的步骤,这些步骤应该用于大多数映射 

如何修改间接映射

 

修改直接映射的步骤,需要在客户机上的挂载点与服务器之间建立直接关联时应该使用这些步骤 

如何修改直接映射

修改 autofs 映射以访问非 NFS 文件系统 

使用 CD-ROM 应用程序项设置 autofs 映射的步骤 

如何使用 Autofs 访问 CD-ROM 应用程序

 

使用 PC-DOS 软盘项设置 autofs 映射的步骤 

如何使用 Autofs 访问 PC-DOS 数据软盘

 

使用 autofs 访问 CacheFS 文件系统的步骤 

如何使用 CacheFS 访问 NFS 文件系统

使用 /home

如何设置公用 /home 映射的示例

设置 /home 的通用视图

 

设置引用多个文件系统的 /home 映射的步骤

如何设置包含多个起始目录文件系统的 /home

使用新的 autofs 挂载点 

设置与项目相关的 autofs 映射的步骤 

如何在 /ws 下整合与项目相关的文件

 

设置支持不同客户机体系结构的 autofs 映射的步骤 

如何设置不同的体系结构来访问共享名称空间

 

设置支持不同操作系统的 autofs 映射的步骤 

如何支持不兼容的客户机操作系统版本

使用 autofs 复制文件系统 

提供对故障转移文件系统的访问 

如何在多台服务器之间复制共享文件

在 autofs 中使用安全限制 

限制对文件的远程 root 访问时提供对文件系统的访问

如何应用 Autofs 安全限制

在 autofs 中使用公共文件句柄 

挂载文件系统时强制使用公共文件句柄 

如何在 Autofs 中使用公共文件句柄

在 autofs 中使用 NFS URL  

添加 NFS URL 以便自动挂载程序可以使用它 

如何在 Autofs 中使用 NFS URL

禁用 autofs 浏览功能 

在单台客户机上禁用浏览功能使得 autofs 挂载点不会自动装载的步骤 

如何在单台 NFS 客户机上完全禁用 Autofs 浏览功能

 

在所有客户机上禁用浏览功能使得 autofs 挂载点不会自动装载的步骤 

如何针对所有客户机禁用 Autofs 浏览功能

 

在客户机上禁用浏览功能使得特定 autofs 挂载点不会自动装载的步骤 

如何在选定的文件系统上禁用 Autofs 浏览功能

使用 /etc/default/autofs 文件配置 autofs 环境

从 Solaris 10 发行版开始,可以使用 /etc/default/autofs 文件来配置 autofs 环境。具体来说,此文件提供了另一种配置 autofs 命令和 autofs 守护进程的方法。在命令行上制定的规范也可以通过此配置文件实现。通过为关键字提供值,可以制定规范。有关更多信息,请参阅/etc/default/autofs 文件

以下过程说明如何使用 /etc/default/autofs 文件。

Procedure如何使用 /etc/default/autofs 文件

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. /etc/default/autofs 文件中添加或修改项。

    例如,如果要关闭对所有 autofs 挂载点的浏览,可以添加以下行。


    AUTOMOUNTD_NOBROWSE=ON
    

    此关键字与 automountd-n 变量等效。有关关键字的列表,请参阅 /etc/default/autofs 文件

  3. 重新启动 autofs 守护进程。

    键入以下命令:


    # svcadm restart system/filesystem/autofs
    

涉及映射的管理任务

下表介绍了管理 autofs 映射时需要注意的几个因素。选择的映射和名称服务将影响对 autofs 映射进行更改时需要使用的机制。

下表介绍了映射类型及其使用。

表 5–6 autofs 映射类型及其使用

映射类型 

使用 

将目录与映射关联 

直接

将 autofs 定向至特定文件系统 

间接

将 autofs 定向至面向引用的文件系统 

下表介绍了如何对基于名称服务的 autofs 环境进行更改。

表 5–7 映射维护

名称服务 

方法 

本地文件 

文本编辑器

NIS 

make 文件

NIS+ 

nistbladm

下表提示您何时运行 automount 命令,具体取决于对映射类型已做的修改。例如,如果已添加或删除了某个直接映射,则需要在本地系统上运行 automount 命令。通过运行该命令,可使更改生效。但是,如果已修改了现有项,则无需运行 automount 命令以使更改生效。

表 5–8 何时运行 automount 命令

映射类型 

重新启动 automount

 

 

添加或删除 

修改 

auto_master

Y

Y

direct

Y

N

indirect

N

N

修改映射

以下过程要求使用 NIS+ 作为名称服务。

Procedure如何修改主映射

  1. 以具有更改映射权限的用户身份登录。

  2. 使用 nistbladm 命令,对主映射进行更改。

    请参见《System Administration Guide: Naming and Directory Services (NIS+)》

  3. 对于每台客户机,成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  4. 对于每台客户机,运行 automount 命令以确保更改生效。

  5. 通知用户所做的更改。

    通知是必需的,以便用户还可以在其各自的计算机上以超级用户身份运行 automount 命令。请注意,只要运行 automount 命令,即会从主映射中收集信息。

Procedure如何修改间接映射

  1. 以具有更改映射权限的用户身份登录。

  2. 使用 nistbladm 命令,对间接映射进行更改。

    请参见《System Administration Guide: Naming and Directory Services (NIS+)》。请注意,更改将在下次使用映射时(即下次执行挂载时)生效。

Procedure如何修改直接映射

  1. 以具有更改映射权限的用户身份登录。

  2. 使用 nistbladm 命令,添加或删除对直接映射的更改。

    请参见《System Administration Guide: Naming and Directory Services (NIS+)》

  3. 如果在前面的步骤中已添加或删除了某个挂载点项,请运行 automount 命令。

  4. 通知用户所做的更改。

    通知是必需的,以便用户还可以在其各自的计算机上以超级用户身份运行 automount 命令。


    注 –

    如果仅修改或更改现有直接映射项的内容,则无需运行 automount 命令。


    例如,假定修改了 auto_direct 映射,以便从其他服务器挂载 /usr/src 目录。如果此时未挂载 /usr/src,则尝试访问 /usr/src 时新的项会立即生效。如果现在已挂载了 /usr/src,则可以等到进行自动取消挂载,然后再访问该文件。


    注 –

    请尽可能使用间接映射。间接映射更容易构造,并且对计算机文件系统的要求较少。另外,间接映射也不会像直接映射那样在挂载表中占用很多空间。


避免挂载点冲突

如果已在 /src 上挂载了本地磁盘分区并且计划使用 autofs 服务来挂载其他源目录,则可能会遇到问题。如果指定挂载点 /src,则只要尝试访问本地分区,NFS 服务便会隐藏该分区。

需要在其他某个位置(例如在 /export/src 上)挂载该分区。然后,需要在 /etc/vfstab 中添加如下项:


/dev/dsk/d0t3d0s5 /dev/rdsk/c0t3d0s5 /export/src ufs 3 yes - 

还需要在 auto_src 中添加此项:


terra		terra:/export/src 

terra 是计算机的名称。

访问非 NFS 文件系统

Autofs 还可以挂载 NFS 文件以外的其他文件。Autofs 会将文件挂载在可移除介质上,如软盘或 CD-ROM。通常,可使用卷管理器将文件挂载在可移除介质上。以下示例说明如何可以通过 autofs 完成此挂载。卷管理器和 autofs 不会同时运行,因此必须先停用卷管理器,然后才能使用这些项。

可以将介质放入驱动器并从映射中引用文件系统,而不要从服务器挂载文件系统。如果计划访问非 NFS 文件系统并且使用的是 autofs,请参见以下过程。

Procedure如何使用 Autofs 访问 CD-ROM 应用程序


注 –

如果使用卷管理器,请使用此过程。


  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 更新 autofs 映射。

    为 CD-ROM 文件系统添加如下项:


    hsfs     -fstype=hsfs,ro     :/dev/sr0

    要挂载的 CD-ROM 设备必须显示为冒号后跟一个名称。

Procedure如何使用 Autofs 访问 PC-DOS 数据软盘


注 –

如果使用卷管理器,请使用此过程。


  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 更新 autofs 映射。

    为软盘文件系统添加如下项:


     pcfs     -fstype=pcfs     :/dev/diskette

使用 CacheFS 访问 NFS 文件系统

高速缓存文件系统 (cache file system, CacheFS) 是一种普通的非易失性高速缓存机制。CacheFS 利用小而快速的本地磁盘提高了某些文件系统的性能。例如,可以使用 CacheFS 提高 NFS 环境的性能。

CacheFS 在不同版本的 NFS 上的工作方式不同。例如,如果客户机和后台文件系统运行的是 NFS 版本 2 或版本 3,则文件将在前台文件系统中进行高速缓存以便客户机访问。但是,如果客户机和服务器运行的都是 NFS 版本 4,则其功能如下:当客户机最初请求访问 CacheFS 文件系统的文件时,请求将绕过前台的(即高速缓存的)文件系统,并直接访问后台文件系统。使用 NFS 版本 4 后,文件将不再在前台文件系统中进行高速缓存。后台文件系统将提供所有文件访问权。 另外,由于前台文件系统中没有高速缓存任何文件,因此特定于 CacheFS 的挂载选项(该选项旨在影响前台文件系统)会被忽略。特定于 CacheFS 的挂载选项不适用于后台文件系统。


注 –

第一次在系统上配置 NFS 版本 4 时,控制台上将出现一条警告,指出高速缓存不再起作用。


Procedure如何使用 CacheFS 访问 NFS 文件系统

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 运行 cfsadmin 命令以在本地磁盘创建高速缓存目录。


    # cfsadmin -c /var/cache
    
  3. cachefs 项添加到相应的自动挂载程序映射中。

    例如,将此项添加到主映射中可以高速缓存所有起始目录:


    /home auto_home -fstype=cachefs,cachedir=/var/cache,backfstype=nfs

    将此项添加到 auto_home 映射中仅会高速缓存名为 rich 的用户的起始目录:


    rich -fstype=cachefs,cachedir=/var/cache,backfstype=nfs dragon:/export/home1/rich

    注 –

    随后搜索的映射中包括的选项会覆盖之前搜索的映射中设置的选项。最后找到的选项即是使用的选项。在前面的示例中,如果某些选项需要更改,则向 auto_home 映射添加其他项时只需在主映射中包括这些选项即可。


自定义自动挂载程序

可以采用多种方式设置自动挂载程序映射。以下任务给出了有关如何自定义自动挂载程序映射以提供易用目录结构的详细信息。

设置 /home 的通用视图

理想情况是,所有的网络用户均可以在 /home 下找到其各自的或任何人的起始目录。此视图应该在所有计算机(无论是客户机还是服务器)中是通用的。

每个 Solaris 安装都附带一个主映射: /etc/auto_master


# Master map for autofs

#

+auto_master

/net     -hosts     -nosuid,nobrowse

/home    auto_home  -nobrowse

另外,还会在 /etc 下安装 auto_home 的映射。


# Home directory map for autofs

#

+auto_home

但对外部 auto_home 映射的引用除外,此映射为空。如果要使 /home 下的目录对于所有计算机通用,请勿修改此 /etc/auto_home 映射。所有的起始目录项都应出现在名称服务文件 NIS 或 NIS+ 中。


注 –

不应允许用户从其起始目录运行 setuid 可执行文件。如果没有此限制,则任何用户在任何计算机上都可具有超级用户权限。


Procedure如何设置包含多个起始目录文件系统的 /home

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. /export/home 下安装起始目录分区。

    如果系统具有多个分区,请将这些分区安装在单独的目录下,例如 /export/home1/export/home2

  3. 使用 Solaris Management Console 工具创建并维护 auto_home 映射。

    每次创建新的用户帐户时,请在 auto_home 映射中键入用户起始目录的位置。映射项可以非常简单,例如:


    rusty        dragon:/export/home1/&
    
    gwenda       dragon:/export/home1/&
    
    charles      sundog:/export/home2/&
    
    rich         dragon:/export/home3/&

    请注意使用 &(和符号)替代映射关键字。和符号是以下示例中第二次出现的 rusty 的缩写。


    rusty     	dragon:/export/home1/rusty

    如果提供了 auto_home 映射,则用户可以引用路径为 /home/user 的任何起始目录(包括其本身的起始目录)。user 是它们在映射中的登录名和关键字。登录到其他用户的计算机时,所有起始目录的此通用视图非常重要。Autofs 将为您挂载起始目录。同样,如果在其他计算机上运行远程窗口系统客户机,则该客户机程序具有与 /home 目录视图相同的视图。

    此通用视图还将扩展到服务器。以前面的示例为例,如果 rusty 登录服务器 dragon,则 autofs 会通过将 /export/home1/rusty 回送挂载到 /home/rusty 上来提供对本地磁盘的直接访问。

    用户无需知道其起始目录的实际位置。如果 rusty 需要更多磁盘空间,并且需要将其起始目录重新定位到其他服务器,则简单更改就足够了。只需更改 auto_home 映射中 rusty 的项,即可反映新的位置。其他用户可以继续使用 /home/rusty 路径。

Procedure如何在 /ws 下整合与项目相关的文件

假定您是某个大型软件开发项目的管理员。您计划在名为 /ws 的目录下提供所有与项目相关的文件。此目录将在站点上的所有工作站中通用。

  1. 向站点 auto_master 映射 NIS 或 NIS+ 添加 /ws 目录的项。


    /ws     auto_ws     -nosuid 

    auto_ws 映射可确定 /ws 目录的内容。

  2. 为防万一,添加 -nosuid 选项。

    此选项可阻止用户运行任何工作区可能存在的 setuid 程序。

  3. auto_ws 映射中添加项。

    auto_ws 映射已经过组织,因此每项都能描述一个子项目。首次尝试添加时将生成如下映射:


    compiler   alpha:/export/ws/&
    
    windows    alpha:/export/ws/&
    
    files      bravo:/export/ws/&
    
    drivers    alpha:/export/ws/&
    
    man        bravo:/export/ws/&
    
    tools      delta:/export/ws/&

    每项结尾的和符号 (&) 是指该项关键字的缩写。例如,第一项与以下内容等效:


    compiler		alpha:/export/ws/compiler 

    首次尝试添加时会提供一个外观简单的映射,但该映射不适当。项目组织者决定应提供 man 项中的文档作为每个子项目下的子目录。另外,每个子项目都要求子目录描述该软件的多个版本。必须将其中的每个子目录都指定给服务器上的整个磁盘分区。

    请按如下所示修改映射中的各项:


    compiler \
    
        /vers1.0    alpha:/export/ws/&/vers1.0 \
    
        /vers2.0    bravo:/export/ws/&/vers2.0 \
    
        /man        bravo:/export/ws/&/man
    
    windows \
    
        /vers1.0    alpha:/export/ws/&/vers1.0 \
    
        /man        bravo:/export/ws/&/man
    
    files \
    
        /vers1.0    alpha:/export/ws/&/vers1.0 \
    
        /vers2.0    bravo:/export/ws/&/vers2.0 \
    
        /vers3.0    bravo:/export/ws/&/vers3.0 \
    
        /man        bravo:/export/ws/&/man
    
    drivers \
    
        /vers1.0    alpha:/export/ws/&/vers1.0 \
    
        /man        bravo:/export/ws/&/man
    
    tools \
    
        /           delta:/export/ws/&

    尽管现在映射看起来比较大,但是映射仍然仅包含五个项。由于每项都包含多个挂载,因此每项都比较大。例如,对 /ws/compiler 的引用要求挂载 vers1.0vers2.0man 三个目录。每一行结尾的反斜杠通知 autofs 该项会继续进入下一行。实际上,尽管使用了换行符和一些缩进以使该项更具可读性,但该项仍是较长的一行。tools 目录包含所有子项目的软件开发工具,因此该目录不遵循相同的子目录结构。tools 目录仍然表示单个挂载。

    这种安排为管理员提供了许多灵活性。软件项目通常会占用大量磁盘空间。在项目的整个生命周期内,可能需要重新定位并扩展各种磁盘分区。如果这些更改反映在 auto_ws 映射中,则无需通知用户,因为 /ws 下的目录分层结构未被更改。

    由于服务器 alphabravo 查看的是同一个 autofs 映射,因此登录到这些计算机的任何用户都可以找到预期的 /ws 名称空间。系统将为这些用户提供通过回送挂载(而不是 NFS 挂载)对本地文件的直接访问。

Procedure如何设置不同的体系结构来访问共享名称空间

您需要为本地可执行文件和应用程序(如电子表格应用程序和字处理软件包)汇编一个共享名称空间。此名称空间的客户机使用要求不同可执行文件格式的多个不同的工作站体系结构。另外,某些工作站运行的是不同发行版的操作系统。

  1. 使用 nistbladm 命令创建 auto_local 映射。

    请参见《System Administration Guide: Naming and Directory Services (NIS+)》

  2. 为共享名称空间选择单个站点特定名称。 此名称可使属于此空间的文件和目录易于识别。

    例如,如果选择 /usr/local 作为名称,则路径 /usr/local/bin 显然属于此名称空间。

  3. 为使用户群易于识别,请创建 autofs 间接映射。在 /usr/local 中挂载此映射。在 NIS+(或 NIS)auto_master 映射中设置以下项:


    /usr/local     auto_local     -ro

    请注意,-ro 挂载选项表明客户机不能对任何文件或目录执行写入操作。

  4. 在服务器上导出相应的目录。

  5. 在 auto_local 映射中包括 bin 项。

    目录结构如下:


     bin     aa:/export/local/bin 
  6. (可选的)要为不同体系结构的客户机提供服务,请通过添加 autofs CPU 变量来更改相应的项。


    bin     aa:/export/local/bin/$CPU 
    • 对于 SPARC 客户机-将可执行文件放入 /export/local/bin/sparc 中。

    • 对于 x86 客户机-将可执行文件放入 /export/local/bin/i386 中。

Procedure如何支持不兼容的客户机操作系统版本

  1. 将体系结构类型与确定客户机操作系统类型的变量合并。

    可以将 autofs OSREL 变量与 CPU 变量合并,以形成可同时确定 CPU 类型和 OS 发行版的名称。

  2. 创建以下映射项。


    bin     aa:/export/local/bin/$CPU$OSREL

    对于运行操作系统版本 5.6 的客户机,请导出以下文件系统:

    • 对于 SPARC 客户机-导出 /export/local/bin/sparc5.6

    • 对于 x86 客户机-将可执行文件放入 /export/local/bin/i3865.6 中。

Procedure如何在多台服务器之间复制共享文件

共享已复制的只读文件系统的最佳方法是使用故障转移。有关故障转移的说明,请参见客户端故障转移

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 修改 autofs 映射中的项。

    创建用逗号分隔的所有副本服务器的列表,如下所示:


    bin     aa,bb,cc,dd:/export/local/bin/$CPU
    

    Autofs 会选择距离最近的服务器。如果服务器具有多个网络接口,请列出每个接口。Autofs 会选择距离客户机最近的接口,从而避免路由不必要的 NFS 流量。

Procedure如何应用 Autofs 安全限制

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 在名称服务 auto_master 文件 NIS 或 NIS+ 中创建以下项:


    /home     auto_home     -nosuid
    

    nosuid 选项可阻止用户创建设置了 setuidsetgid 位的文件。

    此项将覆盖普通的本地 /etc/auto_master 文件中的 /home 的项。请参见前面的示例。由于对外部名称服务映射的 +auto_master 引用出现在该文件中的 /home 项之前,因此会发生覆盖。如果 auto_home 映射中的项包括挂载选项,则会覆写 nosuid 选项。因此,在 auto_home 映射中不应使用任何选项,或是每项都必须包括 nosuid 选项。


    注 –

    请勿在服务器的 /home 上下挂载起始目录磁盘分区。


Procedure如何在 Autofs 中使用公共文件句柄

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 在 autofs 映射中创建如下项:


    /usr/local     -ro,public    bee:/export/share/local

    public 选项会强制使用公共句柄。如果 NFS 服务器不支持公共文件句柄,则挂载将失败。

Procedure如何在 Autofs 中使用 NFS URL

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 创建如下的 autofs 项:


    /usr/local     -ro    nfs://bee/export/share/local

    服务会尝试在 NFS 服务器上使用公共文件句柄。但是,如果该服务器不支持公共文件句柄,则会使用 MOUNT 协议。

禁用 Autofs 浏览功能

从 Solaris 2.6 发行版开始,安装的默认版本的 /etc/auto_master 会向 /home/net 的项添加 -nobrowse 选项。此外,如果尚未修改 /etc/auto_master 中的 /home/net 项,则升级过程还会向这些项中添加 -nobrowse 选项。但是,可能必须手动进行这些更改,或在安装后针对站点特定的 autofs 挂载点关闭浏览功能。

可以采用多种方式关闭浏览功能。使用 automountd 守护进程的命令行选项禁用该功能,此方式可针对客户机完全禁用 autofs 浏览功能;或者使用 NIS 或 NIS+ 名称空间中的 autofs 映射针对所有客户机上的每个映射项禁用浏览功能;另外,还可以在未使用网络范围名称空间的情况下使用本地 autofs 映射,针对每台客户机上的每个映射项禁用该功能。

Procedure如何在单台 NFS 客户机上完全禁用 Autofs 浏览功能

  1. 在 NFS 客户机上成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 编辑 /etc/default/autofs 文件以包括以下关键字和值。


    AUTOMOUNTD_NOBROWSE=TRUE
  3. 重新启动 autofs 服务。


    # svcadm restart system/filesystem/autofs
    
    

Procedure如何针对所有客户机禁用 Autofs 浏览功能

要针对所有客户机禁用浏览功能,必须使用名称服务,如 NIS 或 NIS+。否则,需要手动编辑每台客户机上的自动挂载程序映射。在本示例中,/home 目录的浏览功能已禁用。必须对需要禁用的每个间接 autofs 节点遵照以下过程执行操作。

  1. 向名称服务 auto_master 文件中的 /home 项添加 -nobrowse 选项。


    /home     auto_home     -nobrowse
    
  2. 在所有客户机上运行 automount 命令。

    在客户机系统上运行 automount 命令后或重新引导后,新的行为才会生效。


    # /usr/sbin/automount
    

Procedure如何在选定的文件系统上禁用 Autofs 浏览功能

在本示例中,/net 目录的浏览功能已禁用。对于 /home 或其他任何 autofs 挂载点可以使用同一过程。

  1. 检查 /etc/nsswitch.conf 中的 automount 项。

    要使本地文件项具有较高的优先级,名称服务切换文件中的项应将 files 列在名称服务之前。例如:


    automount:  files nisplus

    此项会显示标准 Solaris 安装中的缺省配置。

  2. 检查 /etc/auto_master+auto_master 项的位置。

    除使本地文件优先于名称空间中的项以外,还必须将 +auto_master 项移至 /net 后面:


    # Master map for automounter
    
    #
    
    /net    -hosts     -nosuid
    
    /home   auto_home
    
    /xfn    -xfn
    
    +auto_master
    

    标准配置会将 +auto_master 项置于文件的顶部。此放置方式可防止使用任何本地更改。

  3. /etc/auto_master 文件中的 /net 项添加 nobrowse 选项。


    /net     -hosts     -nosuid,nobrowse
    
  4. 在所有客户机上运行 automount 命令。

    在客户机系统上运行 automount 命令后或重新引导后,新的行为才会生效。


    # /usr/sbin/automount
    

NFS 疑难解答的策略

跟踪 NFS 问题时,请记住可能出现故障的主要位置:服务器、客户机和网络。本节概括的策略会力求隔离每个单独的组件,以找到运行不正常的组件。在所有情况下,要使远程挂载成功,mountdnfsd 守护进程必须正在服务器上运行。

缺省情况下,将为所有挂载设置 -intr 选项。如果程序挂起时出现 server not responding 消息,则可以使用键盘中断组合键 Ctrl-c 中止该程序。

网络或服务器出现问题时,访问硬挂载远程文件的程序将会失败,其方式与访问软挂载远程文件的那些程序不同。硬挂载远程文件系统会导致客户机的内核在服务器再次响应之前一直重试请求。软挂载远程文件系统会导致客户机的系统调用在尝试片刻后返回错误。由于这些错误会导致意外的应用程序错误和数据损坏,因此应避免软挂载。

硬挂载文件系统时,如果服务器无法进行响应,则尝试访问该文件系统的程序将挂起。在这种情况下,NFS 系统会在控制台上显示以下消息:


NFS server hostname not responding still trying

服务器最终响应时,控制台上会出现以下消息:


NFS server hostname ok

访问软挂载文件系统(其服务器未响应)的程序会生成以下消息:


NFS operation failed for server hostname: error # (error_message)

注 –

由于可能的错误,请勿软挂载包含读写数据的文件系统或用于运行可执行文件的文件系统。如果应用程序忽略这些错误,则可写数据可能会被损坏。挂载的可执行文件可能无法正确装入,从而会失败。


NFS 疑难解答过程

要确定 NFS 服务出现故障的位置,需要遵照几个过程执行操作以隔离故障。请检查以下各项:

在检查上述各项的过程中,您可能会注意到网络的其他部分未正常运行。例如,名称服务或物理网络硬件可能未正常运行。《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》包含几个名称服务的调试过程。另外,在该过程中,您可能还会了解到问题不在客户端。例如,如果从工作区域的每个子网中至少获得了一个故障呼叫。在这种情况下,应该假定问题出在服务器上或服务器附近的网络硬件上。因此,应该在服务器而不是客户机上启动调试过程。

Procedure如何检查 NFS 客户机上的连接

  1. 检查是否可以从客户机访问 NFS 服务器。请在客户机上键入以下命令。


    % /usr/sbin/ping bee
    
    bee is alive

    如果此命令报告服务器处于活动状态,请以远程方式检查 NFS 服务器。请参见如何远程检查 NFS 服务器

  2. 如果不能从客户机访问服务器,请确保本地名称服务正在运行。

    对于 NIS+ 客户机,请键入以下内容:


    % /usr/lib/nis/nisping -u
    
    Last updates for directory eng.acme.com. :
    
    Master server is eng-master.acme.com.
    
            Last update occurred at Mon Jun  5 11:16:10 1995
    
    
    
    Replica server is eng1-replica-58.acme.com.
    
            Last Update seen was Mon Jun  5 11:16:10 1995
  3. 如果名称服务正在运行,请通过键入以下内容确保客户机已收到正确的主机信息:


    % /usr/bin/getent hosts bee
    
    129.144.83.117	bee.eng.acme.com
  4. 如果主机信息正确,但不能从该客户机访问服务器,请从其他客户机运行 ping 命令。

    如果从第二台客户机运行的命令失败,请参见如何验证服务器上的 NFS 服务

  5. 如果可以从第二台客户机访问服务器,请使用 ping 检查第一台客户机到本地网络中的其他系统的连接。

    如果此命令失败,请检查客户机上的网络软件配置,例如 /etc/netmasks/etc/nsswitch.conf

  6. (可选的)检查 rpcinfo 命令的输出。

    如果 rpcinfo 命令未显示 program 100003 version 4 ready and waiting,则服务器上未启用 NFS 版本 4。有关启用 NFS 版本 4 的信息,请参见表 5–3

  7. 如果软件正确,请检查网络硬件。

    尝试将客户机移至第二个网络断开位置。

Procedure如何远程检查 NFS 服务器

请注意,如果使用的是 NFS 版本 4 服务器,则不必同时支持 UDP 和 MOUNT 协议。

  1. 通过键入以下命令,检查 NFS 服务是否已在 NFS 服务器上启动:


    % rpcinfo -s bee|egrep 'nfs|mountd'
    
     100003  3,2    tcp,udp,tcp6,upd6                nfs     superuser
    
     100005  3,2,1  ticots,ticotsord,tcp,tcp6,ticlts,udp,upd6  mountd  superuser

    如果尚未启动守护进程,请参见如何重新启动 NFS 服务

  2. 检查服务器的 nfsd 进程是否正在响应。

    在客户机上,键入以下命令以测试来自服务器的 UDP NFS 连接。


    % /usr/bin/rpcinfo -u bee nfs
    
    program 100003 version 2 ready and waiting
    
    program 100003 version 3 ready and waiting
    

    注 –

    NFS 版本 4 不支持 UDP。


    如果服务器正在运行,则它将列显程序和版本号的列表。使用 -t 选项可以测试 TCP 连接。如果此命令失败,请前进至如何验证服务器上的 NFS 服务

  3. 通过键入以下命令,检查服务器的 mountd 是否正在响应。


    % /usr/bin/rpcinfo -u bee mountd
    
    program 100005 version 1 ready and waiting
    
    program 100005 version 2 ready and waiting
    
    program 100005 version 3 ready and waiting

    如果服务器正在运行,则它将列显与 UDP 协议关联的程序和版本号的列表。使用 -t 选项可以测试 TCP 连接。如果任一尝试失败,请前进至如何验证服务器上的 NFS 服务

  4. 检查本地 autofs 服务是否正在使用:


    % cd /net/wasp
    

    选择已知且应该正常工作的 /net/home 挂载点。如果此命令失败,请在客户机上以超级用户身份键入以下内容以重新启动 autofs 服务:


    # svcadm restart system/filesystem/autofs
    
  5. 验证是否在服务器上按照预期方式共享文件系统。


    % /usr/sbin/showmount -e bee
    
    /usr/src										eng
    
    /export/share/man						(everyone)

    请检查服务器上的项和本地挂载项中是否有错误。另外,还要检查名称空间。在本示例中,如果第一台客户机不在 eng 网络组中,则该客户机不能挂载 /usr/src 文件系统。

    请检查所有本地文件中包括挂载信息的所有项。此列表包括 /etc/vfstab 和所有的 /etc/auto_* 文件。

Procedure如何验证服务器上的 NFS 服务

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 检查服务器是否可以访问客户机。


    # ping lilac
    
    lilac is alive
  3. 如果不能从服务器访问客户机,请确保本地名称服务正在运行。对于 NIS+ 客户机,请键入以下内容:


    % /usr/lib/nis/nisping -u
    
    Last updates for directory eng.acme.com. :
    
    Master server is eng-master.acme.com.
    
            Last update occurred at Mon Jun  5 11:16:10 1995
    
    
    
    Replica server is eng1-replica-58.acme.com.
    
            Last Update seen was Mon Jun  5 11:16:10 1995
  4. 如果名称服务正在运行,请检查服务器上的网络软件配置,例如 /etc/netmasks/etc/nsswitch.conf

  5. 键入以下命令以检查 rpcbind 守护进程是否正在运行。


    # /usr/bin/rpcinfo -u localhost rpcbind
    
    program 100000 version 1 ready and waiting
    
    program 100000 version 2 ready and waiting
    
    program 100000 version 3 ready and waiting

    如果服务器正在运行,则它将列显与 UDP 协议关联的程序和版本号的列表。如果 rpcbind 似乎被挂起,请重新引导服务器,或遵照如何热启动 rpcbind中的步骤执行操作。

  6. 键入以下命令以检查 nfsd 守护进程是否正在运行。


    # rpcinfo -u localhost nfs
    
    program 100003 version 2 ready and waiting
    
    program 100003 version 3 ready and waiting
    
    # ps -ef | grep nfsd
    
    root    232      1  0  Apr 07     ?     0:01 /usr/lib/nfs/nfsd -a 16
    
    root   3127   2462  1  09:32:57  pts/3  0:00 grep nfsd

    注 –

    NFS 版本 4 不支持 UDP。


    如果服务器正在运行,则它将列显与 UDP 协议关联的程序和版本号的列表。另外,还应使用带有 -t 选项的 rpcinfo 来检查 TCP 连接。如果这些命令失败,请重新启动 NFS 服务。请参见如何重新启动 NFS 服务

  7. 键入以下命令以检查 mountd 守护进程是否正在运行。


    # /usr/bin/rpcinfo -u localhost mountd
    
    program 100005 version 1 ready and waiting
    
    program 100005 version 2 ready and waiting
    
    program 100005 version 3 ready and waiting
    
    # ps -ef | grep mountd
    
    root    145      1 0 Apr 07  ?     21:57 /usr/lib/autofs/automountd
    
    root    234      1 0 Apr 07  ?     0:04  /usr/lib/nfs/mountd
    
    root   3084 2462 1 09:30:20 pts/3  0:00  grep mountd

    如果服务器正在运行,则它将列显与 UDP 协议关联的程序和版本号的列表。另外,还应使用带有 -t 选项的 rpcinfo 来检查 TCP 连接。如果这些命令失败,请重新启动 NFS 服务。请参见如何重新启动 NFS 服务

Procedure如何重新启动 NFS 服务

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 在服务器上重新启动 NFS 服务。

    键入以下命令。


    # svcadm restart network/nfs/server
    

Procedure如何热启动 rpcbind

如果 NFS 服务器由于正在工作而无法重新引导,则可以重新启动 rpcbind,而不必重新启动使用 RPC 的所有服务。只需遵照以下步骤完成热启动即可。

  1. 成为超级用户或承担等效角色。

    角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2  章 “使用 Solaris Management Console(任务)”

  2. 确定 rpcbind 的 PID

    运行 ps 以获取 PID,即第二列中的值。


    # ps -ef |grep rpcbind
    
        root   115     1  0   May 31 ?        0:14 /usr/sbin/rpcbind
    
        root 13000  6944  0 11:11:15 pts/3    0:00 grep rpcbind
  3. 将 SIGTERM 信号发送至 rpcbind 进程。

    在本示例中,term 是要发送的信号,115 是程序的 PID(请参见 kill(1) 手册页)。此命令会导致 rpcbind/tmp/portmap.file/tmp/rpcbind.file 中创建当前注册服务的列表。


    # kill -s term 115
    

    注 –

    如果未使用 -s term 选项中止 rpcbind 进程,则无法完成 rpcbind 的热启动。必须重新引导服务器才能恢复服务。


  4. 重新启动 rpcbind

    重新热启动该命令,以便查看通过 kill 命令创建的文件。热启动还可确保进程在无需重新启动所有 RPC 服务的情况下进行恢复。请参见 rpcbind(1M) 手册页。


    # /usr/sbin/rpcbind -w
    

识别提供 NFS 文件服务的主机

运行带有 -m 选项的 nfsstat 命令可收集当前的 NFS 信息。当前服务器的名称会列显在 “currserver=” 之后。


% nfsstat -m

/usr/local from bee,wasp:/export/share/local

 Flags: vers=3,proto=tcp,sec=sys,hard,intr,llock,link,synlink,

		acl,rsize=32768,wsize=32678,retrans=5

 Failover: noresponse=0, failover=0, remap=0, currserver=bee

Procedure如何验证用于 mount 命令的选项

在 Solaris 2.6 发行版以及 2.6 发行版之后修补的 mount 命令的任何版本中,不会针对无效选项发出警告消息。以下过程有助于确定在命令行上或通过 /etc/vfstab 提供的选项是否有效。

对于本示例,假定以下命令已运行:


# mount -F nfs -o ro,vers=2 bee:/export/share/local /mnt
  1. 通过运行以下命令来验证选项。


    % nfsstat -m
    
    /mnt from bee:/export/share/local
    
    Flags:  vers=2,proto=tcp,sec=sys,hard,intr,dynamic,acl,rsize=8192,wsize=8192,
    
            retrans=5

    bee 中的文件系统已挂载了版本设置为 2 的协议。不过,nfsstat 命令不会显示有关所有选项的信息。但是,使用 nfsstat 命令是验证选项的最准确的方法。

  2. 检查 /etc/mnttab 中的项。

    mount 命令不允许将无效选项添加到挂载表中。因此,请验证文件中列出的选项是否与命令行中列出的那些选项匹配。采用这种方式,即可检查 nfsstat 命令未报告的那些选项。


    # grep bee /etc/mnttab
    
    bee:/export/share/local /mnt nfs	ro,vers=2,dev=2b0005e 859934818

Autofs 疑难解答

有时,您可能会遇到与 autofs 有关的问题。本节将改进问题解决过程。本节分为两个小节。

本节提供了 autofs 生成的错误消息的列表。该列表分为两部分。

每条错误消息后都有说明和该消息的可能原因。

进行疑难解答时,请使用详细 (-v) 选项启动 autofs 程序。否则,可能会遇到问题却不知道原因。

以下段落标有 autofs 失败时可能出现的错误消息,以及可能问题的说明。

automount -v 生成的错误消息


bad key key in direct map mapname

描述:

扫描直接映射时,autofs 找到了不带前缀 / 的项关键字。

解决方法:

直接映射中的关键字必须是全路径名。


bad key key in indirect map mapname

描述:

扫描间接映射时,autofs 找到了包含 / 的项关键字。

解决方法:

间接映射关键字必须是简单的名称,而不是路径名。


can't mount server:pathname: reason

描述:

服务器上的挂载守护进程拒绝为 server:pathname 提供文件句柄。

解决方法:

请检查服务器上的导出表。


couldn't create mount point mountpoint: reason

描述:

Autofs 无法创建挂载所需的挂载点。尝试以分层结构挂载服务器的所有导出文件系统时,经常会出现此问题。

解决方法:

所需的挂载点只能存在于无法挂载的文件系统中,这意味着不能导出文件系统。由于导出的父文件系统以只读方式导出,因此无法创建挂载点。


leading space in map entry entry text in mapname

描述:

Autofs 在自动挂载映射中发现了包含前导空格的项。此问题通常表明不正确的连续映射项。例如:


fake

/blat   		frobz:/usr/frotz 
解决方法:

在本示例中,autofs 遇到第二行时就会生成警告,因为第一行应该以反斜杠 (\) 终止。


mapname: Not found

描述:

无法找到所需的映射。仅当使用 -v 选项时,才会产生此消息。

解决方法:

请检查映射名的拼写和路径名。


remount server:pathname on mountpoint: server not responding

描述:

Autofs 重新挂载以前已取消挂载的文件系统失败。

解决方法:

请联系 Sun 以获取帮助。此错误消息非常少见,并且没有直接的解决方法。


WARNING: mountpoint already mounted on

描述:

Autofs 正在尝试通过现有的挂载点进行挂载。此消息意味着 autofs 中出现了内部错误(异常)。

解决方法:

请联系 Sun 以获取帮助。此错误消息非常少见,并且没有直接的解决方法。

各种错误消息


dir mountpoint must start with '/'

解决方法:

自动挂载程序的挂载点必须作为全路径名提供。请检查挂载点的拼写和路径名。


hierarchical mountpoint: pathname1 and pathname2

解决方法:

Autofs 不允许其挂载点具有分层结构关系。autofs 挂载点决不能包含在其他自动挂载的文件系统中。


host server not responding

描述:

Autofs 尝试访问 server,但未收到任何响应。

解决方法:

请检查 NFS 服务器的状态。


hostname£o exports: rpc_err

描述:

hostname 获取导出列表时出现错误。此消息表明服务器或网络问题。

解决方法:

请检查 NFS 服务器的状态。


map mapname, key key: bad

描述:

该映射项格式错误,autofs 无法解释该项。

解决方法:

请重新检查该项。该项或许包含需要转义的字符。


mapnamenis_err

描述:

在 NIS 映射中查找项时出现错误。此消息可以表明 NIS 问题。

解决方法:

请检查 NIS 服务器的状态。


mount of server:pathname on mountpoint:reason

描述:

Autofs 执行挂载失败。这种情况可以表明服务器或网络问题。reason 字符串定义了该问题。

解决方法:

请联系 Sun 以获取帮助。此错误消息非常少见,并且没有直接的解决方法。


mountpoint: Not a directory

描述:

Autofs 无法将其本身挂载在 mountpoint 上,因为它不是一个目录。

解决方法:

请检查挂载点的拼写和路径名。


nfscast: cannot send packet: reason

描述:

Autofs 无法将查询包发送至复制文件系统位置列表中的服务器。reason 字符串定义了该问题。

解决方法:

请联系 Sun 以获取帮助。此错误消息非常少见,并且没有直接的解决方法。


nfscast: cannot receive reply: reason

描述:

Autofs 无法接收来自复制文件系统位置列表中的任何服务器的回复。reason 字符串定义了该问题。

解决方法:

请联系 Sun 以获取帮助。此错误消息非常少见,并且没有直接的解决方法。


nfscast: select: reason

描述:

所有这些错误消息都表明尝试检查服务器中的复制文件系统时出现问题。此消息可以表明网络问题。reason 字符串定义了该问题。

解决方法:

请联系 Sun 以获取帮助。此错误消息非常少见,并且没有直接的解决方法。


pathconf: no info for server:pathname

描述:

Autofs 无法获取路径名的 pathconf 信息。

解决方法:

请参见 fpathconf(2) 手册页。


pathconf: server : server not responding

描述:

Autofs 无法访问为 pathconf() 提供信息的 server 上的挂载守护进程。

解决方法:

请避免在此服务器中使用 POSIX 挂载选项。

使用 Autofs 时的其他错误

如果 /etc/auto* 文件设置了执行位,则自动挂载程序会尝试执行映射,它将创建如下消息:

/etc/auto_home: +auto_home: not found

在这种情况下,auto_home 文件具有的权限不正确。该文件中的每项都会生成与此消息类似的一条错误消息。应通过键入以下命令重置该文件的权限:


# chmod 644 /etc/auto_home

NFS 错误消息

本节显示了错误消息,后跟应会产生错误的情况说明和至少一种修正方法。


Bad argument specified with index option - must be a file

解决方法:

必须在 index 选项中指定文件名。不能使用目录名。


Cannot establish NFS service over /dev/tcp: transport setup problem

描述:

如果尚未更新名称空间中的服务信息,则通常会产生此消息。还可向 UDP 报告此消息。

解决方法:

要解决此问题,必须更新名称空间中的服务数据。对于 NIS+,各项应如下所示:


nfsd nfsd tcp 2049 NFS server daemon

nfsd nfsd udp 2049 NFS server daemon

对于 NIS 和 /etc/services,各项应如下所示:


nfsd    2049/tcp    nfs    # NFS server daemon

nfsd    2049/udp    nfs    # NFS server daemon

Cannot use index option without public option

解决方法:

在 share 命令中使用 index 选项时需同时指定 public 选项。要使 index 选项生效,必须定义公共文件句柄。


注 –

Solaris 2.5.1 发行版要求使用 share 命令来设置公共文件句柄。Solaris 2.6 发行版中已对此进行了更改,缺省情况下,公共文件句柄将被设置为 root (/)。此错误消息不再表明相关问题。



Could not start daemon: error

描述:

如果守护进程异常终止或者如果系统调用发生错误,则会显示此消息。error 字符串定义了该问题。

解决方法:

请联系 Sun 以获取帮助。此错误消息很少见,并且没有直接的解决方法。


Could not use public filehandle in request to server

描述:

如果指定了 public 选项但是 NFS 服务器不支持公共文件句柄,则会显示此消息。在这种情况下,挂载将失败。

解决方法:

要修正这种情况,可尝试在不使用公共文件句柄的情况下挂载请求,或重新配置 NFS 服务器以支持公共文件句柄。


daemon running already with pid pid

描述:

守护进程已运行。

解决方法:

如果要运行新的副本,请中止当前版本并启动新版本。


error locking lock file

描述:

如果不能正确锁定与守护进程关联的 lock file,则会显示此消息。

解决方法:

请联系 Sun 以获取帮助。此错误消息很少见,并且没有直接的解决方法。


error checking lock file: error

描述:

如果无法正常打开与守护进程关联的 lock file,则会显示此消息。

解决方法:

请联系 Sun 以获取帮助。此错误消息很少见,并且没有直接的解决方法。


NOTICE: NFS3: failing over from host1 to host2

描述:

如果发生故障转移,则控制台上会显示此消息。该消息仅作为建议。

解决方法:

不需要执行任何操作。


filename: File too large

描述:

NFS 版本 2 客户机正在尝试访问超过 2 GB 的文件。

解决方法:

请避免使用 NFS 版本 2。请使用版本 3 或版本 4 来挂载文件系统。另外,请参见NFS 文件系统的 mount 选项中的 nolargefiles 选项的说明。


mount: ... server not responding:RPC_PMAP_FAILURE - RPC_TIMED_OUT

描述:

共享尝试挂载的文件系统的服务器已关闭或无法访问、处于错误的运行级、其 rpcbind 停用或挂起。

解决方法:

等待服务器重新引导。如果服务器已挂起,请重新引导该服务器。


mount: ... server not responding: RPC_PROG_NOT_REGISTERED

描述:

已使用 rpcbind 注册了挂载请求,但是未注册 NFS 挂载守护进程 mountd

解决方法:

等待服务器重新引导。如果服务器已挂起,请重新引导该服务器。


mount: ... No such file or directory

描述:

远程目录或本地目录不存在。

解决方法:

请检查目录名的拼写。同时在两个目录中运行 ls


mount: ...: Permission denied

描述:

您的计算机名称可能不在客户机或网络组的列表中,通过该列表可对尝试挂载的文件系统进行访问。

解决方法:

请使用 showmount -e 验证该访问列表。


NFS file temporarily unavailable on the server, retrying ...

描述:

NFS 版本 4 服务器可以委托客户机管理文件。此消息表明服务器正在为与您的客户机请求冲突的其他客户机重新调用委托。

解决方法:

必须先重新调用,然后服务器才可以处理客户机请求。有关委托的更多信息,请参阅NFS 版本 4 的委托


NFS fsstat failed for server hostname:RPC: Authentication error

描述:

许多情况都会导致此错误。要调试的最困难情况之一即是由于用户属于太多组而出现此问题。目前,如果用户通过 NFS 挂载来访问文件,则它最多可以属于 16 个组。

解决方法:

同样存在另一种情况,即用户需要属于 16 个以上的组。 如果在 NFS 服务器和 NFS 客户机上运行的最低版本是 Solaris 2.5 发行版,则可以使用访问控制列表来提供所需的访问权限。


nfs mount: ignoring invalid option “-option

描述:

-option 标记无效。

解决方法:

要验证所需的语法,请参阅 mount_nfs(1M) 手册页。


注 –

如果运行的是 Solaris 2.6 发行版到当前发行版或已修补的早期版本中包括的任何版本的 mount 命令,则不会显示此错误消息。



nfs mount: NFS can't support “nolargefiles”

描述:

NFS 客户机已尝试使用 -nolargefiles 选项从 NFS 服务器挂载文件系统。

解决方法:

NFS 文件系统类型不支持此选项。


nfs mount: NFS V2 can't support “largefiles”

描述:

NFS 版本 2 协议不能处理大文件。

解决方法:

如果需要访问大文件,则必须使用版本 3 或版本 4。


NFS server hostname not responding still trying

描述:

如果程序在执行与文件相关的工作时挂起,则 NFS 服务器可能出现了故障。此消息表明 NFS 服务器 hostname 已关闭,或者服务器或网络出现了问题。

解决方法:

如果正在使用故障转移,则 hostname 是一个服务器列表。要开始疑难解答,请参见如何检查 NFS 客户机上的连接


NFS server recovering

描述:

在 NFS 版本 4 服务器重新引导过程中,一些操作不允许执行。此消息表明客户机正在等待服务器允许此操作继续进行。

解决方法:

不需要执行任何操作。请等待服务器允许执行该操作。


Permission denied

描述:

由于以下原因,ls -lgetfaclsetfacl 命令会显示此消息:

  • 如果 NFS 版本 4 服务器上的访问控制列表 (access control list, ACL) 项中存在的用户或组不能映射为 NFS 版本 4 客户机上的有效用户或组,则不允许该用户读取客户机上的 ACL。

  • 如果 NFS 版本 4 客户机上设置的 ACL 项中存在的用户或组不能映射为 NFS 版本 4 服务器上的有效用户或组,则不允许该用户写入或修改客户机上的 ACL。

  • 如果 NFS 版本 4 客户机和服务器的 NFSMAPID_DOMAIN 值不匹配,则 ID 映射将失败。

有关更多信息,请参见NFS 版本 4 中的 ACL 和 nfsmapid

解决方法:

请执行以下操作:

  • 确保 ACL 项中的所有用户和组 ID 都存在于客户机和服务器上。

  • 确保在 /etc/default/nfs 文件中正确设置了 NFSMAPID_DOMAIN 的值。有关更多信息,请参见/etc/default/nfs 文件的关键字

要确定是否无法在服务器或客户机上映射任何用户或组,请使用检查未映射的用户 ID 或组 ID中提供的脚本。


port number in nfs URL not the same as port number in port option

描述:

NFS URL 中包括的端口号必须与 -port 选项包括的端口号匹配才能进行挂载。如果端口号不匹配,则挂载将失败。

解决方法:

更改命令以使端口号相同,或者不要指定不正确的端口号。 通常,无需同时使用 NFS URL 和 -port 选项来指定端口号。


replicas must have the same version

描述:

要使 NFS 故障转移正常运行,作为副本的 NFS 服务器必须支持同一版本的 NFS 协议。

解决方法:

不允许运行多个版本。


replicated mounts must be read-only

描述:

NFS 故障转移在以读写方式挂载的文件系统上不能正常工作。以读写方式挂载文件系统会增加文件更改的可能性。

解决方法:

NFS 故障转移取决于文件系统是否相同。


replicated mounts must not be soft

描述:

复制的挂载要求等到超时后再进行故障转移。

解决方法:

soft 选项要求超时开始时挂载即失败,因此不能对复制的挂载使用 -soft 选项。


share_nfs: Cannot share more than one filesystem with 'public' option

解决方法:

确保 /etc/dfs/dfstab 文件中只对一个文件系统使用了 -public 选项来共享。每台服务器上只能建立一个公共文件句柄,因此使用此选项在每台服务器上只能共享一个文件系统。


WARNING: No network locking on hostname:path: contact admin to install server change

描述:

NFS 客户机未能成功尝试与 NFS 服务器上的网络锁定管理器建立连接。生成此警告旨在提醒您锁定不起作用,而不是表明挂载失败。

解决方法:

请使用提供完全锁定管理器支持的新版本的 OS 来升级服务器。

第 6 章 访问网络文件系统(参考)

本章介绍 NFS 命令,以及 NFS 环境的各个部分和这些部分协同工作的方式。


注 –

如果系统启用了区域并且您要在非全局区域中使用此功能,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》以了解更多信息。


NFS 文件

任何计算机上的 NFS 活动都需要若干文件来支持。其中许多文件是 ASCII 文件,但也有一些文件是数据文件。表 6–1 中列出了这些文件及其功能。

表 6–1 NFS 文件

文件名 

功能 

/etc/default/autofs

列出 autofs 环境的配置信息。 

/etc/default/fs

列出本地文件系统的缺省文件系统类型。 

/etc/default/nfs

列出 lockdnfsd 的配置信息。有关更多信息,请参阅/etc/default/nfs 文件的关键字nfs(4) 手册页。

/etc/default/nfslogd

列出 NFS 服务器日志记录守护进程 nfslogd 的配置信息。

/etc/dfs/dfstab

列出要共享的本地资源。 

/etc/dfs/fstypes

列出远程文件系统的缺省文件系统类型。 

/etc/dfs/sharetab

列出共享的本地资源和远程资源。请参见 sharetab(4) 手册页。请勿编辑此文件。

/etc/mnttab

列出当前挂载的文件系统,包括自动挂载的目录。请参见 mnttab(4) 手册页。请勿编辑此文件。

/etc/netconfig

列出传输协议。请勿编辑此文件。

/etc/nfs/nfslog.conf

列出 NFS 服务器日志记录的常规配置信息。 

/etc/nfs/nfslogtab

列出与 nfslogd 进行日志后期处理相关的信息。请勿编辑此文件。

/etc/nfssec.conf

列出 NFS 安全服务。 

/etc/rmtab

列出由 NFS 客户机远程挂载的文件系统。请参见 rmtab(4) 手册页。请勿编辑此文件。

/etc/vfstab

定义要本地挂载的文件系统。请参见 vfstab(4) 手册页。

/etc/dfs/fstypes 中的第一项通常用作远程文件系统的缺省文件系统类型。此项将 NFS 文件系统类型定义为缺省类型。

/etc/default/fs 中只有一项:本地磁盘的缺省文件系统类型。通过检查 /kernel/fs 中的文件,可以确定客户机或服务器支持的文件系统类型。

/etc/default/autofs 文件

从 Solaris 10 发行版开始,可以使用 /etc/default/autofs 文件来配置 autofs 环境。具体来说,此文件提供了配置 autofs 命令和 autofs 守护进程的其他方法。在命令行上制定的规范也可以通过此配置文件实现。但是,与在命令行上制定的规范不同的是,此文件将保留您的规范,即使在向您的操作系统升级时也是如此。另外,不再需要更新关键的启动文件即可确保保留 autofs 环境的现有行为。可通过为以下关键字提供值来制定规范:

AUTOMOUNT_TIMEOUT

设置在取消挂载文件系统之前文件系统保持空闲的持续时间。此关键字与 automount 命令的 -t 参数等效。缺省值为 600。

AUTOMOUNT_VERBOSE

提供有关 autofs 挂载、取消挂载和其他不重要事件的通知。此关键字与 automount-v 参数等效。缺省值为 FALSE。

AUTOMOUNTD_VERBOSE

将状态消息记录到控制台。此关键字与 automountd 守护进程的 -v 参数等效。缺省值为 FALSE。

AUTOMOUNTD_NOBROWSE

针对所有 autofs 挂载点打开或关闭浏览功能。此关键字与 automountd-n 参数等效。缺省值为 FALSE。

AUTOMOUNTD_TRACE

扩展每个远程过程调用 (remote procedure call, RPC) 并在标准输出中显示扩展的 RPC。此关键字与 automountd-T 参数等效。缺省值为 0。取值范围为 0 到 5。

AUTOMOUNTD_ENV

允许您将不同的值指定给不同的环境。此关键字与 automountd-D 参数等效。可以多次使用 AUTOMOUNTD_ENV 关键字。但是,必须对每个环境赋值使用单独的行。

有关更多信息,请参阅 automount(1M)automountd(1M) 手册页。有关过程信息,请参阅如何使用 /etc/default/autofs 文件

/etc/default/nfs 文件的关键字

在 NFS 版本 4 中,可以在 /etc/default/nfs 文件中设置以下关键字。这些关键字控制客户机和服务器使用的 NFS 协议。

NFS_SERVER_VERSMIN

设置要注册且由服务器提供的 NFS 协议的最低版本。从 Solaris 10 发行版开始,缺省值为 2。其他有效值包括 3 或 4。请参阅设置 NFS 服务

NFS_SERVER_VERSMAX

设置要注册且由服务器提供的 NFS 协议的最高版本。从 Solaris 10 发行版开始,缺省值为 4。其他有效值包括 2 或 3。请参阅设置 NFS 服务

NFS_CLIENT_VERSMIN

设置由 NFS 客户机使用的 NFS 协议的最低版本。从 Solaris 10 发行版开始,缺省值为 2。其他有效值包括 3 或 4。请参阅设置 NFS 服务

NFS_CLIENT_VERSMAX

设置由 NFS 客户机使用的 NFS 协议的最高版本。从 Solaris 10 发行版开始,缺省值为 4。其他有效值包括 2 或 3。请参阅设置 NFS 服务

NFS_SERVER_DELEGATION

控制是否对服务器启用 NFS 版本 4 委托功能。如果启用此功能,则服务器将尝试对 NFS 版本 4 客户机提供委托。缺省情况下,会启用服务器委托。要禁用服务器委托,请参见如何在服务器上选择不同版本的 NFS。有关更多信息,请参阅NFS 版本 4 的委托

NFSMAPID_DOMAIN

为客户机和服务器设置公共域。将覆盖使用本地 DNS 域名的缺省行为。有关任务信息,请参阅设置 NFS 服务。另请参见nfsmapid 守护进程

/etc/default/nfslogd 文件

此文件定义了使用 NFS 服务器日志记录时所使用的某些参数。可以定义以下参数。

CYCLE_FREQUENCY

确定在循环使用日志文件之前必须经过的小时数。 缺省值为 24 小时。此选项用于防止日志文件变得太大。

IDLE_TIME

设置 nfslogd 在检查缓冲区文件中是否存在更多信息之前应处于休眠状态的秒数。此参数还确定检查配置文件的频率。此参数与 MIN_PROCESSING_SIZE 一同确定处理缓冲区文件的频率。缺省值为 300 秒。增加该秒数即可通过减少检查次数来提高性能。

MAPPING_UPDATE_INTERVAL

指定对 file-handle-to-path 映射表中的记录进行更新的间隔秒数。缺省值为 86400 秒,即一天。此参数有助于保持 file-handle-to-path 映射表始终处于最新状态,而不必不断更新这些表。

MAX_LOGS_PRESERVE

确定要保存的日志文件数目。缺省值为 10。

MIN_PROCESSING_SIZE

设置在处理和写入日志文件之前缓冲区文件必须达到的最小字节数目。此参数与 IDLE_TIME 一同确定处理缓冲区文件的频率。缺省值为 524288 字节。增加该字节数即可通过减少处理缓冲区文件的次数来提高性能。

PRUNE_TIMEOUT

选择 file-handle-to-path 映射记录超时之前必须经过的、并可以缩减的小时数。缺省值为 168 小时,即 7 天。

UMASK

nfslogd 创建的日志文件指定文件模式创建掩码。缺省值为 0137。

/etc/nfs/nfslog.conf 文件

此文件定义了 nfslogd 使用的日志记录的路径、文件名和类型。每个定义都与 tag 相关联。启动 NFS 服务器日志记录时,需要您标识每个文件系统的 tag。全局标记定义了缺省值。可以根据需要将各个标记与以下参数一起使用。

defaultdir=path

指定日志记录文件的缺省目录路径。除非您指定了不同的目录,否则缺省目录为 /var/nfs

log=path/filename

设置日志文件的路径和文件名。缺省值为 /var/nfs/nfslog

fhtable=path/filename

选择文件句柄到路径数据库文件的路径和文件名。缺省值为 /var/nfs/fhtable

buffer=path/filename

确定缓冲区文件的路径和文件名。缺省值为 /var/nfs/nfslog_workbuffer

logformat=basic|extended

选择创建用户可读日志文件时使用的格式。基本 (basic) 格式产生的日志文件与某些 ftpd 守护进程类似。扩展 (extended) 格式提供了更详细的视图。

如果未指定路径,则将使用由 defaultdir 定义的路径。另外,还可以使用绝对路径覆盖 defaultdir

为了更容易地识别文件,请将文件置于单独的目录中。下面的示例列出了所需的更改。


% cat /etc/nfs/nfslog.conf

#ident  "@(#)nfslog.conf        1.5     99/02/21 SMI"

#

  .

  .

# NFS server log configuration file.

#



global  defaultdir=/var/nfs \

        log=nfslog fhtable=fhtable buffer=nfslog_workbuffer



publicftp log=logs/nfslog fhtable=fh/fhtables buffer=buffers/workbuffer

在本示例中,以 log=publicftp 形式共享的任何文件系统都使用以下值:

有关过程信息,请参阅如何启用 NFS 服务器日志记录

NFS 守护进程

为了支持 NFS 活动,在系统进入运行级 3 或多用户模式时将启动多个守护进程。mountdnfsd 守护进程在作为服务器的系统上运行。服务器守护进程的自动启动取决于 /etc/dfs/sharetab 中是否存在带有 NFS 文件系统类型标记的项。为了支持 NFS 文件锁定,应该在 NFS 客户机和服务器上运行 lockdstatd 守护进程。但是,与以前版本的 NFS 不同的是,在 NFS 版本 4 中,不使用守护进程 lockdstatdmountdnfslogd

本节介绍以下守护进程。

automountd 守护进程

该守护进程处理来自 autofs 服务的挂载和取消挂载请求。此命令的语法如下:

automountd [ -Tnv ] [ -D name=value ]

该命令采用以下几种方式运行:

自动挂载映射的缺省值为 /etc/auto_master。可使用 -T 选项进行故障排除。

lockd 守护进程

此守护进程支持对 NFS 文件的记录锁定操作。lockd 守护进程针对网络锁定管理器 (Network Lock Manager, NLM) 协议管理客户机与服务器之间的 RPC 连接。该守护进程通常不使用任何选项即可启动。可将三个选项与此命令一起使用。请参见 lockd(1M) 手册页。可以在命令行中或通过编辑 /etc/default/nfs 中的相应字符串来使用这些选项。以下是可在 /etc/default/nfs 文件中设置的关键字的说明。


注 –

从 Solaris 10 发行版开始,LOCKD_GRACE_PERIOD 关键字和 -g 选项已过时。过时的关键字将由新的关键字 GRACE_PERIOD 取代。 如果同时设置了这两个关键字,则 GRACE_PERIOD 的值将覆盖 LOCKD_GRACE_PERIOD 的值。 请参见以下有关 GRACE_PERIOD 的说明。


LOCKD_GRACE_PERIOD 类似,/etc/default/nfs 中的 GRACE_PERIOD=graceperiod 设置服务器重新引导后客户机回收 NFS 版本 3 锁定(由 NLM 提供)和版本 4 锁定所需的秒数。 因此,GRACE_PERIOD 的值可控制 NFS 版本 3 和 NFS 版本 4 锁定恢复的宽延期长度。

/etc/default/nfs 中的 LOCKD_RETRANSMIT_TIMEOUT=timeout 参数选择将锁定请求重新传输到远程服务器之前等待的秒数。此选项将影响 NFS 客户端服务。timeout 的缺省值为 15 秒。减小 timeout 值可以改善“嘈杂”网络上的 NFS 客户机的响应时间。但是,这种更改可能会增大锁定请求的频率,进而会导致增加服务器负载。使用 -t timeout 选项来启动该守护进程,即可在命令行中使用相同的参数。

/etc/default/nfs 中的 LOCKD_SERVERS=nthreads 参数指定服务器每个连接可处理的并发线程的最大数目。应根据 NFS 服务器上的预期负载来确定 nthreads 的值。缺省值为 20。使用 TCP 的每台 NFS 客户机都使用与 NFS 服务器的单一连接。因此,每台客户机最多可使用服务器上的 20 个并发线程。

使用 UDP 的所有 NFS 客户机都共享与 NFS 服务器之间的单一连接。在上述情况下,可能必须增加可用于 UDP 连接的线程数。对于每个 UDP 客户机而言,至少要有两个线程。但是,此数目具体取决于客户机上的工作负荷,因此每台客户机两个线程可能是不够的。使用更多线程的缺点是:使用线程越多,占用的 NFS 服务器内存就越多。但是,如果从不使用线程,则增加 nthreads 没有任何效果。通过使用 nthreads 选项来启动该守护进程,即可在命令行中使用相同的参数。

mountd 守护进程

该守护进程处理来自远程系统的文件系统挂载请求并提供访问控制。mountd 守护进程将检查 /etc/dfs/sharetab,以确定哪些文件系统可用于远程挂载,以及哪些系统被允许执行远程挂载。可以将 -v 选项和 -r 选项与此命令结合使用。请参见 mountd(1M) 手册页。

-v 选项以详细模式运行该命令。NFS 服务器每次确定应授予客户机的访问权限时,都会在控制台上列显一条消息。在尝试确定客户机为何不能访问文件系统时,生成的信息可能非常有用。

-r 选项拒绝来自客户机的所有未来的挂载请求。此选项不会影响已挂载文件系统的客户机。


注 –

NFS 版本 4 不使用该守护进程。


nfs4cbd 守护进程

nfs4cbd 专供 NFS 版本 4 客户机使用,可管理 NFS 版本 4 回叫程序的通信端点。该守护进程没有用户可访问的接口。有关更多信息,请参见 nfs4cbd(1M) 手册页。

nfsd 守护进程

该守护进程可处理其他客户机文件系统请求。可以将多个选项与此命令一起使用。有关完整列表,请参见 nfsd(1M) 手册页。可以在命令行中或通过编辑 /etc/default/nfs 中的相应字符串来使用这些选项。

/etc/default/nfs 中的 NFSD_LISTEN_BACKLOG=length 参数为 NFS 和 TCP 设置基于面向连接的传输的连接队列的长度。缺省值为 32 项。使用 -l 选项来启动 nfsd,即可在命令行中执行相同的选择。

/etc/default/nfs 中的 NFSD_MAX_CONNECTIONS=#_conn 参数选择每个面向连接的传输选择最大连接数。#_conn 的缺省值没有限制。使用 -c #_conn 选项来启动该守护进程,即可在命令行中使用相同的参数。

/etc/default/nfs 中的 NFSD_SERVER=nservers 参数选择服务器可以处理的并发请求的最大数目。nservers 的缺省值为 16。使用 nservers 选项来启动 nfsd,即可在命令行中执行相同的选择。

与旧版本的该守护进程不同的是,nfsd 不会产生用于处理并发请求的多个副本。使用 ps 检查进程表时,将仅显示正在运行的守护进程的一个副本。

nfslogd 守护进程

该守护进程提供有关操作的日志记录。服务器上的哪些 NFS 操作将写入记录,取决于 /etc/default/nfslogd 中定义的配置选项。启用 NFS 服务器日志记录时,选定文件系统上的所有 RPC 操作的记录将由内核写入缓冲区文件。然后,nfslogd 将对这些请求进行后期处理。名称服务转换器用于帮助将 UID 映射为登录名,并将 IP 地址映射为主机名。如果无法通过确定的名称服务找到任何匹配项,则将记录该数字。

还可以通过 nfslogd 来处理文件句柄到路径名的映射。该守护进程将跟踪文件句柄到路径映射表中的这些映射。对于在 /etc/nfs/nfslogd 中标识的每个标记,都存在一个映射表。经过后期处理后,这些记录将被写入 ASCII 日志文件中。


注 –

NFS 版本 4 不使用该守护进程。


nfsmapid 守护进程

版本 4 的 NFS 协议 (RFC3530) 更改了用户标识符或组标识符(UID 或 GID)在客户机与服务器之间的交换方式。该协议要求分别采用 user@nfsv4_domaingroup@nfsv4_domain 格式将文件的属主属性和组属性作为字符串在 NFS 版本 4 客户机与 NFS 版本 4 服务器之间进行交换。

例如,用户 known_user 在 NFS 版本 4 客户机上具有 UID 123456,该客户机的完全限定主机名为 system.example.com。客户机为了向 NFS 版本 4 服务器发出请求,必须将 UID 123456 映射为 known_user@example.com,然后将此属性发送到 NFS 版本 4 服务器。NFS 版本 4 服务器希望接收 user_or_group@nfsv4_domain 格式的用户和组文件属性。服务器从客户机收到 known_user@example.com 后,就会将该字符串映射为基础文件系统可以识别的本地 UID 123456。此功能假设网络中的每个 UID 和 GID 都是唯一的,并且客户机中的 NFS 版本 4 域与服务器上的 NFS 版本 4 域匹配。


注 –

如果服务器不能识别给定的用户名或组名,即使 NFS 版本 4 域匹配,服务器也不能将该用户名或组名映射为其唯一 ID(整数值)。在这类情况下,服务器会将传入的用户名或组名映射为 nobody 用户。为了防止这类情况出现,管理员应避免创建仅在 NFS 版本 4 客户机上存在的特殊帐户。


NFS 版本 4 客户机和服务器都能执行整数到字符串和字符串到整数的转换。例如,在对 GETATTR 操作进行响应时,NFS 版本 4 服务器会将从基础文件系统获取的 UID 和 GID 映射到其各自的字符串说明中,并将此信息发送到客户机。或者,客户机还必须将 UID 和 GID 映射到字符串说明中。例如,在对 chown 命令进行响应时,客户机在将 SETATTR 操作发送到服务器之前会先将新的 UID 或 GID 映射到字符串说明中。

但是请注意,客户机和服务器将以不同的方式对不能识别的字符串做出响应:

配置文件和 nfsmapid

下面介绍了 nfsmapid 守护进程使用 /etc/nsswitch.conf/etc/resolv.conf 文件的方式:

优先级规则

为了使 nfsmapid 能正常工作,NFS 版本 4 客户机和服务器必须具有相同的域。为了确保与 NFS 版本 4 域匹配,nfsmapid 将遵循以下严格的优先级规则:

  1. 守护进程首先从 /etc/default/nfs 文件中查找已为 NFSMAPID_DOMAIN 关键字指定的值。如果找到了值,则指定的值将优先于其他任何设置。指定的值被附加到外发属性字符串上,并与传入属性字符串进行比较。有关 /etc/default/nfs 文件中的关键字的更多信息,请参见/etc/default/nfs 文件的关键字。有关过程信息,请参见设置 NFS 服务


    注 –

    使用 NFSMAPID_DOMAIN 设置不具备可伸缩性,因此建议不要用于大型部署。


  2. 如果未对 NFSMAPID_DOMAIN 指定值,则守护进程会从 DNS TXT RR 中查找域名。nfsmapid 将依赖于 /etc/resolv.conf 文件中由 resolver 中的一组例程所使用的指令。resolver 将在已配置的 DNS 服务器中搜索 _nfsv4idmapdomain TXT RR。请注意,使用 DNS TXT 记录具备更强的伸缩性。出于此原因,继续使用 TXT 记录比在 /etc/default/nfs 文件中设置关键字更好。

  3. 如果没有提供域名的 DNS TXT 记录,则在缺省情况下 nfsmapid 守护进程将使用已配置的 DNS 域。

  4. 如果 /etc/resolv.conf 文件不存在,则 nfsmapid 将按照 domainname 命令的行为获取 NFS 版本 4 域名。具体来说,如果 /etc/defaultdomain 文件存在,则 nfsmapid 将使用与 NFS 版本 4 域对应的文件的内容。如果 /etc/defaultdomain 文件不存在,则 nfsmapid 将使用由网络的已配置命名服务提供的域名。有关更多信息,请参见 domainname(1M) 手册页。

nfsmapid 和 DNS TXT 记录

DNS 普遍存在的这一特性为 NFS 版本 4 域名提供了有效的存储和分配机制。此外,由于 DNS 固有的可伸缩性,因此使用 DNS TXT 资源记录是为大型部署配置 NFS 版本 4 域名的首选方法。您应该在企业级 DNS 服务器上配置 _nfsv4idmapdomain TXT 记录。这类配置可确保任何 NFS 版本 4 客户机或服务器都能通过遍历 DNS 树找到其 NFS 版本 4 域。

以下是用于使 DNS 服务器能够提供 NFS 版本 4 域名的首选项的示例:


_nfsv4idmapdomain		IN		TXT			"foo.bar"

在本示例中,要配置的域名是用双引号引起来的值。请注意未指定 ttl 字段,且未将域附加到 _nfsv4idmapdomain(是 owner 字段中的值)中。此配置使 TXT 记录能够使用区域的颁发机构开始 (Start-Of-Authority, SOA) 记录中的 ${ORIGIN} 项。例如,在域名称空间的不同层次上,该记录的值可能为:


_nfsv4idmapdomain.subnet.yourcorp.com.    IN    TXT    "foo.bar"

_nfsv4idmapdomain.yourcorp.com.           IN    TXT    "foo.bar"

在使用 resolv.conf 文件搜索 DNS 树分层结构方面,此配置为 DNS 客户机提供了更大的灵活性。请参见 resolv.conf(4) 手册页。此功能提高了找到 TXT 记录的概率。为了获得更大的灵活性,较低层的 DNS 子域可以定义其各自的 DNS TXT 资源记录 (resource record, RR)。此功能使较低层的 DNS 子域可以覆盖由顶层 DNS 域定义的 TXT 记录。


注 –

TXT 记录指定的域可以是任意字符串,该字符串不一定与使用 NFS 版本 4 的客户机和服务器的 DNS 域匹配。您可以选择不与其他 DNS 域共享 NFS 版本 4 数据。


在 Solaris 10 发行版中配置 NFS 版本 4 缺省域

从 NFS 版本 4 的 Solaris 10 发行版开始,如果您的网络包括多个 DNS 域,但只有单个 UID 和 GID 名称空间,则所有的客户机都必须对 NFSMAPID_DOMAIN 使用一个值。 对于使用 DNS 的站点,nfsmapid 将通过从为 _nfsv4idmapdomain 指定的值中获取域名来解决此问题。有关更多信息,请参见nfsmapid 和 DNS TXT 记录。如果未将网络配置为使用 DNS,则在首次引导系统期间,Solaris OS 将使用 sysidconfig 实用程序为 NFS 版本 4 域名提供以下提示:


This system is configured with NFS version 4, which uses a 

domain name that is automatically derived from the system's 

name services. The derived domain name is sufficient for most 

configurations. In a few cases, mounts that cross different 

domains might cause files to be owned by nobody due to the 

lack of a common domain name.



Do you need to override the system's default NFS verion 4 domain 

name (yes/no)? [no]

缺省响应为 [no]。如果选择 [no],则将看到以下信息:


For more information about how the NFS version 4 default domain name is 

derived and its impact, refer to the man pages for nfsmapid(1M) and 

nfs(4), and the System Administration Guide: Network Services.

如果选择 [yes],则将看到以下提示:


Enter the domain to be used as the NFS version 4 domain name.

NFS version 4 domain name []:

注 –

如果 NFSMAPID_DOMAIN 的值存在于 /etc/default/nfs 中,则您提供的 [domain_name] 将覆盖该值。


有关 nfsmapid 的其他信息

有关 nfsmapid 的更多信息,请参见以下内容:

statd 守护进程

该守护进程使用 lockd 为锁定管理器提供崩溃和恢复功能。statd 守护进程可跟踪在 NFS 服务器上保存锁定的客户机。如果服务器崩溃,则在重新引导时,服务器上的 statd 将与客户机上的 statd 进行联系。随后,客户机 statd 便会尝试回收服务器上的所有锁定。客户机 statd 还会通知服务器 statd 客户机发生崩溃的时间,以便可以清除服务器上的客户机锁定。使用此守护进程时没有可选择的选项。有关更多信息,请参见 statd(1M) 手册页。

在 Solaris 7 发行版中,statd 跟踪客户机的方式已改进。在所有早期的 Solaris 发行版中,statd 使用客户机的未限定主机名在 /var/statmon/sm 中为每台客户机创建文件。如果两台客户机在不同的域中,且共享同一主机名,或者如果客户机与 NFS 服务器不在同一个域中,则此文件命名将导致问题。由于未限定的主机名仅列出主机名,而不含任何域或 IP 地址信息,因此旧版本的 statd 无法区分这些类型的客户机。为了解决此问题,Solaris 7 statd 使用客户机的 IP 地址在 /var/statmon/sm 中创建了一个指向未限定主机名的符号链接。新的链接如下所示:


# ls -l /var/statmon/sm

lrwxrwxrwx   1 daemon          11 Apr 29 16:32 ipv4.192.168.255.255 -> myhost

lrwxrwxrwx   1 daemon          11 Apr 29 16:32 ipv6.fec0::56:a00:20ff:feb9:2734 -> v6host

--w-------   1 daemon          11 Apr 29 16:32 myhost

--w-------   1 daemon          11 Apr 29 16:32 v6host

在本示例中,客户机主机名为 myhost,客户机的 IP 地址为 192.168.255.255。如果另一台名为 myhost 的主机正在挂载文件系统,则两个符号链接都将指向该主机名。


注 –

NFS 版本 4 不使用该守护进程。


NFS 命令

必须以超级用户身份运行这些命令才能使其完全生效,但是所有的用户都可以发出信息请求:

automount 命令

此命令将安装 autofs 挂载点并将 automaster 文件中的信息与每个挂载点相关联。命令的语法如下:

automount [ -t duration ] [ -v ]

-t duration 用于设置文件系统持续处于挂载状态的时间(以秒为单位),而 -v 用于选择详细模式。在详细模式下运行此命令可以更容易地排除故障。

如果未明确地进行设置,则持续时间值将被设置为 5 分钟。在多数情况下,该值是合适的。但是,在具有许多自动挂载的文件系统的系统上,可能需要增大持续时间值。特别是,如果服务器具有许多活动用户,则每 5 分钟检查一次自动挂载文件系统可能是不够的。每 1800 秒(即 30 分钟)检查一次 autofs 文件系统可能更理想。如果没有每 5 分钟进行一次取消挂载文件系统,/etc/mnttab 就会变得很大。要减少 df 检查 /etc/mnttab 中的每一项时的输出,可以使用 -F 选项(请参见 df(1M) 手册页)或使用 egrep 过滤 df 的输出。

您应该考虑到,调整持续时间还会更改反映对自动挂载程序映射所做更改的速度。取消挂载文件系统之前,无法查看更改。有关如何修改自动挂载程序映射的说明,请参阅修改映射

clear_locks 命令

通过此命令,可以删除 NFS 客户机的所有文件、记录和共享锁定。必须是 root 才能运行此命令。从 NFS 服务器,可以清除对特定客户机的锁定。从 NFS 客户机,可以清除该客户机对特定服务器的锁定。以下示例将清除对当前系统上名为 tulip 的 NFS 客户机的锁定。


# clear_locks tulip

使用 -s 选项可以指定要从中清除锁定的 NFS 主机。必须从创建锁定的 NFS 客户机运行此选项。在这种情况下,将从名为 bee 的 NFS 服务器中删除客户机锁定。


# clear_locks -s bee

注意 – 注意 –

只有在客户机崩溃且无法清除其锁定时,才应运行此命令。为避免数据损坏问题,请不要清除对活动客户机的锁定。


mount 命令

使用此命令,可以将已命名的文件系统(本地或远程)连接到指定的挂载点。有关更多信息,请参见 mount(1M) 手册页。在不使用参数的情况下,mount 将显示当前在计算机上挂载的文件系统列表。

标准 Solaris 安装中包括许多类型的文件系统。每个文件系统类型都有特定的手册页,其中列出了适用于该文件系统类型的 mount 选项。NFS 文件系统的手册页为 mount_nfs(1M)。对于 UFS 文件系统,请参见 mount_ufs(1M)

Solaris 7 发行版可以使用 NFS URL(而不是标准的 server:/pathname 语法)从 NFS 服务器选择要挂载的路径名。有关详细信息,请参见如何使用 NFS URL 挂载 NFS 文件系统


注意 – 注意 –

从 2.6 到当前发行版的任何 Solaris 发行版中包括的 mount 命令版本都不会发出有关无效选项的警告。该命令将默认忽略无法解释的所有选项。请确保验证已使用的所有选项,以便防止出现意外行为。


NFS 文件系统的 mount 选项

下面介绍挂载 NFS 文件系统时可跟在 -o 标志后面的某些选项。有关完整的选项列表,请参阅 mount_nfs(1M) 手册页。

bg|fg

可以使用这些选项来选择挂载失败时的重试行为。bg 选项将导致挂载试图在后台运行。fg 选项将导致挂载试图在前台运行。缺省值为 fg,对于必须可用的文件系统而言,这是最佳选择。此选项可防止在挂载完成之前进一步进行处理。bg 是适用于非关键文件系统的适当选择,因为客户机在等待挂载请求完成的同时可以执行其他处理。

forcedirectio

此选项可提高大型连续数据传输的性能。数据将直接复制到用户缓冲区。不会在客户机的内核中执行任何缓存操作。缺省情况下,此选项处于关闭状态。

以前,所有写请求都被 NFS 客户机和 NFS 服务器串行化。NFS 客户机已被修改,允许应用程序向单个文件发出并发写入以及并发读取和写入。您可以使用 forcedirectio 挂载选项在客户机上启用此功能。使用此选项时,将为已挂载文件系统中的所有文件启用此功能。还可以通过使用 directio() 接口对客户机的单个文件启用此功能。除非启用了此功能,否则对文件的写入一定是串行化的。而且,如果正在进行并发写入或并发读取和写入,该文件将不再支持 POSIX 语义。

有关如何使用此选项的示例,请参阅使用 mount 命令

largefiles

使用此选项,可以在运行 Solaris 2.6 发行版的服务器上访问大于 2 GB 的文件。由于只能在服务器上控制某个大文件是否可以访问,因此在 NFS 版本 3 挂载中将默认忽略此选项。从 2.6 发行版开始,缺省情况下,所有的 UFS 文件系统都使用 largefiles 进行挂载。对于使用 NFS 版本 2 协议的挂载,largefiles 选项将导致挂载失败,且会出现错误。

nolargefiles

用于 UFS 挂载的此选项可以保证文件系统中不会存在大文件。请参见 mount_ufs(1M) 手册页。由于只能在 NFS 服务器上控制大文件的存在,因此使用 NFS 挂载时不存在用于 nolargefiles 的选项。系统将拒绝尝试使用此选项挂载 NFS 文件系统,且会出现错误。

nosuid|suid

从 Solaris 10 发行版开始,nosuid 选项与指定 nosetuid 选项和 nodevices 选项等效。指定 nodevices 选项时,禁止在已挂载的文件系统上打开特定于设备的文件。指定 nosetuid 选项时,系统将忽略位于文件系统中的二进制文件的 setuid 位和 setgid 位。进程将使用执行该二进制文件的用户的权限运行。

suid 选项与指定 setuid 选项和 devices 选项等效。指定 devices 选项时,允许在已挂载的文件系统上打开特定于设备的文件。指定 setuid 选项时,内核将接受位于文件系统中的二进制文件的 setuid 位和 setgid 位。

如果这两个选项都没有指定,则缺省选项为 suid,这将提供指定 setuid 选项和 devices 选项的缺省行为。

下表介绍了将 nosuidsuiddevicesnodevices,以及 setuidnosetuid 组合的效果。请注意,在选项的每个组合中,行为由限制性最强的选项确定。

组合选项的行为 

选项 

选项 

选项 

与使用 nodevicesnosetuid 等效

nosuid

nosetuid

nodevices

与使用 nodevicesnosetuid 等效

nosuid

nosetuid

devices

与使用 nodevicesnosetuid 等效

nosuid

setuid

nodevices

与使用 nodevicesnosetuid 等效

nosuid

setuid

devices

与使用 nodevicesnosetuid 等效

suid

nosetuid

nodevices

与使用 devicesnosetuid 等效

suid

nosetuid

devices

与使用 nodevicessetuid 等效

suid

setuid

nodevices

与使用 devicessetuid 等效

suid

setuid

devices

nosuid 选项为访问可能不可信的服务器的 NFS 客户机提供了附加安全性。使用此选项挂载远程文件系统会减少通过导入不可信设备或导入不可信 setuid 二进制文件来升级权限的机会。所有这些选项在所有的 Solaris 文件系统中都是可用的。

public

此选项强制在与 NFS 服务器联系时使用公共文件句柄。如果服务器支持公共文件句柄,则由于不使用 MOUNT 协议,因此挂载操作会比较快。此外,由于不使用 MOUNT 协议,公共选项允许通过防火墙进行挂载。

rw|ro

-rw-ro 选项指示文件系统以读写方式挂载还是以只读方式挂载。缺省值为读写,该选项适用于远程起始目录、邮件假脱机目录或需要由用户更改的其他文件系统。只读选项适用于不应该由用户更改的目录。例如,用户不应写入手册页的共享副本。

sec=mode

可以使用此选项指定在挂载事务期间使用的验证机制。mode 的值可以是以下某个值之一。

  • 对 Kerberos 版本 5 验证服务使用 krb5

  • 对具备完整性的 Kerberos 版本 5 使用 krb5i

  • 对具备保密性的 Kerberos 版本 5 使用 krb5p

  • 对于不验证的情况,使用 none

  • 对于 Diffie-Hellman (DH) 验证,使用 dh

  • 对于标准的 UNIX 验证,使用 sys

上述模式还在 /etc/nfssec.conf 中进行了定义。

soft|hard

如果服务器没有做出响应,则使用 soft 选项挂载的 NFS 文件系统将返回错误。hard 选项将导致挂载继续重试,直到服务器做出响应为止。缺省值为 hard,大多数文件系统都应该使用此选项。应用程序不会经常检查从使用 soft 选项挂载的文件系统返回的值,这可能会使应用程序出现故障或可能导致文件损坏。如果应用程序检查返回值,则路由问题和其他情况可能仍然会干扰应用程序或导致文件损坏(如果选择 soft 选项)。在大多数情况下,不应该使用 soft 选项。如果文件系统是使用 hard 选项挂载的且不可用,则使用该文件系统的应用程序将挂起,直到该文件系统可用为止。

使用 mount 命令

请参阅以下示例。

umount 命令

使用此命令,可以删除当前已挂载的远程文件系统。umount 命令支持 -V 选项,以便进行测试。您还可以使用 -a 选项一次取消挂载几个文件系统。如果 mount_points 中包括 -a 选项,则会取消挂载这些文件系统。如果不包括挂载点,则系统会尝试取消挂载 /etc/mnttab 中列出的所有文件系统,但“必需的”文件系统(如 //usr/var/proc/dev/fd/tmp)除外。由于文件系统已挂载并且在 /etc/mnttab 中应有一个对应项,因此无需包括一个表示此文件系统类型的标志。

-f 选项可强制取消挂载繁忙的文件系统。可以使用此选项来取消挂起因尝试挂载无法挂载的文件系统而处于挂起状态的客户机。


注意 – 注意 –

如果强制取消挂载文件系统,则在写入文件的情况下会导致数据丢失。


请参见以下示例。


示例 6–1 取消挂载文件系统

本示例取消挂载在 /usr/man 上挂载的文件系统:


# umount /usr/man


示例 6–2 使用带有选项的 umount

本示例显示了 umount -a -V 的运行结果:


# umount -a -V

umount /home/kathys

umount /opt

umount /home

umount /net

请注意,此命令实际上不会取消挂载文件系统。


mountall 命令

使用此命令可挂载文件系统表中列出的所有文件系统或特定的一组文件系统。此命令提供了执行以下操作的方法:

由于所有标记为 NFS 文件系统类型的文件系统均为远程文件系统,因此在上述选项中,有一些是多余的。有关更多信息,请参见 mountall(1M) 手册页。

请注意,以下两个用户输入示例是等效的:


# mountall -F nfs

# mountall -F nfs -r

umountall 命令

使用此命令可取消挂载一组文件系统。-k 选项运行 fuser -k mount_point 命令来中止所有与 mount_point 关联的进程。-s 选项表示不会并行执行取消挂载。-l 指定将仅使用本地文件系统,-r 指定将仅使用远程文件系统。-h host 选项表示应取消挂载指定主机中的所有文件系统。不能将 -h 选项与 -l-r 合并使用。

以下是取消挂载从远程主机挂载的所有文件系统的示例:


# umountall -r

以下是取消挂载当前从服务器 bee 挂载的所有文件系统的示例:


# umountall -h bee

share 命令

使用此命令,可以挂载 NFS 服务器上的本地文件系统。另外,还可以使用 share 命令显示当前在系统上共享的文件系统列表。NFS 服务器必须处于运行状态才能使用 share 命令。如果 /etc/dfs/dfstab 中存在一项,则在系统引导过程中会自动启动 NFS 服务器软件。如果 NFS 服务器软件未运行,则此命令不会报告错误,因此必须验证此软件是否正在运行。

可以共享的对象包括任意目录树。但是,每个文件系统分层结构会受到文件系统所在的磁盘分片或磁盘分区的限制。例如,共享根 (/) 文件系统将不会同时共享 /usr,除非这些目录位于相同的磁盘分区或磁盘分片上。标准安装将根目录放在分片 0 上,将 /usr 放在分片 6 上。另外,共享 /usr 时将不会共享在 /usr 的子目录上挂载的其他任何本地磁盘分区。

如果某个文件系统是一个已共享的大文件系统的一部分,则不能共享此文件系统。例如,如果 /usr/usr/local 位于同一磁盘分片上,则可以共享 /usr/usr/local。但是,如果这两个目录需要使用不同的共享选项进行共享,则必须将 /usr/local 移到单独的磁盘分片上。

通过读写共享的文件系统的文件句柄,可以获取对只读共享的文件系统的访问。但是,这两个文件系统必须位于同一磁盘分片上。您可以创建更为安全的环境。请将那些需要读写的文件系统放在单独的分区或磁盘分片上,使其与需要只读共享的文件系统分隔开来。


注 –

有关取消共享文件系统之后再重新共享此系统时 NFS 版本 4 如何运行的信息,请参阅在 NFS 版本 4 中取消共享和重新共享文件系统


特定于非文件系统的 share 选项

以下是可以用于 -o 标志的一些选项。

rw|ro

pathname 文件系统对所有客户机而言是读写共享还是只读共享。

rw=accesslist

文件系统仅对列出的客户机是读写共享。其他所有请求均被拒绝。从 Solaris 2.6 发行版开始,accesslist 中定义的客户机列表已进行了扩展。有关更多信息,请参见使用 share 命令设置访问列表。可以使用此选项来覆盖 -ro 选项。

特定于 NFS 的 share 选项

以下是可以用于 NFS 文件系统的选项。

aclok

使用此选项,可以将支持 NFS 版本 2 协议的 NFS 服务器配置为对 NFS 版本 2 客户机进行访问控制。如果不使用此选项,则会为所有客户机提供最低访问权限。如果使用此选项,则客户机具有最高访问权限。例如,在使用 -aclok 选项共享的文件系统上,如果某个用户具有读取权限,则所有用户均可具有读取权限。但是,如果不使用此选项,本该具有访问权限的客户机也会被拒绝访问。确定是允许最多访问还是最少访问取决于已设置的安全系统。有关访问控制列表 (access control list, ACL) 的更多信息,请参见《系统管理指南:安全性服务》中的“使用访问控制列表保护文件”


注 –

要使用 ACL,请确保客户机和服务器运行的软件支持 NFS 版本 3 协议和 NFS_ACL 协议。如果该软件仅支持 NFS 版本 3 协议,则客户机可获取正确的访问权限,但不能处理 ACL。如果该软件支持 NFS_ACL 协议,则客户机可获取正确的访问权限,并且可处理 ACL。从 Solaris 2.5 发行版开始,Solaris 系统同时支持这两种协议。


anon=uid

可以使用 uid 来选择未验证的用户的用户 ID。如果将 uid 设置为 -1,则服务器会拒绝未验证的用户进行访问。通过设置 anon=0 可以授予超级用户访问权限,但是由于此选项允许未验证的用户具有超级用户访问权限,因此请改用 root 选项。

index=filename

用户访问 NFS URL 时,-index=filename 选项会强制装入 HTML 文件,而不是显示目录列表。如果在 HTTP URL 正在访问的目录中找到 index.html 文件,则此选项会模拟当前浏览器的操作。此选项相当于为 httpd 设置 DirectoryIndex 选项。例如,假定 dfstab 文件项与以下内容类似:


share -F nfs -o ro,public,index=index.html /export/web

这些 URL 随后会显示相同的信息:


nfs://<server>/<dir>

nfs://<server>/<dir>/index.html

nfs://<server>//export/web/<dir>

nfs://<server>//export/web/<dir>/index.html

http://<server>/<dir>

http://<server>/<dir>/index.html
log=tag

此选项可指定 /etc/nfs/nfslog.conf 中的标记,该文件中包含文件系统的 NFS 服务器日志记录配置信息。必须选择此选项才能启用 NFS 服务器日志记录。

nosuid

此选项表示应忽略启用 setuidsetgid 模式的所有尝试。NFS 客户机不能创建启用了 setuidsetgid 位的文件。

public

-public 选项已添加到 share 命令中,以启用 WebNFS 浏览功能。使用此选项在一台服务器上只能共享一个文件系统。

root=accesslist

服务器会为列表中的主机提供超级用户访问权限。缺省情况下,服务器不会为任何远程主机提供超级用户访问权限。如果选定的安全模式不是 -sec=sys,则只能在 accesslist 中包括客户机主机名。从 Solaris 2.6 发行版开始,accesslist 中定义的客户机列表已进行了扩展。有关更多信息,请参见使用 share 命令设置访问列表


注意 – 注意 –

授予其他主机超级用户访问权限会涉及广泛的安全问题。请慎用 -root= 选项。


root=client_name

client_name 值可用于 AUTH_SYS 验证,以便对照 exportfs(1B) 中提供的地址列表来检查客户机的 IP 地址。如果找到匹配项,则可以 root 访问权限访问共享的文件系统。

root=host_name

对于安全 NFS 模式(如 AUTH_SYS 或 RPCSEC_GSS),服务器会对照访问列表派生的基于主机的主体名称列表来检查客户机的主体名称。客户机主体名称的通用语法为 root@hostname。对于 Kerberos V,语法为 root/hostname.fully.qualified@REALM。使用 host_name 值时,访问列表中的客户机必须具有某个主体名称的凭证。对于 Kerberos V,客户机必须具有其 root/hostname.fully.qualified@REALM 主体名称的有效密钥表项。有关更多信息,请参见《系统管理指南:安全性服务》中的“配置 Kerberos 客户机”

sec=mode[:mode]

mode 选择获取对文件系统的访问所需的安全模式。缺省情况下,安全模式为 UNIX 验证。可以指定多种模式,但是每个命令行一次只能使用一种安全模式。每个 -mode 选项都应用于所有后续的 -rw-ro-rw=-ro=-root=-window= 选项,直至遇到其他 -mode 为止。使用 -sec=none 可将所有用户映射为用户 nobody

window=value

value 选择 NFS 服务器上某个凭证的最长生命周期(以秒为单位)。缺省值为 30000 秒,即 8.3 小时。

使用 share 命令设置访问列表

在 Solaris 2.6 之前的发行版中,用于 share 命令的 -ro=-rw=-root= 选项的 accesslist 仅限于主机名或网络组名的列表。从 Solaris 2.6 发行版开始,访问列表还可以包括域名、子网号或拒绝访问的项。由于不必更改名称空间或维护较长的客户机列表,这些扩展简化了单一服务器上的文件访问控制。

以下命令为大多数系统提供只读访问权限,但是允许 roselilac 进行读写访问:


# share -F nfs -o ro,rw=rose:lilac /usr/src

在下一面的示例中,为 eng 网络组中的任意主机指定了只读访问权限。专门为客户机 rose 提供了读写访问权限。


# share -F nfs -o ro=eng,rw=rose /usr/src

注 –

不能同时指定不带参数的 rwro。如果未指定读写选项,则缺省情况下会为所有客户机指定读写访问权限。


要使多台客户机共享一个文件系统,必须在同一行中键入所有选项。针对同一对象多次调用 share 命令时,将仅“记住”最后一个运行的命令。以下命令为三台客户机系统提供读写访问权限,但是仅为 rosetulip 提供以 root 身份对文件系统的访问。


# share -F nfs -o rw=rose:lilac:tulip,root=rose:tulip /usr/src

共享使用多种验证机制的文件系统时,请确保在正确的安全模式之后包括 -ro-ro=-rw-rw=-root-window 选项。在本示例中,会为名为 eng 的网络组中的所有主机选择 UNIX 验证。这些主机只能以只读模式挂载文件系统。如果主机 tuliplilac 使用 Diffie-Hellman 验证,则它们可以以读写模式挂载文件系统。使用这些选项时,即使主机 tuliplilac 不使用 DH 验证,也可以以只读模式挂载文件系统。但是,必须在 eng 网络组中列出这些主机名。


# share -F nfs -o sec=dh,rw=tulip:lilac,sec=sys,ro=eng /usr/src

尽管 UNIX 验证为缺省安全模式,但如果使用 -sec 选项,也不会包括 UNIX 验证。因此,如果要将 UNIX 验证与其他任何验证机制一起使用,就必须包括 -sec=sys 选项。

通过在实际域名的前面添加一个点,可以在访问列表中使用 DNS 域名。点后面的字符串是域名,而不是全限定主机名。以下项允许 eng.example.com 域中的所有主机进行挂载:


# share -F nfs -o ro=.:.eng.example.com /export/share/man

在本示例中,单个 “.” 与通过 NIS 或 NIS+ 名称空间匹配的所有主机相匹配。 从这些名称服务中返回的结果中不包括域名。“.eng.example.com” 项与所有使用 DNS 进行名称空间解析的主机相匹配。DNS 始终返回全限定主机名。因此,如果使用了 DNS 和其他名称空间的组合,则需要较长的项。

通过在实际网络号或网络名的前面添加 “@”,可以在访问列表中使用子网号。此字符可将网络名与网络组或全限定主机名区分开来。必须在 /etc/networks、NIS 或 NIS+ 名称空间中标识子网。如果 192.168 子网已标识为 eng 网络,则以下各项具有相同效果:


# share -F nfs -o ro=@eng /export/share/man

# share -F nfs -o ro=@192.168 /export/share/man

# share -F nfs -o ro=@192.168.0.0 /export/share/man

最后两项表明无需包括完整的网络地址。

如果网络前缀不是按字节对齐,即与无类域间路由 (Classless Inter-Domain Routing, CIDR) 一样,则可以在命令行中明确指定掩码长度。掩码长度可通过在网络名或网络号后添加一条斜杠和地址前缀中的有效位数进行定义。例如:


# share -f nfs -o ro=@eng/17 /export/share/man

# share -F nfs -o ro=@192.168.0/17 /export/share/man

在上述示例中,“/17” 表示地址中的前 17 位要用作掩码。有关 CIDR 的其他信息,请查阅 RFC 1519。

另外,还可以通过在项的前面放置 “-” 来选择拒绝访问。请注意,各项是从左到右读取的。因此,必须将拒绝访问项放在应用了拒绝访问项的项之前:


# share -F nfs -o ro=-rose:.eng.example.com /export/share/man

本示例将允许对 eng.example.com 域中除了名为 rose 的主机之外的任何主机进行访问。

unshare 命令

使用此命令,可使以前可供挂载的文件系统不能再由客户机挂载。可以使用 unshare 命令取消共享任何文件系统,无论此文件系统是使用 share 命令进行显式共享还是通过 /etc/dfs/dfstab 自动共享。如果使用 unshare 命令取消共享通过 dfstab 文件共享的文件系统,请务必谨慎。请记住,退出再重新进入运行级 3 时,会再次共享文件系统。如果要保持这一更改,则必须从 dfstab 文件中删除此文件系统项。

取消共享 NFS 文件系统时,将禁止从具有现有挂载的客户机进行访问。文件系统可能仍挂载在客户机上,但是无法再访问其中的文件。


注 –

有关取消共享文件系统之后再重新共享此系统时 NFS 版本 4 如何运行的信息,请参阅在 NFS 版本 4 中取消共享和重新共享文件系统


以下是取消共享某个特定文件系统的示例:


# unshare /usr/src

shareall 命令

使用此命令可共享多个文件系统。如果在不带选项的情况下使用此命令,则可以共享 /etc/dfs/dfstab 中的所有项。您可以包括一个文件名来指定其中列出了 share 命令行的文件的名称。如果没有包括文件名,则会检查 /etc/dfs/dfstab。如果使用 “-” 来替换文件名,则可以从标准输入中键入 share 命令。

以下是共享本地文件中列出的所有文件系统的示例:


# shareall /etc/dfs/special_dfstab

unshareall 命令

此命令可使所有当前共享的资源不可用。-F FSType 选项可选择 /etc/dfs/fstypes 中定义的文件系统类型的列表。使用此标志,可以仅选择要取消共享的某些文件系统类型。缺省的文件系统类型在 /etc/dfs/fstypes 中定义。要选择特定的文件系统,请使用 unshare 命令。

以下是取消共享所有 NFS 类型的文件系统的示例:


# unshareall -F nfs

showmount 命令

此命令可显示以下内容之一:


注 –

showmount 命令仅显示 NFS 版本 2 和版本 3 的导出内容,而不显示 NFS 版本 4 的导出内容。


此命令的语法如下:

showmount [ -ade ] [ hostname ]

-a

列显所有远程挂载的列表。每项都包括客户机名称和目录。

-d

列显由客户机远程挂载的目录的列表。

-e

列显共享或导出的文件的列表。

hostname

选择要从其中收集信息的 NFS 服务器。

如果未指定 hostname,则会对本地主机进行查询。

以下命令列出了所有客户机以及这些客户机已挂载的本地目录:


# showmount -a bee

lilac:/export/share/man

lilac:/usr/src

rose:/usr/src

tulip:/export/share/man

以下命令列出了已挂载的目录:


# showmount -d bee

/export/share/man

/usr/src

以下命令列出了已共享的文件系统:


# showmount -e bee

/usr/src								(everyone)

/export/share/man					eng

setmnt 命令

此命令可创建 /etc/mnttab 表。mountumount 命令会查阅该表。通常不必手动运行此命令,因为它会在系统引导时自动运行。

用于解决 NFS 问题的命令

这些命令在解决 NFS 问题时会非常有用。

nfsstat 命令

可以使用此命令来收集有关 NFS 和 RPC 连接的统计信息。此命令的语法如下:

nfsstat [ -cmnrsz ]

-c

显示客户端信息

-m

显示每个已挂载 NFS 文件系统的统计信息

-n

指定要同时显示在客户端和服务器端的 NFS 信息

-r

显示 RPC 统计信息

-s

显示服务器端信息

-z

指定应将统计信息设置为零

如果未在命令行中提供任何选项,则使用 -cnrs 选项。

向计算环境中添加新的软件或硬件时,收集服务器端统计信息对于调试问题非常重要。每周最少运行一次此命令并存储运行结果可以保留以前执行情况的完整历史记录。

请参阅以下示例:


# nfsstat -s



Server rpc:

Connection oriented:

calls      badcalls   nullrecv   badlen     xdrcall    dupchecks  dupreqs    

719949194  0          0          0          0          58478624   33         

Connectionless:

calls      badcalls   nullrecv   badlen     xdrcall    dupchecks  dupreqs    

73753609   0          0          0          0          987278     7254       



Server nfs:

calls                badcalls             

787783794            3516                 

Version 2: (746607 calls)

null       getattr    setattr    root       lookup     readlink   read       

883 0%     60 0%      45 0%      0 0%       177446 23% 1489 0%    537366 71% 

wrcache    write      create     remove     rename     link       symlink    

0 0%       1105 0%    47 0%      59 0%      28 0%      10 0%      9 0%       

mkdir      rmdir      readdir    statfs     

26 0%      0 0%       27926 3%   108 0%     

Version 3: (728863853 calls)

null          getattr       setattr       lookup        access        

1365467 0%    496667075 68% 8864191 1%    66510206 9%   19131659 2%   

readlink      read          write         create        mkdir         

414705 0%     80123469 10%  18740690 2%   4135195 0%    327059 0%     

symlink       mknod         remove        rmdir         rename        

101415 0%     9605 0%       6533288 0%    111810 0%     366267 0%     

link          readdir       readdirplus   fsstat        fsinfo        

2572965 0%    519346 0%     2726631 0%    13320640 1%   60161 0%      

pathconf      commit        

13181 0%      6248828 0%    

Version 4: (54871870 calls)

null                compound            

266963 0%           54604907 99%        

Version 4: (167573814 operations)

reserved            access              close               commit              

0 0%                2663957 1%          2692328 1%          1166001 0%          

create              delegpurge          delegreturn         getattr             

167423 0%           0 0%                1802019 1%          26405254 15%        

getfh               link                lock                lockt               

11534581 6%         113212 0%           207723 0%           265 0%              

locku               lookup              lookupp             nverify             

230430 0%           11059722 6%         423514 0%           21386866 12%        

open                openattr            open_confirm        open_downgrade      

2835459 1%          4138 0%             18959 0%            3106 0%             

putfh               putpubfh            putrootfh           read                

52606920 31%        0 0%                35776 0%            4325432 2%          

readdir             readlink            remove              rename              

606651 0%           38043 0%            560797 0%           248990 0%           

renew               restorefh           savefh              secinfo             

2330092 1%          8711358 5%          11639329 6%         19384 0%            

setattr             setclientid         setclientid_confirm verify              

453126 0%           16349 0%            16356 0%            2484 0%             

write               release_lockowner   illegal             

3247770 1%          0 0%                0 0%                



Server nfs_acl:

Version 2: (694979 calls)

null        getacl      setacl      getattr     access      getxattrdir 

0 0%        42358 6%    0 0%        584553 84%  68068 9%    0 0%        

Version 3: (2465011 calls)

null        getacl      setacl      getxattrdir 

0 0%        1293312 52% 1131 0%     1170568 47% 


以上列出的是 NFS 服务器统计信息的示例。前五行与 RPC 有关,其余行则报告 NFS 活动。在两组统计信息中,了解 badcallscalls 的平均数以及每周的调用次数有助于确定问题。badcalls 值报告来自客户机的错误消息数。该值可以表明网络硬件问题。

某些连接会在磁盘上执行写操作。这些统计信息的突然增加可能表明出现了问题,应该对这一现象进行调查。对于 NFS 版本 2 的统计信息,要注意的连接包括 setattrwritecreateremoverenamelinksymlinkmkdirrmdir。对于 NFS 版本 3 和版本 4 的统计信息,要注意的值为 commit。如果 commit 在一台 NFS 服务器中的级别高于在另一台几乎相同的服务器中的级别,请检查 NFS 客户机是否具有足够的内存。客户机没有可用资源时,服务器上的 commit 操作数将增加。

pstack 命令

此命令可显示每个进程的栈跟踪。pstack 命令必须由相应进程的属主或 root 运行。可以使用 pstack 来确定进程挂起的位置。此命令允许使用的唯一选项是要检查的进程的 PID。请参见 proc(1) 手册页。

以下是检查正在运行的 nfsd 进程的示例。


# /usr/bin/pgrep nfsd

243

# /usr/bin/pstack 243

243:    /usr/lib/nfs/nfsd -a 16

 ef675c04 poll     (24d50, 2, ffffffff)

 000115dc ???????? (24000, 132c4, 276d8, 1329c, 276d8, 0)

 00011390 main     (3, efffff14, 0, 0, ffffffff, 400) + 3c8

 00010fb0 _start   (0, 0, 0, 0, 0, 0) + 5c

此示例显示进程正在等待新的连接请求,这是正常响应。如果栈表明在发出请求之后进程仍在轮询,则此进程可能会被挂起。请遵照如何重新启动 NFS 服务中的说明来解决此问题。请检查NFS 疑难解答过程中的说明来充分验证问题是否是程序已挂起。

rpcinfo 命令

此命令可生成有关系统上正在运行的 RPC 服务的信息。另外,还可以使用此命令来更改 RPC 服务。许多选项都可用于此命令。请参见 rpcinfo(1M) 手册页。以下是可用于此命令的某些选项的简短概要。

rpcinfo [ -m | -s ] [ hostname ]

rpcinfo -T transport hostname [ progname ]

rpcinfo [ -t | -u ] [ hostname ] [ progname ]

-m

显示 rpcbind 操作的统计信息表

-s

显示所有已注册的 RPC 程序的简表

-T

显示有关使用特定传输或协议的服务的信息

-t

探测使用 TCP 的 RPC 程序

-u

探测使用 UDP 的 RPC 程序

transport

为服务选择传输或协议

hostname

选择需要其中信息的服务器的主机名

progname

选择收集有关其信息的 RPC 程序

如果未指定 hostname 的值,则使用本地主机名。可以将 progname 替换为 RPC 程序编号,但是很多用户可能会记住名称而记不住编号。可以在未运行 NFS 版本 3 软件的系统上使用 -p 选项替换 -s 选项。

此命令生成的数据可包括以下内容:

以下示例收集有关正在服务器上运行的 RPC 服务的信息。此命令生成的文本将通过 sort 命令过滤,以使输出更具可读性。列出 RPC 服务的几行已从本示例中删除。


% rpcinfo -s bee |sort -n

   program version(s) netid(s)                         service     owner

    100000  2,3,4     udp6,tcp6,udp,tcp,ticlts,ticotsord,ticots rpcbind     superuser

    100001  4,3,2     ticlts,udp,udp6                  rstatd      superuser

    100002  3,2       ticots,ticotsord,tcp,tcp6,ticlts,udp,udp6 rusersd     superuser

    100003  3,2       tcp,udp,tcp6,udp6                nfs         superuser

    100005  3,2,1     ticots,ticotsord,tcp,tcp6,ticlts,udp,udp6 mountd      superuser

    100007  1,2,3     ticots,ticotsord,ticlts,tcp,udp,tcp6,udp6 ypbind      superuser

    100008  1         ticlts,udp,udp6                  walld       superuser

    100011  1         ticlts,udp,udp6                  rquotad     superuser

    100012  1         ticlts,udp,udp6                  sprayd      superuser

    100021  4,3,2,1   tcp,udp,tcp6,udp6                nlockmgr    superuser

    100024  1         ticots,ticotsord,ticlts,tcp,udp,tcp6,udp6 status      superuser

    100029  3,2,1     ticots,ticotsord,ticlts          keyserv     superuser

    100068  5         tcp,udp                          cmsd        superuser

    100083  1         tcp,tcp6                         ttdbserverd superuser

    100099  3         ticotsord                        autofs      superuser

    100133  1         ticots,ticotsord,ticlts,tcp,udp,tcp6,udp6 -           superuser

    100134  1         ticotsord                        tokenring   superuser

    100155  1         ticots,ticotsord,tcp,tcp6        smserverd   superuser

    100221  1         tcp,tcp6                         -           superuser

    100227  3,2       tcp,udp,tcp6,udp6                nfs_acl     superuser

    100229  1         tcp,tcp6                         metad       superuser

    100230  1         tcp,tcp6                         metamhd     superuser

    100231  1         ticots,ticotsord,ticlts          -           superuser

    100234  1         ticotsord                        gssd        superuser

    100235  1         tcp,tcp6                         -           superuser

    100242  1         tcp,tcp6                         metamedd    superuser

    100249  1         ticots,ticotsord,ticlts,tcp,udp,tcp6,udp6 -           superuser

    300326  4         tcp,tcp6                         -           superuser

    300598  1         ticots,ticotsord,ticlts,tcp,udp,tcp6,udp6 -           superuser

    390113  1         tcp                              -           unknown

 805306368  1         ticots,ticotsord,ticlts,tcp,udp,tcp6,udp6 -           superuser

1289637086  1,5       tcp                              -           26069

以下两个示例说明如何通过选择特定传输来收集服务器上有关特定 RPC 服务的信息。第一个示例检查通过 TCP 运行的 mountd 服务。第二个示例检查通过 UDP 运行的 NFS 服务。


% rpcinfo -t bee mountd

program 100005 version 1 ready and waiting

program 100005 version 2 ready and waiting

program 100005 version 3 ready and waiting

% rpcinfo -u bee nfs

program 100003 version 2 ready and waiting

program 100003 version 3 ready and waiting

snoop 命令

此命令通常用于查看网络中的包。必须以 root 身份运行 snoop 命令。使用此命令是一种确保网络硬件在客户机和服务器上都正常运行的好方法。可以使用许多选项。请参见 snoop(1M) 手册页。以下是此命令的简短概要:

snoop [ -d device ] [ -o filename ] [ host hostname ]

-d device

指定本地网络接口

-o filename

将所有捕获到的包存储在指定的文件中

hostname

显示仅进出特定主机的包

-d device 选项在那些具有多个网络接口的服务器上非常有用。除了设置主机之外,还可以使用许多表达式。命令表达式与 grep 的组合通常可以生成极其有用的数据。

排除故障时,请确保适当的主机中有包进出。另外,还应查找错误消息。将包保存到文件中可以简化检查数据的过程。

truss 命令

使用此命令可以检查某个进程是否已被挂起。truss 命令必须由相应进程的属主或 root 运行。可以将许多选项用于此命令。请参见 truss(1) 手册页。以下是此命令的简短语法:

truss [ -t syscall ] -p pid

-t syscall

选择要跟踪的系统调用

-p pid

指明要跟踪的进程的 PID

syscall 可以列出要跟踪的系统调用,各系统调用之间以逗号分隔。另外,在 syscall 前面添加 ! 可选择不跟踪所列出的系统调用。

本示例说明进程正在等待来自新客户机的另一个连接请求。


# /usr/bin/truss -p 243

poll(0x00024D50, 2, -1)         (sleeping...)

以上示例表示一个正常响应。如果在发出新连接请求之后该响应未发生变化,则此进程可能会被挂起。请遵照如何重新启动 NFS 服务中的说明来修复被挂起的程序。请检查NFS 疑难解答过程中的说明来充分验证问题是否是程序已挂起。

NFS Over RDMA

从 Solaris 10 发行版开始,NFS 的缺省传输为远程直接内存访问 (Remote Direct Memory Access, RDMA) 协议,这是一种通过高速网络实现内存到内存数据传输的技术。具体来说,RDMA 可提供不受 CPU 干预而直接进出内存的远程数据传输。RDMA 还可提供直接数据放置,这消除了数据副本,进一步消除了 CPU 干预。这样,RDMA 不仅减轻了主机 CPU 的负担,而且还减少了主机内存和 I/O 总线的争用。 为提供此功能,RDMA 将 InfiniBand-on-SPARC 平台的互连 I/O 技术与 Solaris 操作系统相结合。下图说明了 RDMA 与其他协议(如 UDP 和 TCP)的关系。

图 6–1 RDMA 与其他协议的关系

文中对该图形进行了说明。

由于 RDMA 是 NFS 的缺省传输协议,因此,在客户机或服务器上使用 RDMA 时不需要特殊的 sharemount 选项。现有的自动挂载程序映射 vfstab 和 dfstab 可用于 RDMA 传输。如果 SPARC 平台上在客户机和服务器之间存在 InfiniBand 连接,则会以透明方式通过 RDMA 进行 NFS 挂载。如果 RDMA 传输在客户机和服务器上都不可用,则 TCP 传输为首选备用传输协议,如果 TCP 不可用,则会再使用 UDP。但是请注意,如果使用 proto=rdma 挂载选项,则会强制 NFS 挂载仅使用 RDMA。

要指定仅使用 TCP 和 UDP,可以使用 proto=tcp/udp mount 选项。此选项可在 NFS 客户机上禁用 RDMA。有关 NFS 挂载选项的更多信息,请参见 mount_nfs(1M) 手册页和mount 命令


注 –

用于 InfiniBand 的 RDMA 会使用 IP 寻址格式和 IP 查找基础结构来指定对等点。但是,由于 RDMA 是单独的协议栈,因此,它没有完全实现所有的 IP 语义。例如,RDMA 不会使用 IP 寻址来与对等点通信。因此,RDMA 可能会跳过基于 IP 地址的各种安全策略的配置。但是,不会跳过 NFS 和 RPC 管理策略,如 mount 限制和安全 RPC。


NFS 服务如何工作

以下各节介绍了 NFS 软件的一些复杂功能。请注意,本节说明的某些功能仅适用于 NFS 版本 4。


注 –

如果系统启用了区域并且您要在非全局区域中使用此功能,请参见《系统管理指南:Solaris Containers-资源管理和 Solaris Zones》以了解更多信息。


NFS 中的版本协商

NFS 的启动过程包括协商服务器和客户机的协议级别。 如果未指定版本级别,则缺省情况下将选择最佳级别。例如,如果客户机和服务器都可以支持版本 3,则会使用版本 3。如果客户机或服务器只能支持版本 2,则会使用版本 2。

从 Solaris 10 发行版开始,可以在 /etc/default/nfs 文件中设置关键字 NFS_CLIENT_VERSMIN、NFS_CLIENT_VERSMAX、NFS_SERVER_VERSMIN 和 NFS_SERVER_VERSMAX。为服务器和客户机指定的最小值和最大值将取代这些关键字的缺省值。对于客户机和服务器,最小缺省值为 2,最大缺省值为 4。请参见/etc/default/nfs 文件的关键字。为查明服务器所支持的版本,NFS 客户机会从 NFS_CLIENT_VERSMAX 的设置开始,然后依次尝试每个版本,直到遇到 NFS_CLIENT_VERSMIN 的版本设置为止。 一旦查明所支持的版本,此过程便会终止。 例如,如果 NFS_CLIENT_VERSMAX=4 并且 NFS_CLIENT_VERSMIN=2,则客户机会首先尝试版本 4,然后是版本 3,最后是版本 2。如果 NFS_CLIENT_VERSMIN 和 NFS_CLIENT_VERSMAX 设置为相同的值,则客户机会始终使用此版本,并且不会尝试其他任何版本。 如果服务器不提供此版本,挂载将会失败。


注 –

可以使用带有 vers 选项的 mount 命令来覆盖通过协商确定的值。请参见 mount_nfs(1M) 手册页。


有关过程信息,请参阅设置 NFS 服务

NFS 版本 4 的功能

NFS 版本 4 已进行了许多更改。本节提供了这些新增功能的说明。


注 –

从 Solaris 10 发行版开始,NFS 版本 4 不支持 LIPKEY/SPKM 安全特性。另外,NFS 版本 4 也不会使用 mountdnfslogdstatd 守护进程。


有关与使用 NFS 版本 4 相关的过程信息,请参阅设置 NFS 服务

在 NFS 版本 4 中取消共享和重新共享文件系统

如果同时使用 NFS 版本 3 和版本 4,则客户机尝试访问一个已经取消共享的文件系统时,服务器会以错误代码响应。但是,如果使用 NFS 版本 3,则服务器会保留客户机在取消共享文件系统之前所获取的任何锁定。 这样,重新共享文件系统时,NFS 版本 3 客户机即可访问此文件系统,就好像从未取消共享此文件系统一样。

如果使用 NFS 版本 4,则取消共享文件系统时,将破坏此文件系统中任何打开的文件或文件锁定的所有状态。如果客户机尝试访问这些文件或锁定,则会收到一条错误消息。通常会将此错误消息作为 I/O 错误报告给应用程序。但是请注意,通过重新共享当前共享的文件系统来更改选项不会破坏服务器上的任何状态。

有关信息,请参阅NFS 版本 4 中的客户机恢复或参见 unshare_nfs(1M) 手册页。

NFS 版本 4 中的文件系统名称空间

NFS 版本 4 服务器可创建并维护一个伪文件系统,此系统使客户机能够对服务器上所有导出的对象进行无缝访问。在 NFS 版本 4 之前,不存在伪文件系统。那时的客户机会强制挂载每个共享服务器文件系统来进行访问。请参考以下示例。

图 6–2 服务器文件系统和客户机文件系统的视图

文中对该图形进行了说明。

请注意,客户机无法看到 payroll 目录和 nfs4x 目录,因为这些目录未被导出,也没有通向导出目录。但是,客户机可以看到 local 目录,因为 local 是一个导出的目录。客户机还可看到 projects 目录,因为 projects 通向导出目录 nfs4。因此,未显式导出的服务器名称空间部分会与伪文件系统桥接,该系统仅显示导出目录和那些通向服务器导出目录的目录。

伪文件系统是服务器创建的仅包含目录的结构。 伪文件系统允许客户机浏览导出文件系统的分层结构。因此,客户机的伪文件系统视图限制为仅显示通向导出文件系统的路径。

以前的 NFS 版本不允许客户机在未挂载每个文件系统的情况下遍历服务器文件系统。 但是,在 NFS 版本 4 中,服务器名称空间可进行以下操作:

由于与 POSIX 相关的原因,Solaris NFS 版本 4 客户机不会跨越服务器的文件系统边界。如果尝试进行这类操作,则客户机会使目录显示为空。要修正这种情况,必须针对每个服务器的文件系统执行挂载。

NFS 版本 4 中的可变文件句柄

文件句柄是在服务器上创建的,其中包含唯一标识文件和目录的信息。在 NFS 版本 2 和 3 中,服务器会返回持久性文件句柄。这样,客户机即可确保服务器会生成始终引用同一文件的文件句柄。例如:

因此,当服务器从客户机收到包括文件句柄的请求时,解决方案会非常简单,并且文件句柄会始终引用正确的文件。

这种为 NFS 操作标识文件和目录的方法对大多数基于 UNIX 的服务器都很有效。但是,此方法不能在依赖其他标识方法(如文件的路径名)的服务器上实现。为了解决此问题,NFS 版本 4 协议允许服务器声明其文件句柄为可变句柄。这样,即可更改文件句柄。如果文件句柄确实已更改,则客户机必须找到新的文件句柄。

与 NFS 版本 2 和 3 一样,Solaris NFS 版本 4 服务器始终提供持久性文件句柄。但是,访问非 Solaris NFS 版本 4 服务器的 Solaris NFS 版本 4 客户机必须在服务器使用可变文件句柄时支持这些句柄。具体来说,当服务器通知客户机文件句柄可变时,客户机必须高速缓存路径名和文件句柄之间的映射。客户机会一直使用可变文件句柄,直到句柄过期为止。句柄过期后,客户机会执行以下操作:


注 –

服务器会始终通知客户机哪些文件句柄为持久性句柄,哪些文件句柄为可变句柄。


可变文件句柄可能会由于以下任一原因过期:

请注意,如果客户机无法找到新的文件句柄,则会在 syslog 文件中放入一条错误消息。进一步尝试访问此文件会失败,并显示 I/O 错误。

NFS 版本 4 中的客户机恢复

NFS 版本 4 协议为有状态协议。如果客户机和服务器都保留有关以下内容的当前信息,协议即为有状态协议。

出现故障(如服务器崩溃)时,客户机和服务器会协同工作,以重新建立故障之前已存在的打开状态和锁定状态。

服务器崩溃并重新引导时,会丢失其状态。客户机检测到服务器已经重新引导后,将启动帮助服务器重建其状态的进程。此进程称为客户机恢复,因为它是由客户机引导执行的。

客户机发现服务器已经重新引导后,便会立即暂停其当前活动并启动客户机恢复进程。启动恢复进程时,系统错误日志 /var/adm/messages 中会显示如下消息。


NOTICE: Starting recovery server basil.example.company.com

在恢复进程中,客户机会向服务器发送有关客户机以前状态的信息。但是请注意,在此期间,客户机不会向服务器发送任何新请求。 任何打开文件或设置文件锁定的新请求都必须等到服务器完成其恢复期之后才能继续进行。

客户机恢复进程完成时,系统错误日志 /var/adm/messages 中会显示以下消息。


NOTICE: Recovery done for server basil.example.company.com

现在,客户机已经成功地将其状态信息发送给服务器。 不过,尽管此客户机已经完成了此进程,但是其他客户机可能尚未完成将其状态信息发送给服务器的进程。 因此,在一段时间内,服务器不会接受任何打开或锁定请求。指定这段时间(称为宽延期)旨在允许所有客户机完成其恢复。

在宽延期内,如果客户机尝试打开任何新文件或建立任何新锁定,服务器都会拒绝请求并显示 GRACE 错误代码。收到此错误后,客户机必须等到宽延期结束,然后才能向服务器重新发送请求。 在宽延期内,会显示以下消息。


NFS server recovering

请注意,在宽延期内,可以继续执行不打开文件或设置文件锁定的命令。 例如,命令 lscd 不会打开文件或设置文件锁定。因此,这些命令不会暂停执行。但是,cat 之类可打开文件的命令会暂停执行,直到宽延期结束为止。

宽延期结束后,会显示以下消息。


NFS server recovery ok.

现在,客户机即可向服务器发送新的打开和锁定请求。

客户机恢复会因为各种原因而失败。例如,如果服务器重新引导后存在网络分区,则客户机可能无法在宽延期结束之前在服务器上重新建立其状态。 宽延期结束后,服务器不允许客户机重新建立其状态,因为新的状态操作可能会产生冲突。例如,新的文件锁定可能会与客户机尝试恢复的旧的文件锁定发生冲突。发生这种情况时,服务器会将 NO_GRACE 错误代码返回到客户机。

如果恢复某个特定文件的打开操作失败,客户机会将此文件标记为不可用,并显示以下消息。


WARNING: The following NFS file could not be recovered and was marked dead 

(can't reopen:  NFS status 70):  file :  filename

请注意,数字 70 仅是一个示例。

如果在恢复过程中重新建立文件锁定失败,则会显示以下错误消息。


NOTICE: nfs4_send_siglost:  pid PROCESS-ID lost

lock on server SERVER-NAME

在这种情况下,会向进程发送 SIGLOST 信号。SIGLOST 信号的缺省操作是终止此进程。

要从此状态恢复,必须重新启动所有在失败时打开文件的应用程序。请注意,可能会出现以下情况。

因此,一些进程可以访问其他进程无法访问的特定文件。

NFS 版本 4 中的 OPEN 共享支持

NFS 版本 4 协议提供了几种文件共享模式,客户机可以使用这些模式控制其他客户机对文件的访问。客户机可以指定以下内容:

Solaris NFS 版本 4 服务器完全实现了这些文件共享模式。因此,如果客户机尝试打开文件的方式与当前共享模式冲突,则服务器会通过使操作失败来拒绝此尝试。如果这类尝试在打开或创建操作开始时失败,则 Solaris NFS 版本 4 客户机会接收到一条协议错误消息。此错误会映射为应用程序错误 EACCES

尽管此协议提供了几种共享模式,但目前 Solaris 中的打开操作不提供多种共享模式。打开文件时,Solaris NFS 版本 4 客户机只能使用 DENY_NONE 模式。

另外,尽管 Solaris fcntl 系统调用使用 F_SHARE 命令来控制文件共享,但是 fcntl 命令无法在 NFS 版本 4 中正常实现。如果在 NFS 版本 4 客户机上使用这些 fcntl 命令,则客户机会向应用程序返回一条 EAGAIN 错误消息。

NFS 版本 4 的委托

NFS 版本 4 为委托同时提供客户机支持和服务器支持。委托是服务器用于将文件管理委托给客户机的一种技术。例如,服务器可以授予客户机读取委托或写入委托。读取委托可以同时授予多台客户机,因为这些读取委托不会彼此冲突;写入委托只能授予一台客户机,因为写入委托会与其他任何客户机的任何文件访问相冲突。 虽然客户机拥有写入委托,但是它不会向服务器发送各种操作,因为客户机保证具有对文件的独占访问权限。同样,客户机在拥有读取委托时也不会向服务器发送各种操作。这是因为服务器保证任何客户机都不能以写入模式打开文件。通过委托,可显著减少服务器和客户机之间针对被委托文件的交互。因此,可降低网络通信量,并且提高客户机和服务器的性能。但是请注意,性能提高的程度取决于应用程序使用的文件交互的类型和网络和服务器的拥塞量。

是否授予委托完全由服务器决定。客户机不会请求委托。服务器可根据文件的访问模式来决定是否授予委托。如果几台不同的客户机最近以写入模式访问了文件,则服务器可能不会授予委托。原因是此访问模式表明将来可能会发生冲突。

当客户机访问文件的方式与当前授予此文件的委托不一致时,便会发生冲突。例如,如果一台客户机拥有对文件的写入委托,同时另一台客户机打开此文件来进行读取或写入访问,则服务器会撤销第一台客户机的写入委托。同样,如果一台客户机拥有读取委托,同时另一台客户机打开同一个文件进行写入,则服务器会撤销读取委托。请注意,在这两种情况下都不会将委托授予第二台客户机,因为此时存在冲突。发生冲突时,服务器会使用回叫机制来访问当前拥有委托的客户机。收到此回叫后,客户机会向服务器发送文件的更新状态并返回委托。如果客户机无法对回叫做出响应,则服务器会撤销委托。在这些情况下,服务器会拒绝客户机对此文件进行的所有操作,客户机将已请求的操作报告为失败。通常,这些失败作为 I/O 错误报告给应用程序。 要从这些错误中恢复,必须关闭文件,然后再重新打开。当客户机和服务器之间存在网络分区并且客户机拥有委托时,撤销委托会失败。

请注意,一台服务器不能解决对其他服务器上存储的文件的访问冲突。因此,NFS 服务器仅解决它自己存储的文件的冲突。此外,要响应由运行各种 NFS 版本的客户机导致的冲突,NFS 服务器只能对运行 NFS 版本 4 的客户机启动回叫机制。NFS 服务器不能对运行较早 NFS 版本的客户机启动回叫机制。

检测冲突的进程会有所变化。例如,与 NFS 版本 4 不同,因为版本 2 和版本 3 不包括打开过程,所以仅会在客户机尝试读取、写入或锁定文件之后检测冲突。服务器对这些冲突的响应也会有所不同。 例如:

解决了委托冲突之后,便不会存在这些情况。

缺省情况下,会启用服务器委托。可以通过修改 /etc/default/nfs 文件来禁用委托。有关过程信息,请参阅如何在服务器上选择不同版本的 NFS

客户机委托不需要任何关键字。NFS 版本 4 回叫守护进程 nfs4cbd 在客户机上提供了回叫服务。只要启用对 NFS 版本 4 的挂载,此守护进程就会自动启动。缺省情况下,客户机会针对 /etc/netconfig 系统文件中列出的所有 Internet 传输向服务器提供必需的回叫信息。请注意,如果在客户机上启用了 IPv6 并且可以确定客户机名称的 IPv6 地址,则回叫守护进程可接受 IPv6 连接。

回叫守护进程使用临时的程序编号以及动态指定的端口号。 此信息提供给服务器,服务器会在授予任何委托之前测试回叫路径。如果回叫路径测试不成功,则服务器不会授予委托,这是唯一可从外部看到的行为。

请注意,因为回叫信息嵌在 NFS 版本 4 请求中,所以服务器不能通过使用网络地址转换 (Network Address Translation, NAT) 的设备来访问客户机。 另外,回叫守护进程还会使用动态端口号。因此,即使防火墙在端口 2049 上启用了正常的 NFS 流量,服务器可能仍然无法穿越防火墙。在这种情况下,服务器不会授予委托。

NFS 版本 4 中的 ACL 和 nfsmapid

访问控制列表 (access control list, ACL) 通过使文件的属主可以为文件属主、组以及其他特定用户和组定义文件权限来提供更好的文件安全性。ACL 是使用 setfacl 命令在服务器和客户机上设置的。请参见 setfacl(1) 手册页。在 NFS 版本 4 中,ID 映射器 nfsmapid 用于将服务器上的 ACL 项中的用户 ID 或组 ID 映射为客户机上的 ACL 项中的用户 ID 或组 ID。反之也能实现。ACL 项中的用户 ID 和组 ID 必须同时存在于客户机和服务器上。

ID 映射失败的原因

以下情况可能导致 ID 映射失败:

避免 ACL 出现 ID 映射问题

为避免 ID 映射问题,请执行以下操作:

检查未映射的用户 ID 或组 ID

要确定是否有无法在服务器或客户机上映射的用户或组,请使用以下脚本:


#! /usr/sbin/dtrace -Fs



sdt:::nfs4-acl-nobody

{

     printf("validate_idmapping: (%s) in the ACL could not be mapped!", 

stringof(arg0));

}

注 –

此脚本中使用的探测器名称是一个接口,该接口以后可以更改。有关更多信息,请参见《Solaris 动态跟踪指南》中的“稳定性级别”


有关 ACL 或 nfsmapid 的其他信息

请参见以下内容:

UDP 和 TCP 协商

启动过程中,还会协商传输协议。缺省情况下,将选择客户机和服务器同时支持的第一个面向连接的传输。如果此选择未成功,则将使用第一个可用的无连接传输协议。/etc/netconfig 中列出了系统支持的传输协议。TCP 是该发行版支持的面向连接的传输协议。UDP 是无连接传输协议。

如果 NFS 协议版本和传输协议都是通过协商确定的,则 NFS 协议版本优先于传输协议。使用 UDP 的 NFS 版本 3 协议比使用 TCP 的 NFS 版本 2 协议具有更高的优先级。可以使用 mount 命令手动选择 NFS 协议版本和传输协议。请参见 mount_nfs(1M) 手册页。在大多数情况下,允许协商选择最佳选项。

协商文件传输大小

文件传输大小确定在客户机与服务器之间传输数据时使用的缓冲区的大小。一般情况下,较大的传输大小更好。NFS 版本 3 协议的传输大小没有限制。但是,从 Solaris 2.6 发行版开始,软件规定缺省缓冲区大小为 32 KB。如果需要,客户机可以在挂载时规定较小的传输大小,但是在大多数情况下,此规定是没有必要的。

不会与使用 NFS 版本 2 协议的系统协商传输大小。在这种情况下,最大的传输大小设置为 8 KB。

可以在 mount 命令中使用 -rsize-wsize 选项来手动设置传输大小。对于某些 PC 客户机,可能需要减小传输大小。另外,如果将 NFS 服务器配置为使用较大的传输大小,则还可以增大传输大小。


注 –

从 Solaris 10 发行版开始,放宽了对线路传输大小的限制。 传输大小取决于基础传输的能力。 例如,对于 UDP,NFS 的传送限制仍然是 32 KB。 但是,因为 TCP 是流协议,没有 UDP 的数据报限制,因此通过 TCP 的最大传输大小已经增加到 1 MB。


如何挂载文件系统

以下说明适用于 NFS 版本 3 挂载。NFS 版本 4 挂载过程既不包括端口映射服务,也不包括 MOUNT 协议。

客户机需要从服务器挂载文件系统时,客户机必须从服务器获取文件句柄。文件句柄必须与文件系统对应。此过程需要在客户机与服务器之间进行多项事务处理。在本示例中,客户机正在尝试从服务器挂载 /home/terry。此事务处理的 snoop 跟踪如下。


client -> server PORTMAP C GETPORT prog=100005 (MOUNT) vers=3 proto=UDP

server -> client PORTMAP R GETPORT port=33492

client -> server MOUNT3 C Null

server -> client MOUNT3 R Null 

client -> server MOUNT3 C Mount /export/home9/terry

server -> client MOUNT3 R Mount OK FH=9000 Auth=unix

client -> server PORTMAP C GETPORT prog=100003 (NFS) vers=3 proto=TCP

server -> client PORTMAP R GETPORT port=2049

client -> server NFS C NULL3

server -> client NFS R NULL3 

client -> server NFS C FSINFO3 FH=9000

server -> client NFS R FSINFO3 OK

client -> server NFS C GETATTR3 FH=9000

server -> client NFS R GETATTR3 OK

在此跟踪中,客户机首先从 NFS 服务器上的端口映射服务请求挂载端口号。客户机收到挂载端口号 (33492) 后,会使用该端口号测试服务器上的服务的可用性。客户机确定服务正在该端口号上运行后,便会请求挂载。服务器对此请求做出响应时,服务器中包括正在挂载的文件系统 (9000) 的文件句柄。随后,客户机将针对 NFS 端口号发送请求。客户机收到来自服务器的端口号后,客户机便会测试 NFS 服务 (nfsd) 的可用性。另外,客户机还将请求有关使用文件句柄的文件系统的 NFS 信息。

在以下跟踪中,客户机正在使用 public 选项挂载文件系统。


client -> server NFS C LOOKUP3 FH=0000 /export/home9/terry

server -> client NFS R LOOKUP3 OK FH=9000

client -> server NFS C FSINFO3 FH=9000

server -> client NFS R FSINFO3 OK

client -> server NFS C GETATTR3 FH=9000

server -> client NFS R GETATTR3 OK

通过使用缺省的公共文件句柄(即 0000),系统将跳过所有要从端口映射服务获取信息并要确定 NFS 端口号的事务。


注 –

NFS 版本 4 提供对可变文件句柄的支持。有关更多信息,请参阅NFS 版本 4 中的可变文件句柄


挂载时 -public 选项和 NFS URL 的作用

使用 -public 选项可能造成导致挂载失败的条件。添加 NFS URL 也可产生导致失败的情形。以下列表介绍了如何使用这些选项挂载文件系统的具体细节。

客户端故障转移

通过使用客户端故障转移,NFS 客户机可以识别出使相同数据可用的多个服务器,并且在当前服务器不可用时可以切换到备用服务器。如果发生以下情况之一,则文件系统就会变得不可用。

在上述情况下执行的故障转移通常对用户是透明的。因此,故障转移可以随时进行,而不会中断客户机上正在运行的进程。

故障转移要求采用只读方式挂载文件系统。文件系统必须相同,故障转移才能成功进行。有关使文件系统相同的因素的说明,请参见什么是复制的文件系统?。静态文件系统或不经常被更改的文件系统是故障转移的最佳候选系统。

您不能对同一 NFS 挂载同时使用 CacheFS 和客户端故障转移。系统针对每个 CacheFS 文件系统存储了额外信息。故障转移期间不能更新此信息,因此挂载文件系统时只能使用这两个功能之一。

需要为每个文件系统建立的副本数目取决于许多因素。理想的情况是,应该至少具有两个服务器。每个服务器都应该支持多个子网。此设置比每个子网上具有唯一一个服务器更好。该过程要求检查列出的每个服务器。 因此,列出的服务器越多,每个挂载的速度就越慢。

故障转移术语

要完全领会该过程,需要了解两个术语。

什么是复制的文件系统?

为了实现故障转移,当其中每个文件大小都相同且文件大小或文件类型与原始文件系统相同时,可以将这样的文件系统称为副本。不考虑权限、创建日期和其他文件属性。如果文件大小或文件类型不同,则重映射将失败,且该过程将挂起,直到旧的服务器可用为止。在 NFS 版本 4 中,该行为是不同的。请参见NFS 版本 4 中的客户端故障转移

可以使用 rdistcpio 或其他文件传输机制来维护复制的文件系统。由于更新复制的文件系统会导致不一致,因此,为实现最佳效果应考虑以下预防措施:

故障转移和 NFS 锁定

某些软件包需要对文件进行读取锁定。为防止这些产品被破坏,允许对只读文件系统进行读取锁定,但是读取锁定仅对客户端是可见的。这些锁定在重映射后不会发生变化,因为服务器不“知晓”有关锁定的信息。由于文件不会发生更改,因此您不需要在服务器端锁定文件。

NFS 版本 4 中的客户端故障转移

在 NFS 版本 4 中,如果由于文件大小不同或文件类型不同而无法建立副本,则将发生以下情况。


注 –

如果重新启动应用程序并再次尝试访问该文件,则应该会成功。


在 NFS 版本 4 中,您不会再收到因不同大小的目录而导致的复制错误。在以前的 NFS 版本中,这种情况被视为错误且会阻碍重映射过程。

此外,在 NFS 版本 4 中,如果目录读取操作未成功,则将由列出的下一个服务器执行该操作。在以前的 NFS 版本中,未成功的读取操作将导致重映射失败且该过程挂起,直到原始服务器可用为止。

大文件

从 Solaris 2.6 发行版开始,Solaris OS 支持超过 2 GB 的文件。缺省情况下,UFS 文件系统是使用 -largefiles 选项挂载的,因而支持此新功能。以前的发行版不能处理此大小的文件。有关说明,请参见如何在 NFS 服务器上禁用大文件

如果服务器的文件系统是使用 -largefiles 选项挂载的,则 Solaris 2.6 NFS 客户机可以访问大文件,而不需进行更改。但是,并不是所有的 Solaris 2.6 命令都可以处理这些大文件。有关可处理大文件的命令的列表,请参见 largefile(5)。不能支持具有大文件扩展的 NFS 版本 3 协议的客户机不能访问任何大文件。尽管运行 Solaris 2.5 发行版的客户机可以使用 NFS 版本 3 协议,但是该发行版不提供大文件支持。

NFS 服务器日志如何工作

NFS 服务器日志记录提供 NFS 读写记录,以及修改文件系统的操作记录。此数据可用于跟踪对信息的访问。此外,记录可以提供用于度量信息重要性的定量方法。

访问启用日志记录的文件系统时,内核会将原始数据写入缓冲区文件。此数据包括以下内容:

nfslogd 守护进程会将此原始数据转换为日志文件中存储的 ASCII 记录。转换期间,IP 地址将被修改为主机名,UID 将被修改为登录名(如果已启用的名称服务可以找到匹配项)。文件句柄也被转换为路径名。为了完成转换,该守护进程将跟踪文件句柄并在单独的文件句柄到路径表中存储信息。这样,每次访问文件句柄时,就不必再次识别路径了。由于在 nfslogd 关闭时不会在文件句柄到路径表中对映射进行任何更改,因此必须始终使该守护进程保持运行状态。


注 –

NFS 版本 4 不支持服务器日志记录。


WebNFS 服务如何工作

WebNFS 服务通过使用公共文件句柄使目录中的文件可用于客户机。文件句柄是内核生成的地址,可标识 NFS 客户机的文件。公共文件句柄具有预定义的值,因此服务器不需要为客户机生成文件句柄。通过删除 MOUNT 协议,可以使用此预定义文件句柄来减少网络通信流量。此能力还会加速客户机的进程处理。

缺省情况下,系统将在根文件系统上建立 NFS 服务器上的公共文件句柄。此缺省设置为 WebNFS 提供了对已在服务器上具有挂载的任何客户机的访问权限。通过使用 share 命令,可以更改公共文件句柄以指向任何文件系统。

当客户机具有与文件系统对应的文件句柄时,将会运行 LOOKUP,以确定与要访问的文件对应的文件句柄。NFS 协议一次只允许评估一个路径名组件。目录分层结构的每个附加层都需要运行一次 LOOKUP。当 LOOKUP 与公共文件句柄有关时,WebNFS 服务器可以使用单个多组件查找事务来评估整个路径名。多组件查找使 WebNFS 服务器可以将该文件句柄传送到所需的文件,而不针对路径名中的每一目录层交换文件句柄。

此外,NFS 客户机还可以通过单一 TCP 连接启动并发下载。此连接提供快速访问,而不会在服务器上产生因设置多个连接而导致的负载增加。尽管 Web 浏览器应用程序支持多个文件的并发下载,但每个文件都有各自的连接。通过使用某个连接,WebNFS 软件可以减少服务器上的系统开销。

如果路径名中的最终组件是指向其他文件系统的符号链接,则客户机可以访问文件(如果客户机已具备通过正常的 NFS 活动进行访问的权限)。

通常,NFS URL 是相对于公共文件句柄进行评估的。通过在路径的开始位置添加一个附加的斜杠,可以更改评估,使其相对于服务器的根文件系统。在本示例中,如果已在 /export/ftp 文件系统上建立了公共文件句柄,则这两个 NFS URL 是等效的。


nfs://server/junk

nfs://server//export/ftp/junk

注 –

NFS 版本 4 协议优先于 WebNFS 服务。NFS 版本 4 完全集成了已添加到 MOUNT 协议和 WebNFS 服务中的所有安全协商。


WebNFS 安全协商如何工作

Solaris 8 发行版包括一个新协议,该协议使 WebNFS 客户机可以与 WebNFS 服务器协商选定的安全机制。 新协议使用安全协商多组件查找功能,该功能是对早期版本的 WebNFS 协议中使用的多组件查找功能的扩展。

WebNFS 客户机通过使用公共文件句柄来发出常规多组件查找请求,进而启动过程。由于客户机不知道服务器保护路径的方式,因此将使用缺省的安全机制。如果缺省的安全机制不够,则服务器将使用 AUTH_TOOWEAK 错误进行回复。此回复表明缺省机制无效。客户机需要使用更强大的缺省机制。

客户机收到 AUTH_TOOWEAK 错误后,会向服务器发送请求,以确定需要哪种安全机制。如果请求成功,则服务器将使用指定路径所需的安全机制数组进行响应。根据安全机制数组的大小,客户机可能必须发出更多请求才能获取完整的数组。如果服务器不支持 WebNFS 安全协商,则请求将失败。

成功请求后,WebNFS 客户机将从其支持的数组中选择第一个安全机制。然后,该客户机将使用选定的安全机制发出常规多组件查找请求,以获取文件句柄。所有后续的 NFS 请求都是使用选定安全机制和文件句柄发出的。


注 –

NFS 版本 4 协议优先于 WebNFS 服务。NFS 版本 4 完全集成了已添加到 MOUNT 协议和 WebNFS 服务中的所有安全协商。


有关 Web 浏览器使用的 WebNFS 限制

WebNFS 软件不支持使用 HTTP 的 Web 站点可以提供的多项功能。这些差异源自 NFS 服务器仅发送文件的事实,因此必须在客户机上执行特殊处理。如果需要为 WebNFS 和 HTTP 访问配置一个 Web 站点,则应考虑以下问题:

安全 NFS 系统

NFS 环境是用于在具有不同计算机体系结构和操作系统的网络中共享文件系统的一种强大而便捷的方式。但是,这些通过 NFS 操作使文件系统共享非常便利的功能同时还会造成一些安全问题。以前,大多数 NFS 实现使用 UNIX(或 AUTH_SYS)验证,但是也可以使用更强大的验证方法(如 AUTH_DH)。使用 UNIX 验证时,NFS 服务器通过验证发出请求的计算机(而不是用户)来验证文件请求。因此,客户机用户可以运行 su 并模仿文件的属主。如果使用 DH 验证,则 NFS 服务器将验证用户,这使这类模仿非常困难。

凭借超级用户权限和对网络编程的了解,任何人都可以将任意数据引入网络,并从网络中提取任何数据。最危险的攻击就是涉及数据引入的那些攻击。例如,通过生成适当的包或通过记录“会话”并稍候重放来模仿用户。这些攻击将影响数据的完整性。涉及被动窃听(仅侦听网络通信流量,而不模仿任何人)的攻击不是很危险,因为不会损害数据完整性。用户可通过对通过网络发送的数据进行加密来保护敏感信息的保密性。

解决网络安全问题的常见方法是针对每个应用程序都单独制定解决方案。更好的方法是在涉及所有应用程序的层上实现标准验证系统。

Solaris 操作系统包括位于远程过程调用 (remote procedure call, RPC) 层上的验证系统(NFS 操作所依赖的机制)。此系统(称为安全 RPC)可以大大提高网络环境的安全性,并能为 NFS 系统等服务提供附加安全性。当 NFS 系统使用由安全 RPC 提供的功能时,该系统称为安全 NFS 系统。

安全 RPC

安全 RPC 是安全 NFS 系统的基础。 安全 RPC 的目标是建立至少与分时系统一样安全的系统。 在分时系统中,所有用户共享单个计算机。分时系统通过登录口令验证用户。使用数据加密标准 (Data Encryption Standard, DES) 验证,可以完成相同的验证过程。用户可以登录任何远程计算机,就像登录本地终端一样。用户的登录口令是其网络安全的保证。在时间共享环境中,系统管理员在道义上不会更改口令以模仿某人。在安全 RPC 中,网络管理员是受信任的,不会更改存储公钥的数据库中的项。

为了解 RPC 验证系统,您需要熟悉两个术语:凭证和检验器。以 ID 证件为例,凭证就是标识用户的具体内容:姓名、地址和生日。检验器就是附加到证件上的照片。通过对照携带该证件的人员检查该证件上的照片,可以确定该证件未被盗用。在 RPC 中,客户机进程会使用每个 RPC 请求将凭证和检验器发送到服务器。服务器仅发回检验器,因为客户机已经“知晓”服务器的凭证。

RPC 验证是开放式的,这表示可以在其中插入各种验证系统,如 UNIX、DH 和 KERB。

当 UNIX 验证由网络服务使用时,凭证包含客户机的主机名、UID、GID 和组访问列表。但是,检验器不包含任何内容。由于不存在检验器,因此超级用户可以使用如 su 等命令来伪造相应的凭证。UNIX 验证的另一个问题是 UNIX 验证将假设网络中的所有计算机都是 UNIX 计算机。UNIX 验证在应用于异构网络中的其他操作系统时将会中断。

为克服 UNIX 验证问题,安全 RPC 使用 DH 验证。

DH 验证

DH 验证使用数据加密标准 (Data Encryption Standard, DES) 和 Diffie-Hellman 公钥密码学来验证网络中的用户和计算机。DES 是标准加密机制。Diffie-Hellman 公钥密码学是包含两个密钥的密码系统:一个公钥和一个私钥。公钥和私钥存储在名称空间中。NIS 将密钥存储在公钥映射中。这些映射包含所有潜在用户的公钥和私钥。有关如何设置映射的更多信息,请参见《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》

DH 验证的安全性依赖于发件人加密当前时间的能力,随后收件人可以对该时间进行解密,并对照自己的时钟进行检查。时间标记是使用 DES 进行加密的。使此方案正常工作的要求如下所示:

如果网络运行时间同步程序,则系统将自动同步客户机和服务器上的时间。如果时间同步程序不可用,则可以使用服务器的时间(而不是网络时间)来计算时间标记。启动 RPC 会话之前,客户机将询问服务器时间,然后计算其自己的时钟与服务器时钟之间的时间差值。计算时间标记时会使用该差值来调整客户机的时钟。如果客户机与服务器的时钟未同步,则服务器将开始拒绝客户机的请求。客户机上的 DH 验证系统将与服务器重新进行同步。

客户机和服务器使用同一个加密密钥,具体方法是:生成一个随机的对话密钥(也称为会话密钥)并使用公钥密码学推导公用密钥。公用密钥是只有客户机和服务器才能推导的密钥。对话密钥用于加密和解密客户机的时间标记。公用密钥用于加密和解密对话密钥。

KERB 验证

Kerberos 是 MIT 开发的验证系统。Kerberos 提供各种加密类型,包括 DES。Kerberos 支持不再作为安全 RPC 的一部分来提供,但是从 Solaris 9 发行版开始,包括服务器端和客户端实现。有关 Kerberos 验证实现的更多信息,请参见《系统管理指南:安全性服务》中的第 20  章 “Kerberos 服务介绍”

在 NFS 中使用安全 RPC

如果计划使用安全 RPC,请注意以下几点:

Autofs 映射

Autofs 使用三种类型的映射:

Autofs 主映射

auto_master 映射将目录与映射相关联。该映射是指定 autofs 应检查的所有映射的主列表。以下示例说明 auto_master 文件可能包含的内容。


示例 6–3 样例 /etc/auto_master 文件


# Master map for automounter 

# 

+auto_master 

/net            -hosts           -nosuid,nobrowse 

/home           auto_home        -nobrowse 

/-              auto_direct     -ro  

本示例说明在常规 auto_master 文件中额外增加了 auto_direct 映射。主映射 /etc/auto_master 中的每一行都具有以下语法:

mount-point map-name [ mount-options ]

mount-point

mount-point 是目录的全(绝对)路径名。如果目录不存在,则 autofs 将创建该目录(如果可能)。如果目录存在且不为空,则在该目录上挂载会隐藏该目录的内容。在这种情况下,autofs 将发出警告。

作为挂载点的表示法 /- 指示此特定映射是直接映射。该表示法还表示没有特定的挂载点与该映射关联。

map-name

map-name 是 autofs 用于查找位置说明或挂载信息的映射。如果名称前面有一个斜杠 (/),则 autofs 会将该名称解释为本地文件。否则,autofs 会使用在名称服务转换器配置文件 (/etc/nsswitch.conf) 中指定的搜索项来搜索挂载信息。特殊映射还可用于 /net。有关更多信息,请参见挂载点 /net

mount-options

mount-options 是可选的以逗号分隔的选项列表,其中的选项适用于挂载在映射名称中指定的项,除非映射名称中的项列出了其他选项。每种特定类型的文件系统的选项都列在该文件系统的挂载手册页中。例如,有关特定于 NFS 的挂载选项,请参见 mount_nfs(1M) 手册页。对于特定于 NFS 的挂载点,bg(后台)和 fg(前台)选项都不适用。

# 开头的行是注释。# 之后直到行尾的所有文本都将被忽略。

要将较长的行拆分为较短的行,请在行尾放置一个反斜杠 (\)。项的最大字符数为 1024。


注 –

如果在两个项中使用了同一挂载点,则 automount 命令会使用第一项。第二项将被忽略。


挂载点 /home

挂载点 /home/etc/auto_home(间接映射)中列出的项将要挂载到的目录。


注 –

缺省情况下,Autofs 可以在所有计算机上运行且支持 /net/home(自动挂载的起始目录)。这些缺省值可以被 NIS auto.master 映射或 NIS+ auto_master 表中的项覆盖,也可以被 /etc/auto_master 本地文件中的项覆盖。


挂载点 /net

Autofs 将在目录 /net 下挂载特殊映射 -hosts 中的所有项。该映射是仅使用主机数据库的内置映射。假设计算机 gumbo 位于主机数据库中,且可以导出其任何文件系统。以下命令会将当前目录更改为计算机 gumbo 的根目录。


% cd /net/gumbo

Autofs 只能挂载主机 gumbo已导出文件系统,即服务器上可供网络用户使用的那些文件系统,而不是本地磁盘上的那些文件系统。因此,gumbo 中的所有文件和目录可能都无法通过 /net/gumbo 使用。

使用 /net 访问方法时,服务器名称位于路径中,且与位置相关。如果要将导出的文件系统从一个服务器移动到另一个服务器,则该路径可能无法再正常工作。应针对所需的文件系统在映射中特别设置一项,而不应使用 /net


注 –

Autofs 仅在挂载时检查服务器的导出列表。挂载服务器的文件系统之后,在自动取消挂载该服务器的文件系统之前,autofs 不会再次检查服务器。因此,只有在取消挂载客户机上的文件系统,然后重新挂载之后,才能“看到”新导出的文件系统。


Autofs 直接映射

直接映射是自动挂载点。使用直接映射时,客户机上的挂载点与服务器上的目录之间存在直接关联。直接映射具有全路径名并显式指示这种关系。以下是典型的 /etc/auto_direct 映射:


/usr/local          -ro \

   /bin                   ivy:/export/local/sun4 \

   /share                 ivy:/export/local/share \

   /src                   ivy:/export/local/src

/usr/man            -ro   oak:/usr/man \

                          rose:/usr/man \

                          willow:/usr/man 

/usr/games          -ro   peach:/usr/games 

/usr/spool/news     -ro   pine:/usr/spool/news \

                          willow:/var/spool/news 

直接映射中的行具有以下语法:

key [ mount-options ] location

key

key 是直接映射中挂载点的路径名。

mount-options

mount-options 是要应用于此特定挂载的选项。仅在这些选项不同于映射缺省值时,才需要这些选项。每种特定类型的文件系统的选项都列在该文件系统的挂载手册页中。例如,有关特定于 CacheFS 的挂载选项,请参见 mount_cachefs(1M) 手册页。有关在不同 NFS 版本中使用 CacheFS 选项的信息,请参见使用 CacheFS 访问 NFS 文件系统

location

location 是文件系统的位置。对于 NFS 文件系统和高层 Sierra 文件系统 (High Sierra file system, HSFS),分别以 server:pathname 和 :devicename 形式指定一个或多个文件系统指定。


注 –

pathname 不应包括自动挂载的挂载点。pathname 应该为文件系统的实际绝对路径。例如,起始目录的位置应列为 server:/export/home/username,而不是 server:/home/username


与主映射一样,以 # 开头的行是注释。# 之后直到行尾的所有文本都将被忽略。要将较长的行拆分为较短的行,请在行尾放置一个反斜杠。

在所有的映射中,直接映射中的项最类似于 /etc/vfstab 中相应的项。/etc/vfstab 中可能存在如下所示的项:


dancer:/usr/local - /usr/local/tmp nfs - yes ro 

其等效的项则以如下形式出现在直接映射中:


/usr/local/tmp     -ro     dancer:/usr/local

注 –

自动挂载程序映射之间不会出现任何选项关联。添加到自动挂载程序映射中的任何选项将覆盖以前搜索到的映射中列出的所有选项。例如,auto_master 映射中包含的选项将被任何其他映射中的相应项所覆盖。


有关与此类型的映射关联的其他重要功能,请参见Autofs 如何为客户机选择最近的只读文件(多个位置)

挂载点 /-

示例 6–3 中,挂载点 /- 通知 autofs 不要将 auto_direct 中的项与任何特定挂载点关联。间接映射使用在 auto_master 文件中定义的挂载点。直接映射使用在已命名映射中指定的挂载点。请记住,在直接映射中,关键字或挂载点是全路径名。

NIS 或 NIS+ auto_master 文件只能具有一个直接映射项,因为在名称空间中挂载点必须是唯一的值。作为本地文件的 auto_master 文件可以具有任意数目的直接映射项(如果这些项不重复)。

Autofs 间接映射

间接映射使用关键字的替代值在客户机上的挂载点与服务器上的目录之间建立关联。间接映射对于访问特定文件系统(如起始目录)非常有用。auto_home 映射便是间接映射。

间接映射中的行具有以下通用语法:

key [ mount-options ] location

key

key 是间接映射中的简单名称(不含斜杠)。

mount-options

mount-options 是要应用于此特定挂载的选项。仅在这些选项不同于映射缺省值时,才需要这些选项。每种特定类型的文件系统的选项都列在该文件系统的挂载手册页中。例如,有关特定于 NFS 的挂载选项,请参见 mount_nfs(1M) 手册页。

location

location 是文件系统的位置。可以 server:pathname 形式指定一个或多个文件系统。


注 –

pathname 不应包括自动挂载的挂载点。pathname 应该为文件系统的实际绝对路径。例如,目录的位置应列为 server:/usr/local,而不要列为 server:/net/server/usr/local


与主映射一样,以 # 开头的行是注释。# 之后直到行尾的所有文本都将被忽略。要将较长的行拆分为较短的行,请在行尾放置一个反斜杠 (\)。示例 6–3 说明包含以下项的 auto_master 映射:


/home      auto_home        -nobrowse    

auto_home 是包含要在 /home 下挂载的项的间接映射的名称。典型的 auto_home 映射可能包含以下内容:


david                  willow:/export/home/david

rob                    cypress:/export/home/rob

gordon                 poplar:/export/home/gordon

rajan                  pine:/export/home/rajan

tammy                  apple:/export/home/tammy

jim                    ivy:/export/home/jim

linda    -rw,nosuid    peach:/export/home/linda

例如,假设上面的映射在主机 oak 上。假设用户 linda 在口令数据库中有一项,该项将她的起始目录指定为 /home/linda。只要 linda 登录计算机 oak,autofs 就会挂载位于计算机 peach 上的目录 /export/home/linda。她的起始目录以读写方式和 nosuid 进行挂载。

假设发生以下情况:用户 linda 的起始目录在口令数据库中列为 /home/linda。任何人(包括 Linda)都可以从使用特定主映射(引用上一个示例中的映射的主映射)设置的任何计算机访问此路径。

在上述情况下,用户 linda 可以在其中的任何一台计算机上运行 loginrlogin,并且已为她挂载了起始目录。

而且,此时 Linda 还可以键入以下命令:


% cd ~david

autofs 将为她挂载 David 的起始目录(如果允许所有权限)。


注 –

自动挂载程序映射之间不会出现任何选项关联。添加到自动挂载程序映射中的任何选项将覆盖以前搜索到的映射中列出的所有选项。例如,将使用任何其他映射中对应的项覆盖 auto_master 映射中包括的选项。


在没有名称服务的网络中,必须更改网络中所有系统上的所有相关文件(如 /etc/passwd)以允许 Linda 访问其文件。在运行 NIS 的网络中,应在 NIS 主服务器上进行更改并将相关的数据库传播到从属服务器。在运行 NIS+ 的网络中,执行更改后会自动将相关的数据库传播到从属服务器。

Autofs 如何工作

Autofs 是一项可自动挂载相应文件系统的客户端服务。以下是协同工作以完成自动挂载的组件:

自动挂载服务 svc:/system/filesystem/autofs 是在系统启动时调用的,可读取主映射文件 auto_master 以创建最初的一组 autofs 挂载。这些 autofs 挂载在启动时不会自动挂载。这些挂载是一些点,以后将会在这些点之下挂载文件系统。这些点也称为触发节点。

设置 autofs 挂载后,这些挂载可以触发要在其下挂载的文件系统。例如,当 autofs 收到访问当前未挂载的文件系统的请求时,autofs 将调用实际挂载所请求的文件系统的 automountd

最初挂载 autofs 挂载后,可以使用 automount 命令根据需要更新 autofs 挂载。该命令将比较 auto_master 映射中的挂载列表和挂载表文件 /etc/mnttab(以前为 /etc/mtab)中的已挂载文件系统的列表。随后,automount 将进行相应的更改。该进程允许系统管理员更改 auto_master 中的挂载信息,并使 autofs 进程可以使用这些更改,而无需停止并重新启动 autofs 守护进程。挂载文件系统后,在自动取消挂载文件系统之前,进一步进行访问不需要 automountd 执行任何操作。

mount 不同,automount 不会读取 /etc/vfstab 文件(特定于每台计算机)以获取要挂载的文件系统的列表。在域中和计算机上 automount 命令是通过名称空间或本地文件进行控制的。

以下是有关 autofs 工作方式的简要概述。

自动挂载守护进程 automountd 是在引导时由服务 svc:/system/filesystem/autofs 启动的。请参见图 6–3。此服务还运行 automount 命令,后者读取主映射并安装 autofs 挂载点。有关更多信息,请参见Autofs 如何启动导航进程(主映射)

图 6–3 svc:/system/filesystem/autofs 服务启动 automount

文中对该图形进行了说明。

Autofs 是支持自动挂载和取消挂载的内核文件系统。

请求访问 autofs 挂载点处的文件系统时,将发生下列情况:

  1. Autofs 拦截请求。

  2. Autofs 将消息发送到 automountd,以便挂载请求的文件系统。

  3. automountd 在映射中查找文件系统信息,创建触发节点并执行挂载。

  4. Autofs 允许继续处理被拦截的请求。

  5. 当文件系统在一段时间内没有活动后,Autofs 取消挂载该文件系统。


注 –

不应手动挂载或取消挂载通过 autofs 服务管理的挂载。即使手动操作成功,autofs 服务也不会检查是否已取消挂载该对象,从而可能导致不一致。重新引导时将清除所有 autofs 挂载点。


Autofs 如何在网络中进行导航(映射)

Autofs 将搜索一系列映射以在网络中进行导航。映射是包含诸如网络中的所有用户的口令项或网络中的所有主机名称等信息的文件。实际上,这些映射包含网络范围内与 UNIX 管理文件等效的文件。可以在本地或通过网络名称服务(如 NIS 或 NIS+)使用映射。可以使用 Solaris Management Console 工具创建映射,以满足环境的需要。请参见修改 Autofs 导航网络的方式(修改映射)

Autofs 如何启动导航进程(主映射)

automount 命令在系统启动时读取主映射。主映射中的每一项都包含直接映射名或间接映射名、映射路径和映射的挂载选项,如图 6–4 所示。项的特定顺序并不重要。automount 会将主映射中的项与挂载表中的项进行比较,以生成最新列表。

图 6–4 在主映射中进行导航

文中对该图形进行了说明。

Autofs 挂载过程

触发挂载请求时,autofs 服务执行的具体操作取决于自动挂载程序映射的配置方式。一般情况下,挂载过程对于所有挂载都是相同的。但是,最终结果会因指定的挂载点和映射的复杂性而异。从 Solaris 2.6 发行版开始,也对挂载过程进行了更改,使其包括触发节点的创建。

简单 Autofs 挂载

为帮助说明 autofs 挂载过程,假设已安装了以下文件。


$ cat /etc/auto_master

# Master map for automounter

#

+auto_master

/net        -hosts        -nosuid,nobrowse

/home       auto_home     -nobrowse

/share      auto_share

$ cat /etc/auto_share

# share directory map for automounter

#

ws          gumbo:/export/share/ws

访问 /share 目录时,autofs 服务将为 /share/ws 创建触发节点,/share/ws 是 /etc/mnttab 中类似于以下项的项:


-hosts  /share/ws     autofs  nosuid,nobrowse,ignore,nest,dev=###

访问 /share/ws 目录时,autofs 服务将通过以下步骤完成该过程:

  1. 检查服务器的挂载服务的可用性。

  2. /share 下挂载请求的文件系统。此时,/etc/mnttab 文件包含以下项。


    -hosts  /share/ws     autofs  nosuid,nobrowse,ignore,nest,dev=###
    
    gumbo:/export/share/ws /share/ws   nfs   nosuid,dev=####    #####

分层挂载

在自动挂载程序文件中定义了多层后,挂载过程将变得更加复杂。假设您对上一个示例中的 /etc/auto_shared 文件进行了扩展,使其包含以下内容:


# share directory map for automounter

#

ws       /       gumbo:/export/share/ws

         /usr    gumbo:/export/share/ws/usr

该挂载过程基本上与上一个示例中访问 /share/ws 挂载点时的情况相同。此外,下一层 (/usr) 的触发节点是在 /share/ws 文件系统中创建的,因此可以挂载下一层(如果可以对其进行访问)。在本示例中,/export/share/ws/usr 必须存在于 NFS 服务器上,才能创建触发节点。


注意 – 注意 –

指定分层递阶时,请勿使用 -soft 选项。有关此限制的说明,请参阅Autofs 取消挂载


Autofs 取消挂载

一段空闲时间后将按相反的顺序(与挂载顺序相反)执行取消挂载过程。如果分层结构中的较高层上的某个目录处于繁忙状态,则只取消挂载该目录下面的文件系统。在取消挂载过程中,将先删除所有触发节点,然后再取消挂载文件系统。如果文件系统处于繁忙状态,则取消挂载将失败并将重新安装触发节点。


注意 – 注意 –

指定分层递阶时,请勿使用 -soft 选项。如果使用 -soft 选项,则重新安装触发节点的请求可能会超时。如果重新安装触发节点失败,将不能再访问下一层挂载。解决此问题的唯一方法是让自动挂载程序取消挂载分层结构中的所有组件。自动挂载程序通过等待文件系统自动取消挂载或重新引导系统来完成取消挂载。


Autofs 如何为客户机选择最近的只读文件(多个位置)

该直接映射示例包含以下内容:


/usr/local          -ro \

   /bin                   ivy:/export/local/sun4\

   /share                 ivy:/export/local/share\

   /src                   ivy:/export/local/src

/usr/man            -ro   oak:/usr/man \

                          rose:/usr/man \

                          willow:/usr/man

/usr/games          -ro   peach:/usr/games

/usr/spool/news     -ro   pine:/usr/spool/news \

                          willow:/var/spool/news 

挂载点 /usr/man/usr/spool/news 列出了多个位置,第一个挂载点有三个位置,第二个挂载点有两个位置。 任何复制的位置都可以向任何用户提供相同的服务。只有在挂载只读文件系统时此过程才有意义,因为您必须对要写入或修改的文件位置进行某些控制。您需要避免在某个时候修改某个服务器上的文件,然后在几分钟后又去修改其他服务器上的“同一个”文件。这样做的优点是,将自动使用可用性最佳的服务器,而无需执行用户所需的任何工作。

如果已将文件系统配置为副本(请参见什么是复制的文件系统?),则客户机可以利用故障转移。这样,不仅可以自动确定最佳的服务器,而且在该服务器不可用时,客户机还会自动使用下一个最佳服务器。故障转移最先在 Solaris 2.6 发行版中得以实现。

将好的文件系统配置为副本的示例是手册页。在大型网络中,多个服务器可以导出当前的一组手册页。如果服务器正在运行且正在导出其文件系统,则从哪个服务器挂载手册页并不重要。在前面示例中,多个挂载位置在映射项中被表示为挂载位置的列表。


/usr/man -ro oak:/usr/man rose:/usr/man willow:/usr/man 

在本示例中,可以从服务器 oakrosewillow 挂载手册页。哪个服务器最好取决于很多因素,其中包括:

排序期间,将对支持各版本的 NFS 协议的服务器进行计数。大多数服务器支持的协议版本将成为要使用的缺省协议。此选择为客户机提供最多可依赖的服务器。

找到包含同一版本协议的最大的服务器子集后,服务器列表将按邻近度进行排序。为确定邻近度,将检查 IPv4 地址。根据 IPv4 地址可显示每个子网中的服务器。本地子网中的服务器优先于远程子网中的服务器。首选最近的服务器可以减少延迟时间和网络通信流量。


注 –

不能确定使用 IPv6 地址的副本的邻近度。


图 6–5 说明了服务器的邻近度。

图 6–5 服务器邻近度

文中对该图形进行了说明。

如果支持同一协议的多个服务器位于本地子网中,则系统将确定连接每个服务器的时间并将使用最快的服务器。使用加权也会影响排序(请参见Autofs 和加权)。

例如,如果版本 4 服务器比较多,则版本 4 将成为要使用的缺省协议。但是,现在排序过程更加复杂了。以下是如何进行排序的一些示例。


注 –

/etc/default/nfs 文件中的关键字值也会影响加权。具体来说,NFS_SERVER_VERSMIN、NFS_CLIENT_VERSMIN、NFS_SERVER_VERSMAX 和 NFS_CLIENT_VERSMAX 的值可以从排序过程中排除某些版本。有关这些关键字的更多信息,请参见/etc/default/nfs 文件的关键字


选择服务器之后,可以在挂载时使用故障转移检查排序方式。在个别服务器可能无法临时导出其文件系统的环境中,多个位置是非常有用的。

在具有许多子网的大型网络中,故障转移特别有用。Autofs 将选择适当的服务器,并且能够将 NFS 网络通信限制在本地网络段。如果服务器具有多个网络接口,则可以列出与每个网络接口关联的主机名,就像接口是单独的服务器一样。Autofs 将选择离客户机最近的接口。


注 –

对于手动挂载,不会执行任何加权和邻近度检查。mount 命令将对从左到右列出的服务器设置优先级。


有关更多信息,请参见 automount(1M) 手册页。

Autofs 和加权

对 autofs 映射增加加权值可影响对处于同一邻近度级别的服务器的选择。例如:


/usr/man -ro oak,rose(1),willow(2):/usr/man

括号中的数字指示加权。不含加权的服务器的值为零,因此最有可能被选择。加权值越高,服务器被选中的几率越低。


注 –

所有其他的服务器选择因素都比加权重要。只有在网络邻近度相同的服务器之间进行选择时,才考虑加权。


映射项中的变量

通过在客户机名称前加一个美元符号 ($) 前缀可以创建特定于该客户机的变量。该变量有助于了解正在访问同一个文件系统位置的不同体系结构类型。还可以使用花括号将变量名与附加字母或数字分隔开。表 6–2 显示了预定义映射变量。

表 6–2 预定义映射变量

变量 

含义 

源自 

示例 

ARCH

体系结构类型 

uname -m

sun4u

CPU

处理器类型 

uname -p

sparc

HOST

主机名 

uname -n

dinky

OSNAME

操作系统名称 

uname -s

SunOS

OSREL

操作系统发行版 

uname -r

5.8

OSVERS

操作系统版本(发行版的版本) 

uname -v

GENERIC

可以在项所在行的任何位置使用变量,但关键字除外。例如,假设您的文件服务器分别从 /usr/local/bin/sparc/usr/local/bin/x86 中导出 SPARC 和 x86 体系结构的二进制文件。客户机可以通过如下映射项进行挂载:


/usr/local/bin	   -ro	server:/usr/local/bin/$CPU

现在,所有客户机的同一项将应用于所有体系结构。


注 –

针对任何 sun4 体系结构编写的大多数应用程序可以在所有 sun4 平台上运行。-ARCH 变量硬编码为 sun4


引用其他映射的映射

文件映射中使用的映射项 +mapname 将导致自动挂载读取指定的映射,就好像该映射包含在当前文件中一样。如果 mapname 前面没有斜杠,则 autofs 会将映射名视为字符串,并使用名称服务转换器策略查找映射名。如果路径名是绝对路径名,则 automount 将检查该名称的本地映射。如果映射名以破折号 (-) 开头,则 automount 将访问相应的内置映射,如 hosts

此名称服务转换器文件包含标记为 automount 的 autofs 的一个项,其中包含搜索名称服务的顺序。以下文件是名称服务转换器文件的示例。


#

# /etc/nsswitch.nis:

#

# An example file that could be copied over to /etc/nsswitch.conf;

# it uses NIS (YP) in conjunction with files.

#

# "hosts:" and "services:" in this file are used only if the /etc/netconfig

# file contains "switch.so" as a nametoaddr library for "inet" transports.

# the following two lines obviate the "+" entry in /etc/passwd and /etc/group.

passwd:         files nis

group:          files nis



# consult /etc "files" only if nis is down.

hosts:          nis [NOTFOUND=return] files

networks:       nis [NOTFOUND=return] files

protocols:      nis [NOTFOUND=return] files

rpc:            nis [NOTFOUND=return] files

ethers:         nis [NOTFOUND=return] files

netmasks:       nis [NOTFOUND=return] files

bootparams:     nis [NOTFOUND=return] files

publickey:      nis [NOTFOUND=return] files

netgroup:       nis

automount:      files nis

aliases:        files nis

# for efficient getservbyname() avoid nis

services:       files nis 

在本示例中,会在搜索 NIS 映射之前先搜索本地映射。因此,可以在本地 /etc/auto_home 映射中为最常访问的起始目录包含几个项。然后,可以使用转换器回退到 NIS 映射以查找其他项。


bill               cs.csc.edu:/export/home/bill

bonny              cs.csc.edu:/export/home/bonny

搜索包括的映射后,如果找不到匹配项,automount 将继续扫描当前映射。因此,可以在 + 项之后添加更多项。


bill               cs.csc.edu:/export/home/bill

bonny              cs.csc.edu:/export/home/bonny

+auto_home 

包括的映射可以是本地文件,也可以是内置映射。请记住,只有本地文件可以包含 + 项。


+auto_home_finance      # NIS+ map

+auto_home_sales        # NIS+ map

+auto_home_engineering  # NIS+ map

+/etc/auto_mystuff      # local map

+auto_home              # NIS+ map

+-hosts                 # built-in hosts map 

注 –

不能在 NIS+ 或 NIS 映射中使用 + 项。


Autofs 可执行映射

可以创建能执行某些命令以生成 autofs 挂载点的 autofs 映射。如果需要根据数据库或平面文件创建 autofs 结构,则使用 autofs 可执行映射将非常有用。使用可执行映射的缺点是,需要在每台主机上安装该映射。可执行映射不能包括在 NIS 或 NIS+ 名称服务中。

可执行映射的项必须位于 auto_master 文件中。


/execute    auto_execute

以下是可执行映射的示例:


#!/bin/ksh

#

# executable map for autofs

#



case $1 in

	         src)  echo '-nosuid,hard bee:/export1' ;;

esac

为使本示例正常工作,该文件必须作为 /etc/auto_execute 进行安装,且必须设置可执行位。将权限设置为 744。在上述情况下,运行以下命令将导致从 bee 挂载 /export1 文件系统:


% ls /execute/src

修改 Autofs 导航网络的方式(修改映射)

可以在映射中修改、删除或添加项,以满足环境的需要。用户所需的应用程序和其他文件系统更改其位置时,映射必须反映这些更改。可以随时修改 autofs 映射。所做修改在 automountd 下次挂载文件系统时是否生效取决于修改的映射和修改类型。

使用名称服务时的缺省 Autofs 行为

引导时服务 svc:/system/filesystem/autofs 将调用 autofs,然后 autofs 将检查 auto_master 主映射。Autofs 遵循下文讨论的规则。

Autofs 使用在 /etc/nsswitch.conf 文件的自动挂载项中指定名称服务。如果指定了 NIS+(而不是本地文件或 NIS),则使用所有映射的原有映射名。如果选择了 NIS,且 autofs 找不到其所需的映射,而找到包含一个或多个下划线的映射名,则会将下划线改为点。这种更改允许旧的 NIS 文件名仍然有效。然后,autofs 将再次检查映射,如图 6–6 所示。

图 6–6 Autofs 使用名称服务的方式

文中对该图形进行了说明。

此会话的屏幕活动与以下示例类似。


$ grep /home /etc/auto_master

/home           auto_home



$ ypmatch brent auto_home

Can't match key brent in map auto_home.  Reason: no such map in

server's domain.



$ ypmatch brent auto.home

diskus:/export/home/diskus1/&

如果选择 "files" 作为名称服务,则所有的映射都被假定为 /etc 目录中的本地文件。Autofs 会将以斜杠 (/) 开头的映射名解释为本地文件,无论 autofs 使用哪种名称服务。

Autofs 参考

本章的其余几节介绍更高级的 autofs 功能和主题。

Autofs 和元字符

Autofs 会将某些字符识别为具有特殊含义。某些字符用于替换,而某些字符用于保护其他字符不被 autofs 映射解析器解析。

& 号 (&)

如果您的映射中指定了许多子目录(如下所示),请考虑使用字符串替换。


john        willow:/home/john

mary        willow:/home/mary

joe         willow:/home/joe

able        pine:/export/able

baker       peach:/export/baker

可以使用 & 号字符 (&) 替换所有关键字。如果使用 & 号,则上一个映射会更改为以下形式:


john        willow:/home/&

mary        willow:/home/&

joe         willow:/home/&

able        pine:/export/&

baker       peach:/export/&

在如下情况下,还可以在直接映射中使用关键字替换:


/usr/man						willow,cedar,poplar:/usr/man

也可以按照以下方式进一步简化项:


/usr/man						willow,cedar,poplar:&

请注意,& 号替换使用整个关键字字符串。因此,如果直接映射中的关键字以 /(按原样)开头,则替换中应包括斜杠。因此,例如,您不能执行以下操作:


/progs				&1,&2,&3:/export/src/progs 

原因是 autofs 会将示例解释为以下内容:


/progs 				/progs1,/progs2,/progs3:/export/src/progs

星号 (*)

可以使用通用替换字符星号 (*) 与任何关键字匹配。可以通过以下映射项从所有主机挂载 /export 文件系统。


*						&:/export

每个 & 号均替换为任何给定关键字的值。Autofs 会将星号解释为文件结束字符。

Autofs 和特殊字符

如果您的映射项包含特殊字符,则可能必须挂载其名称令 autofs 映射解析器迷惑的目录。autofs 解析器对于包含如冒号、逗号和空格等的名称非常敏感。应该用双引号括住这些名称,如下所示:


/vms    -ro    vmsserver: -  -  - "rc0:dk1 - "

/mac    -ro    gator:/ - "Mr Disk - "