系统管理指南:网络服务

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 不使用该守护进程。