分类:
2008-04-09 17:01:34
NFS 文件
第6 章• 访问网络文件系统(参考) 129
/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。
NFS 文件
130 系统管理指南:网络服务• 2006 年8 月
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 形式共享的任何文件系统都使用以下值:
缺省目录为/var/nfs。
日志文件存储在/var/nfs/logs/nfslog* 中。
文件句柄到路径数据库表存储在/var/nfs/fh/fhtables 中。
缓冲区文件存储在/var/nfs/buffers/workbuffer 中。
有关过程信息,请参阅第80 页中的“如何启用NFS 服务器日志记录”。
NFS 文件
第6 章• 访问网络文件系统(参考) 131
NFS 守护进程
为了支持NFS 活动,在系统进入运行级3 或多用户模式时将启动多个守护进程。mountd 和
nfsd 守护进程在作为服务器的系统上运行。服务器守护进程的自动启动取决于
/etc/dfs/sharetab 中是否存在带有NFS 文件系统类型标记的项。为了支持NFS 文件锁定,
应该在NFS 客户机和服务器上运行lockd 和statd 守护进程。但是,与以前版本的NFS 不同
的是,在NFS 版本4 中,不使用守护进程lockd、statd、mountd 和nfslogd。
本节介绍以下守护进程。
第132 页中的“automountd 守护进程”
第132 页中的“lockd 守护进程”
第133 页中的“mountd 守护进程”
第133 页中的“nfs4cbd 守护进程”
第134 页中的“nfsd 守护进程”
第134 页中的“nfslogd 守护进程”
第134 页中的“nfsmapid 守护进程”
第138 页中的“statd 守护进程”
automountd 守护进程
该守护进程处理来自autofs 服务的挂载和取消挂载请求。此命令的语法如下:
automountd [ -Tnv ] [ -D name=value ]
该命令采用以下几种方式运行:
-T 启用跟踪。
-n 对所有autofs 节点禁用浏览功能。
-v 选择将所有的状态消息记录到控制台。
-D name=value 将替换name 指示的自动挂载映射变量的value。
自动挂载映射的缺省值为/etc/auto_master。可使用-T 选项进行故障排除。
lockd 守护进程
此守护进程支持对NFS 文件的记录锁定操作。lockd 守护进程针对网络锁定管理器(Network
Lock Manager, NLM) 协议管理客户机与服务器之间的RPC 连接。该守护进程通常不使用任
何选项即可启动。可将三个选项与此命令一起使用。请参见lockd(1M) 手册页。可以在命
令行中或通过编辑/etc/default/nfs 中的相应字符串来使用这些选项。以下是可在
/etc/default/nfs 文件中设置的关键字的说明。
NFS 守护进程
132 系统管理指南:网络服务• 2006 年8 月
注– 从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) 手册页。
NFS 守护进程
第6 章• 访问网络文件系统(参考) 133
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)在客户机与服务
器之间的交换方式。该协议要求分别采用 或 格式将
文件的属主属性和组属性作为字符串在NFS 版本4 客户机与NFS 版本4 服务器之间进行交
换。
例如,用户known_user 在NFS 版本4 客户机上具有UID 123456,该客户机的完全限定主机
名为system.example.com。客户机为了向NFS 版本4 服务器发出请求,必须将UID 123456
映射为,然后将此属性发送到NFS 版本4 服务器。NFS 版本4 服务
NFS 守护进程
134 系统管理指南:网络服务• 2006 年8 月
器希望接收 格式的用户和组文件属性。服务器从客户机收到
后,就会将该字符串映射为基础文件系统可以识别的本地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 映射到字符串说明中。
但是请注意,客户机和服务器将以不同的方式对不能识别的字符串做出响应:
如果用户不在服务器上,即使在同一NFS 版本4 域配置中,服务器也会拒绝远程过程调
用(remote procedure call, RPC) 并向客户机返回错误消息。这种情况将限制远程用户可以
执行的操作。
如果用户同时位于客户机和服务器上,但是它们具有的域不匹配,则服务器将拒绝要求
服务器将传入的用户字符串映射为基础文件系统可以识别的整数值的属性修改操作(如
SETATTR)。为了使NFS 版本4 客户机和服务器能够正常运行,其NFS 版本4 域(即@
符号后面的字符串部分)应该匹配。
如果NFS 版本4 客户机不能识别来自服务器的用户名或组名,则客户机无法将字符串映
射为其唯一的ID(整数值)。在这类情况下,客户机会将传入的用户字符串或组字符串
映射为nobody 用户。映射为nobody 将为不同的应用程序带来各种问题。至于NFS 版本4
功能,修改文件属性的操作将会失败。
配置文件和nfsmapid
下面介绍了nfsmapid 守护进程使用/etc/nsswitch.conf 和/etc/resolv.conf 文件的方式:
nfsmapid 使用标准的C 库函数从后端命名服务中请求口令和组信息。这些命名服务由
/etc/nsswitch.conf 文件中的设置控制。对nsswitch.conf 文件的任何更改都会影响
nfsmapid 操作。有关nsswitch.conf 文件的更多信息,请参见nsswitch.conf(4) 手册
页。
为确保NFS 版本4 客户机能够从不同的域挂载文件系统,nfsmapid 将依赖于DNS TXT
资源记录(resource record, RR) _nfsv4idmapdomain 的配置。有关配置_nfsv4idmapdomain
资源记录的更多信息,请参见第136 页中的“nfsmapid 和DNS TXT 记录”。另外,还
要注意以下几点:
应该使用所需的域信息在DNS 服务器上显式配置DNS TXT RR。
为了使resolver 能够找到DNS 服务器并搜索客户机和服务器NFS 版本4 域的TXT 记
录,应该使用所需的参数配置/etc/resolv.conf 文件。
NFS 守护进程
第6 章• 访问网络文件系统(参考) 135
有关更多信息,请参见以下内容:
第136 页中的“优先级规则”
第137 页中的“在Solaris 10 发行版中配置NFS 版本4 缺省域”
resolv.conf(4) 手册页
优先级规则
为了使nfsmapid 能正常工作,NFS 版本4 客户机和服务器必须具有相同的域。为了确保与
NFS 版本4 域匹配,nfsmapid 将遵循以下严格的优先级规则:
1. 守护进程首先从/etc/default/nfs 文件中查找已为NFSMAPID_DOMAIN 关键字指定的
值。如果找到了值,则指定的值将优先于其他任何设置。指定的值被附加到外发属性字
符串上,并与传入属性字符串进行比较。有关/etc/default/nfs 文件中的关键字的更多
信息,请参见第129 页中的“/etc/default/nfs 文件的关键字”。有关过程信息,请参
见第87 页中的“设置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} 项。例如,在域名称空间的不同层
次上,该记录的值可能为:
NFS 守护进程
136 系统管理指南:网络服务• 2006 年8 月
_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 指定的值中获取域名来解决此问题。
有关更多信息,请参见第136 页中的“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],则将看到以下提示:
NFS 守护进程
第6 章• 访问网络文件系统(参考) 137
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 的更多信息,请参见以下内容:
nfsmapid(1M) 手册页
nfs(4) 手册页
第169 页中的“NFS 版本4 中的ACL和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 守护进程
138 系统管理指南:网络服务• 2006 年8 月
注– NFS 版本4 不使用该守护进程。
NFS 命令
必须以超级用户身份运行这些命令才能使其完全生效,但是所有的用户都可以发出信息请
求:
第139 页中的“automount 命令”
第140 页中的“clear_locks 命令”
第140 页中的“mount 命令”
第145 页中的“mountall 命令”
第152 页中的“setmnt 命令”
第146 页中的“share 命令”
第151 页中的“shareall 命令”
第151 页中的“showmount 命令”
第145 页中的“umount 命令”
第146 页中的“umountall 命令”
第150 页中的“unshare 命令”
第151 页中的“unshareall 命令”
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 的输出。
您应该考虑到,调整持续时间还会更改反映对自动挂载程序映射所做更改的速度。取消挂
载文件系统之前,无法查看更改。有关如何修改自动挂载程序映射的说明,请参阅第99 页
中的“修改映射”。
NFS 命令
第6 章• 访问网络文件系统(参考) 139
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 服务器选
择要挂载的路径名。有关详细信息,请参见第86 页中的“如何使用NFS URL挂载NFS 文件
系统”。
注意– 从2.6 到当前发行版的任何Solaris 发行版中包括的mount 命令版本都不会发出有关无
效选项的警告。该命令将默认忽略无法解释的所有选项。请确保验证已使用的所有选项,
以便防止出现意外行为。
NFS 文件系统的mount 选项
下面介绍挂载NFS 文件系统时可跟在-o 标志后面的某些选项。有关完整的选项列表,请参
阅mount_nfs(1M) 手册页。
bg|fg
可以使用这些选项来选择挂载失败时的重试行为。bg 选项将导致挂载试图在后台运
行。fg 选项将导致挂载试图在前台运行。缺省值为fg,对于必须可用的文件系统而言,
这是最佳选择。此选项可防止在挂载完成之前进一步进行处理。bg 是适用于非关键文件
系统的适当选择,因为客户机在等待挂载请求完成的同时可以执行其他处理。
NFS 命令
140 系统管理指南:网络服务• 2006 年8 月
forcedirectio
此选项可提高大型连续数据传输的性能。数据将直接复制到用户缓冲区。不会在客户机
的内核中执行任何缓存操作。缺省情况下,此选项处于关闭状态。
以前,所有写请求都被NFS 客户机和NFS 服务器串行化。NFS 客户机已被修改,允许应
用程序向单个文件发出并发写入以及并发读取和写入。您可以使用forcedirectio 挂载
选项在客户机上启用此功能。使用此选项时,将为已挂载文件系统中的所有文件启用此
功能。还可以通过使用directio() 接口对客户机的单个文件启用此功能。除非启用了此
功能,否则对文件的写入一定是串行化的。而且,如果正在进行并发写入或并发读取和
写入,该文件将不再支持POSIX 语义。
有关如何使用此选项的示例,请参阅第143 页中的“使用mount 命令”。
largefiles
使用此选项,可以在运行Solaris 2.6 发行版的服务器上访问大于2GB的文件。由于只能
在服务器上控制某个大文件是否可以访问,因此在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
选项的缺省行为。
下表介绍了将nosuid 或suid 与devices 或nodevices,以及setuid 或nosetuid 组合的效
果。请注意,在选项的每个组合中,行为由限制性最强的选项确定。
组合选项的行为选项选项选项
与使用nodevices 和
nosetuid 等效
nosuid nosetuid nodevices
与使用nodevices 和
nosetuid 等效
nosuid nosetuid devices
NFS 命令
第6 章• 访问网络文件系统(参考) 141
组合选项的行为选项选项选项
与使用nodevices 和
nosetuid 等效
nosuid setuid nodevices
与使用nodevices 和
nosetuid 等效
nosuid setuid devices
与使用nodevices 和
nosetuid 等效
suid nosetuid nodevices
与使用devices 和
nosetuid 等效
suid nosetuid devices
与使用nodevices 和
setuid 等效
suid setuid nodevices
与使用devices 和
setuid 等效
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 选项挂载的文件系统返回的值,这可
能会使应用程序出现故障或可能导致文件损坏。如果应用程序检查返回值,则路由问题
NFS 命令
142 系统管理指南:网络服务• 2006 年8 月
和其他情况可能仍然会干扰应用程序或导致文件损坏(如果选择soft 选项)。在大多数
情况下,不应该使用soft 选项。如果文件系统是使用hard 选项挂载的且不可用,则使
用该文件系统的应用程序将挂起,直到该文件系统可用为止。
使用mount 命令
请参阅以下示例。
在NFS 版本2 或版本3 中,这两个命令以只读方式从服务器bee 挂载NFS 文件系统。
# mount -F nfs -r bee:/export/share/man /usr/man
# mount -F nfs -o ro bee:/export/share/man /usr/man
在NFS 版本4 中,以下命令行将完成同样的挂载。
# mount -F nfs -o vers=4 -r bee:/export/share/man /usr/man
在NFS 版本2 或版本3 中,即使已挂载了/usr/man,此命令也会使用-O 选项强制在本地
系统上挂载服务器bee 中的手册页。请参见以下内容。
# mount -F nfs -O bee:/export/share/man /usr/man
在NFS 版本4 中,以下命令行将完成同样的挂载。
# mount -F nfs -o vers=4 -O bee:/export/share/man /usr/man
在NFS 版本2 或版本3 中,此命令使用客户机故障转移。
# mount -F nfs -r bee,wasp:/export/share/man /usr/man
在NFS 版本4 中,以下命令行使用客户机故障转移。
# mount -F nfs -o vers=4 -r bee,wasp:/export/share/man /usr/man
注– 在命令行中使用时,列出的服务器必须支持同一版本的NFS 协议。在命令行中运行
mount 时,请不要同时使用版本2 和版本3 服务器。可以同时将这两个服务器与autofs 一
起使用。Autofs 会自动选择最合适的版本2 或版本3 服务器。
下面是将NFS URL与NFS 版本2 或版本3 中的mount 命令结合使用的示例。
# mount -F nfs nfs://bee//export/share/man /usr/man
下面是将NFS URL与NFS 版本4 中的mount 命令结合使用的示例。
# mount -F nfs -o vers=4 nfs://bee//export/share/man /usr/man
为了使客户机允许向文件并发写入以及并发读取和写入,请使用forcedirectio 挂载选
项。下面是一个示例。
NFS 命令
第6 章• 访问网络文件系统(参考) 143
# mount -F nfs -o forcedirectio bee:/home/somebody /mnt
在本示例中,命令将从服务器bee 挂载NFS 文件系统,并对目录/mnt 中的每个文件启用
并发读取和写入。启用对并发读取和写入的支持时,将发生以下情况。
客户机允许应用程序并行写入文件。
缓存在客户机上是禁用的。因此,来自读取和写入的数据将保留在服务器上。更明
确地说,由于客户机不会缓存已读取或写入的数据,因此将从服务器读取应用程序
尚未为其自身缓存的所有数据。客户机的操作系统不会具有此数据的副本。通常,
NFS 客户机将在内核中缓存供应用程序使用的数据。
由于在客户机上禁用了缓存,因此将禁用读前进程和写后进程。读前进程发生在内
核预料应用程序下一步可能请求的数据时。然后,内核将启动提前收集该数据的进
程。内核的目标是在应用程序请求数据之前将数据准备就绪。
客户机使用写后进程增加写吞吐量。数据将被缓存到内存中,而不是在应用程序每
次将数据写入文件时立即启动I/O 操作。随后,数据将被写入磁盘。
很可能,写后进程会允许以较大的块写入数据,或者允许从应用程序异步写入数
据。通常,使用较大块的结果是会增大吞吐量。异步写入允许应用程序处理和I/O 处
理之间有重叠。此外,异步写入还允许存储子系统通过提供更好的I/O 序列来优化该
I/O。同步写入强制在存储子系统上使用可能不是最佳的I/O 序列。
如果应用程序不准备处理未被缓存的数据语义,则性能可能会大大降低。多线程应
用程序可以避免此问题。
注– 如果未启用对并发写入的支持,则将对所有的写入请求进行串行化。串行化请求
时,将发生以下情况。如果正在处理写入请求,则第二个写入请求必须等待第一个写入
请求完成之后才能继续进行。
使用不含参数的mount 命令可以显示客户机上挂载的文件系统。请参见以下内容。
% mount
/ on /dev/dsk/c0t3d0s0 read/write/setuid on Wed Apr 7 13:20:47 2004
/usr on /dev/dsk/c0t3d0s6 read/write/setuid on Wed Apr 7 13:20:47 20041995
/proc on /proc read/write/setuid on Wed Apr 7 13:20:47 2004
/dev/fd on fd read/write/setuid on Wed Apr 7 13:20:47 2004
/tmp on swap read/write on Wed Apr 7 13:20:51 2004
/opt on /dev/dsk/c0t3d0s5 setuid/read/write on Wed Apr 7 13:20:51 20041995
/home/kathys on bee:/export/home/bee7/kathys
intr/noquota/nosuid/remote on Wed Apr 24 13:22:13 2004
NFS 命令
144 系统管理指南:网络服务• 2006 年8 月
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 命令
使用此命令可挂载文件系统表中列出的所有文件系统或特定的一组文件系统。此命令提供
了执行以下操作的方法:
使用-F FSType 选项选择要访问的文件系统类型
NFS 命令
第6 章• 访问网络文件系统(参考) 145
使用-r 选项选择文件系统表中列出的所有远程文件系统
使用-l 选项选择所有本地文件系统
由于所有标记为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 命令
146 系统管理指南:网络服务• 2006 年8 月
注– 有关取消共享文件系统之后再重新共享此系统时NFS 版本4 如何运行的信息,请参阅第
163 页中的“在NFS 版本4 中取消共享和重新共享文件系统”。
特定于非文件系统的share 选项
以下是可以用于-o 标志的一些选项。
rw|ro
pathname 文件系统对所有客户机而言是读写共享还是只读共享。
rw=accesslist
文件系统仅对列出的客户机是读写共享。其他所有请求均被拒绝。从Solaris 2.6 发行版开
始,accesslist 中定义的客户机列表已进行了扩展。有关更多信息,请参见第149 页中的
“使用share 命令设置访问列表”。可以使用此选项来覆盖-ro 选项。
特定于NFS 的share 选项
以下是可以用于NFS 文件系统的选项。
aclok
使用此选项,可以将支持NFS 版本2 协议的NFS 服务器配置为对NFS 版本2 客户机进行
访问控制。如果不使用此选项,则会为所有客户机提供最低访问权限。如果使用此选
项,则客户机具有最高访问权限。例如,在使用-aclok 选项共享的文件系统上,如果某
个用户具有读取权限,则所有用户均可具有读取权限。但是,如果不使用此选项,本该
具有访问权限的客户机也会被拒绝访问。确定是允许最多访问还是最少访问取决于已设
置的安全系统。有关访问控制列表(access control list, ACL) 的更多信息,请参见《System
Administration Guide: Security Services》中的“Using Access Control Lists to Protect Files”。
注– 要使用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 命令
第6 章• 访问网络文件系统(参考) 147
nfs://
nfs://
nfs://
nfs://
>
log=tag
此选项可指定/etc/nfs/nfslog.conf 中的标记,该文件中包含文件系统的NFS 服务器日
志记录配置信息。必须选择此选项才能启用NFS 服务器日志记录。
nosuid
此选项表示应忽略启用setuid 或setgid 模式的所有尝试。NFS 客户机不能创建启用了
setuid 或setgid 位的文件。
public
-public 选项已添加到share 命令中,以启用WebNFS 浏览功能。使用此选项在一台服务
器上只能共享一个文件系统。
root=accesslist
服务器会为列表中的主机提供超级用户访问权限。缺省情况下,服务器不会为任何远程
主机提供超级用户访问权限。如果选定的安全模式不是-sec=sys,则只能在accesslist 中
包括客户机主机名。从Solaris 2.6 发行版开始,accesslist 中定义的客户机列表已进行了扩
展。有关更多信息,请参见第149 页中的“使用share 命令设置访问列表”。
注意– 授予其他主机超级用户访问权限会涉及广泛的安全问题。请慎用-root= 选项。
root=client_name
client_name 值可用于AUTH_SYS 验证,以便对照exportfs(1B) 中提供的地址列表来检查
客户机的IP 地址。如果找到匹配项,则可以root 访问权限访问共享的文件系统。
root=host_name
对于安全NFS 模式(如AUTH_SYS 或RPCSEC_GSS),服务器会对照访问列表派生的基
于主机的主体名称列表来检查客户机的主体名称。客户机主体名称的通用语法为
。对于Kerberos V,语法为。使用
host_name 值时,访问列表中的客户机必须具有某个主体名称的凭证。对于Kerberos V,
客户机必须具有其 主体名称的有效密钥表项。有关更
多信息,请参见《System Administration Guide: Security Services》中的“Configuring
Kerberos Clients”。
sec=mode[:mode]
mode 选择获取对文件系统的访问所需的安全模式。缺省情况下,安全模式为UNIX 验
证。可以指定多种模式,但是每个命令行一次只能使用一种安全模式。每个-mode 选项
NFS 命令
148 系统管理指南:网络服务• 2006 年8 月
都应用于所有后续的-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 发行版开始,访问列表还可以包括域名、子网号
或拒绝访问的项。由于不必更改名称空间或维护较长的客户机列表,这些扩展简化了单一
服务器上的文件访问控制。
以下命令为大多数系统提供只读访问权限,但是允许rose 和lilac 进行读写访问:
# share -F nfs -o ro,rw=rose:lilac /usr/src
在下一面的示例中,为eng 网络组中的任意主机指定了只读访问权限。专门为客户机rose
提供了读写访问权限。
# share -F nfs -o ro=eng,rw=rose /usr/src
注– 不能同时指定不带参数的rw 和ro。如果未指定读写选项,则缺省情况下会为所有客户
机指定读写访问权限。
要使多台客户机共享一个文件系统,必须在同一行中键入所有选项。针对同一对象多次调
用share 命令时,将仅“记住”最后一个运行的命令。以下命令为三台客户机系统提供读写访
问权限,但是仅为rose 和tulip 提供以root 身份对文件系统的访问。
# share -F nfs -o rw=rose:lilac:tulip,root=rose:tulip /usr/src
共享使用多种验证机制的文件系统时,请确保在正确的安全模式之后包括
-ro、-ro=、-rw、-rw=、-root 和-window 选项。在本示例中,会为名为eng 的网络组中的
所有主机选择UNIX 验证。这些主机只能以只读模式挂载文件系统。如果主机tulip 和
lilac 使用Diffie-Hellman 验证,则它们可以以读写模式挂载文件系统。使用这些选项时,
即使主机tulip 和lilac 不使用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
NFS 命令
第6 章• 访问网络文件系统(参考) 149
在本示例中,单个“.” 与通过NIS 或NIS+ 名称空间匹配的所有主机相匹配。从这些名称服
务中返回的结果中不包括域名。“.eng.example.com” 项与所有使用DNS 进行名称空间解析
的主机相匹配。DNS 始终返回全限定主机名。因此,如果使用了DNS 和其他名称空间的组
合,则需要较长的项。
通过在实际网络号或网络名的前面添加“@”,可以在访问列表中使用子网号。此字符可将网
络名与网络组或全限定主机名区分开来。必须在/etc/networks、NIS 或NIS+ 名称空间中标
识子网。如果192.168 子网已标识为eng 网络,则以下各项具有相同效果:
# share -F nfs -o /export/share/man
# share -F nfs -o /export/share/man
# share -F nfs -o /export/share/man
最后两项表明无需包括完整的网络地址。
如果网络前缀不是按字节对齐,即与无类域间路由(Classless Inter-Domain Routing, CIDR) 一
样,则可以在命令行中明确指定掩码长度。掩码长度可通过在网络名或网络号后添加一条
斜杠和地址前缀中的有效位数进行定义。例如:
# share -f nfs -o /export/share/man
# share -F nfs -o /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 命令
150 系统管理指南:网络服务• 2006 年8 月
注– 有关取消共享文件系统之后再重新共享此系统时NFS 版本4 如何运行的信息,请参阅第
163 页中的“在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 命令
此命令可显示以下内容之一:
已经远程挂载了通过NFS 服务器共享的文件系统的所有客户机
仅由客户机挂载的文件系统
共享的文件系统以及客户机访问信息
注– showmount 命令仅显示NFS 版本2 和版本3 的导出内容,而不显示NFS 版本4 的导出内
容。
此命令的语法如下:
showmount [ -ade ] [ hostname ]
NFS 命令
第6 章• 访问网络文件系统(参考) 151
-a 列显所有远程挂载的列表。每项都包括客户机名称和目录。
-d 列显由客户机远程挂载的目录的列表。
-e 列显共享或导出的文件的列表。
hostname 选择要从其中收集信息的NFS 服务器。
如果未指定hostname,则会对本地主机进行查询。
以下命令列出了所有客户机以及这些客户机已挂载的本地目录:
# showmount -a bee
lilac:/export/share/man
lilac:/usr/src
rose:/usr/src
tulip:/export/share/man
以下命令列出了已挂载的目录:
# showmount -dbee
/export/share/man
/usr/src
以下命令列出了已共享的文件系统:
# showmount -e bee
/usr/src (everyone)
/export/share/man eng
setmnt 命令
此命令可创建/etc/mnttab 表。mount 和umount 命令会查阅该表。通常不必手动运行此命
令,因为它会在系统引导时自动运行。
NFS 命令
152 系统管理指南:网络服务• 2006 年8 月
用于解决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
7199491940 0 0 0 58478624 33
Connectionless:
calls badcalls nullrecv badlen xdrcall dupchecks dupreqs
73753609 0 0 0 0 987278 7254
用于解决NFS 问题的命令
第6 章• 访问网络文件系统(参考) 153
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
用于解决NFS 问题的命令
154 系统管理指南:网络服务• 2006 年8 月
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:
用于解决NFS 问题的命令
第6 章• 访问网络文件系统(参考) 155
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 活动。
在两组统计信息中,了解badcalls 或calls 的平均数以及每周的调用次数有助于确定问
题。badcalls 值报告来自客户机的错误消息数。该值可以表明网络硬件问题。
某些连接会在磁盘上执行写操作。这些统计信息的突然增加可能表明出现了问题,应该对
这一现象进行调查。对于NFS 版本2 的统计信息,要注意的连接包括setattr、write、
create、remove、rename、link、symlink、mkdir 和rmdir。对于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
用于解决NFS 问题的命令
156 系统管理指南:网络服务• 2006 年8 月
00010fb0 _start (0, 0, 0, 0, 0, 0) + 5c
此示例显示进程正在等待新的连接请求,这是正常响应。如果栈表明在发出请求之后进程
仍在轮询,则此进程可能会被挂起。请遵照第116 页中的“如何重新启动NFS 服务”中的
说明来解决此问题。请检查第111 页中的“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 程序编号
特定程序的版本号
正在使用的传输协议
RPC 服务的名称
RPC 服务的属主
以下示例收集有关正在服务器上运行的RPC 服务的信息。此命令生成的文本将通过sort 命
令过滤,以使输出更具可读性。列出RPC 服务的几行已从本示例中删除。
用于解决NFS 问题的命令
第6 章• 访问网络文件系统(参考) 157
% 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
用于解决NFS 问题的命令
158 系统管理指南:网络服务• 2006 年8 月
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 ]
用于解决NFS 问题的命令
第6 章• 访问网络文件系统(参考) 159
-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...)
以上示例表示一个正常响应。如果在发出新连接请求之后该响应未发生变化,则此进程可
能会被挂起。请遵照第116 页中的“如何重新启动NFS 服务”中的说明来修复被挂起的程
序。请检查第111 页中的“NFS 疑难解答过程”中的说明来充分验证问题是否是程序已挂
起。
NFS OverRDMA
从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)的关系。
NFS Over RDMA
160 系统管理指南:网络服务• 2006 年8 月
图6–1RDMA与其他协议的关系
由于RDMA是NFS 的缺省传输协议,因此,在客户机或服务器上使用RDMA时不需要特殊
的share 或mount 选项。现有的自动挂载程序映射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) 手册页和第140 页中的
“mount 命令”。
注– 用于InfiniBand 的RDMA会使用IP 寻址格式和IP 查找基础结构来指定对等点。但是,
由于RDMA是单独的协议栈,因此,它没有完全实现所有的IP 语义。例如,RDMA不会使
用IP 寻址来与对等点通信。因此,RDMA可能会跳过基于IP 地址的各种安全策略的配置。
但是,不会跳过NFS 和RPC 管理策略,如mount 限制和安全RPC。
NFS 服务如何工作
以下各节介绍了NFS 软件的一些复杂功能。请注意,本节说明的某些功能仅适用于NFS 版
本4。
第162 页中的“NFS 中的版本协商”
第162 页中的“NFS 版本4 的功能”
第171 页中的“UDP和TCP 协商”
第171 页中的“协商文件传输大小”
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 161
第171 页中的“如何挂载文件系统”
第173 页中的“挂载时-public 选项和NFS URL的作用”
第173 页中的“客户端故障转移”
第175 页中的“大文件”
第175 页中的“NFS 服务器日志如何工作”
第176 页中的“WebNFS 服务如何工作”
第177 页中的“有关Web 浏览器使用的WebNFS 限制”
第177 页中的“安全NFS 系统”
第178 页中的“安全RPC”
注– 如果系统启用了区域并且您要在非全局区域中使用此功能,请参见《System
Administration Guide: Solaris Containers-Resource Management and 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。请参见第129 页中的
“/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)
手册页。
有关过程信息,请参阅第87 页中的“设置NFS 服务”。
NFS 版本4 的功能
NFS 版本4 已进行了许多更改。本节提供了这些新增功能的说明。
第163 页中的“在NFS 版本4 中取消共享和重新共享文件系统”
NFS 服务如何工作
162 系统管理指南:网络服务• 2006 年8 月
第163 页中的“NFS 版本4 中的文件系统名称空间”
第165 页中的“NFS 版本4 中的可变文件句柄”
第166 页中的“NFS 版本4 中的客户机恢复”
第167 页中的“NFS 版本4 中的OPEN 共享支持”
第168 页中的“NFS 版本4 的委托”
第169 页中的“NFS 版本4 中的ACL和nfsmapid”
第174 页中的“NFS 版本4 中的客户端故障转移”
注– 从Solaris 10 发行版开始,NFS 版本4 不支持LIPKEY/SPKM 安全特性。另外,NFS 版本4
也不会使用mountd、nfslogd 和statd 守护进程。
有关与使用NFS 版本4 相关的过程信息,请参阅第87 页中的“设置NFS 服务”。
在NFS 版本4 中取消共享和重新共享文件系统
如果同时使用NFS 版本3 和版本4,则客户机尝试访问一个已经取消共享的文件系统时,服
务器会以错误代码响应。但是,如果使用NFS 版本3,则服务器会保留客户机在取消共享文
件系统之前所获取的任何锁定。这样,重新共享文件系统时,NFS 版本3 客户机即可访问
此文件系统,就好像从未取消共享此文件系统一样。
如果使用NFS 版本4,则取消共享文件系统时,将破坏此文件系统中任何打开的文件或文件
锁定的所有状态。如果客户机尝试访问这些文件或锁定,则会收到一条错误消息。通常会
将此错误消息作为I/O 错误报告给应用程序。但是请注意,通过重新共享当前共享的文件
系统来更改选项不会破坏服务器上的任何状态。
有关信息,请参阅第166 页中的“NFS 版本4 中的客户机恢复”或参见unshare_nfs(1M) 手
册页。
NFS 版本4 中的文件系统名称空间
NFS 版本4 服务器可创建并维护一个伪文件系统,此系统使客户机能够对服务器上所有导出
的对象进行无缝访问。在NFS 版本4 之前,不存在伪文件系统。那时的客户机会强制挂载
每个共享服务器文件系统来进行访问。请参考以下示例。
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 163
图6–2服务器文件系统和客户机文件系统的视图
请注意,客户机无法看到payroll 目录和nfs4x 目录,因为这些目录未被导出,也没有通向
导出目录。但是,客户机可以看到local 目录,因为local 是一个导出的目录。客户机还可
看到projects 目录,因为projects 通向导出目录nfs4。因此,未显式导出的服务器名称空
间部分会与伪文件系统桥接,该系统仅显示导出目录和那些通向服务器导出目录的目录。
伪文件系统是服务器创建的仅包含目录的结构。伪文件系统允许客户机浏览导出文件系统
的分层结构。因此,客户机的伪文件系统视图限制为仅显示通向导出文件系统的路径。
以前的NFS 版本不允许客户机在未挂载每个文件系统的情况下遍历服务器文件系统。但
是,在NFS 版本4 中,服务器名称空间可进行以下操作:
NFS 服务如何工作
164 系统管理指南:网络服务• 2006 年8 月
将客户机的文件系统视图限制为仅显示通向服务器导出目录的目录。
使客户机能够对服务器导出目录进行无缝访问,而不要求客户机挂载每个基础文件系
统。请参见前面的示例。但是请注意,某些操作系统可能会要求客户机挂载每个服务器
文件系统。
由于与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 客户机必须在服务器使用可变文件句柄时支持
这些句柄。具体来说,当服务器通知客户机文件句柄可变时,客户机必须高速缓存路径名
和文件句柄之间的映射。客户机会一直使用可变文件句柄,直到句柄过期为止。句柄过期
后,客户机会执行以下操作:
刷新引用此文件句柄的高速缓存信息
搜索此文件的新文件句柄
重试此操作
注– 服务器会始终通知客户机哪些文件句柄为持久性句柄,哪些文件句柄为可变句柄。
可变文件句柄可能会由于以下任一原因过期:
关闭文件
迁移文件句柄的文件系统
客户机重命名文件
服务器重新引导
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 165
请注意,如果客户机无法找到新的文件句柄,则会在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
请注意,在宽延期内,可以继续执行不打开文件或设置文件锁定的命令。例如,命令ls 和
cd 不会打开文件或设置文件锁定。因此,这些命令不会暂停执行。但是,cat 之类可打开文
件的命令会暂停执行,直到宽延期结束为止。
宽延期结束后,会显示以下消息。
NFS server recovery ok.
NFS 服务如何工作
166 系统管理指南:网络服务• 2006 年8 月
现在,客户机即可向服务器发送新的打开和锁定请求。
客户机恢复会因为各种原因而失败。例如,如果服务器重新引导后存在网络分区,则客户
机可能无法在宽延期结束之前在服务器上重新建立其状态。宽延期结束后,服务器不允许
客户机重新建立其状态,因为新的状态操作可能会产生冲突。例如,新的文件锁定可能会
与客户机尝试恢复的旧的文件锁定发生冲突。发生这种情况时,服务器会将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 信号的缺省操作是终止此进程。
要从此状态恢复,必须重新启动所有在失败时打开文件的应用程序。请注意,可能会出现
以下情况。
一些没有重新打开文件的进程可能会收到I/O 错误消息。
在恢复失败之后已重新打开文件或执行打开操作的其他进程可顺利访问文件。
因此,一些进程可以访问其他进程无法访问的特定文件。
NFS 版本4 中的OPEN 共享支持
NFS 版本4 协议提供了几种文件共享模式,客户机可以使用这些模式控制其他客户机对文件
的访问。客户机可以指定以下内容:
DENY_NONE 模式,用于允许其他客户机对文件进行读写访问。
DENY_READ 模式,用于拒绝其他客户机对文件进行读取访问。
DENY_WRITE 模式,用于拒绝其他客户机对文件进行写入访问。
DENY_BOTH 模式,用于拒绝其他客户机对文件进行读写访问。
Solaris NFS 版本4 服务器完全实现了这些文件共享模式。因此,如果客户机尝试打开文件的
方式与当前共享模式冲突,则服务器会通过使操作失败来拒绝此尝试。如果这类尝试在打
开或创建操作开始时失败,则Solaris NFS 版本4 客户机会接收到一条协议错误消息。此错
误会映射为应用程序错误EACCES。
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 167
尽管此协议提供了几种共享模式,但目前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 不包括打开过
程,所以仅会在客户机尝试读取、写入或锁定文件之后检测冲突。服务器对这些冲突的响
应也会有所不同。例如:
对于NFS 版本3,服务器会返回JUKEBOX 错误消息,这会导致客户机停止访问请求并在
稍后重试。客户机会列显消息File unavailable。
NFS 服务如何工作
168 系统管理指南:网络服务• 2006 年8 月
对于NFS 版本2,因为不存在与JUKEBOX 错误消息等效的消息,所以服务器不做任何响
应,这会导致客户机等待然后再重试。客户机会列显消息NFS server not responding。
解决了委托冲突之后,便不会存在这些情况。
缺省情况下,会启用服务器委托。可以通过修改/etc/default/nfs 文件来禁用委托。有关
过程信息,请参阅第89 页中的“如何在服务器上选择不同版本的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项中存在的用户或组不能映射为客户机上的有效用户或组,则不允许
用户读取客户机上的ACL。
例如,在发出ls -l 命令后,由于一些文件的用户ID 或组ID 等ACL实体不能从服务器
映射到客户机,您将收到错误消息Permission denied。ID 映射器无法映射ACL 中的用
户或组。如果ID 映射器能够映射该用户或组,则在通过ls -l 生成的文件列表中,权限
后面会显示一个加号(+)。例如:
% ls -l
-rw-r--rw-+ 1 luis staff 11968 Aug 12 2005 foobar
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 169
类似地,getfacl 命令可以针对相同的原因返回Permission denied 错误消息。有关此命
令的更多信息,请参见getfacl(1) 手册页。
如果不能将在客户机上设置的任何ACL项中的用户ID 或组ID 映射为服务器上的有效用
户ID 或组ID,则setfacl 命令可能会失败并返回Permission denied 错误消息。
如果客户机和服务机的NFSMAPID_DOMAIN 值不匹配,则ID 映射将失败。有关更多
信息,请参见第129 页中的“/etc/default/nfs 文件的关键字”。
避免ACL 出现ID 映射问题
为避免ID 映射问题,请执行以下操作:
确保在/etc/default/nfs 文件中正确设置了NFSMAPID_DOMAIN 的值。
确保ACL项中的所有用户和组ID 同时存在于NFS 版本4 客户机和服务器上。
检查未映射的用户ID 或组ID
要确定是否有无法在服务器或客户机上映射的用户或组,请使用以下脚本:
#! /usr/sbin/dtrace -Fs
sdt:::nfs4-acl-nobody
{
printf("validate_idmapping: (%s) in the ACL could not be mapped!",
stringof(arg0));
}
注– 此脚本中使用的探测器名称是一个接口,该接口以后可以更改。有关更多信息,请参
见《Solaris Dynamic Tracing Guide》中的“Stability Levels”。
有关ACL 或nfsmapid 的其他信息
请参见以下内容:
《System Administration Guide: Security Services》中的“Protecting FilesWith ACLs (Task
Map)”
第134 页中的“nfsmapid 守护进程”
NFS 服务如何工作
170 系统管理指南:网络服务• 2006 年8 月
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 的最大传输大小已经增加到1MB。
如何挂载文件系统
以下说明适用于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
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 171
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 服务如何工作
172 系统管理指南:网络服务• 2006 年8 月
注– NFS 版本4 提供对可变文件句柄的支持。有关更多信息,请参阅第165 页中的“NFS 版
本4 中的可变文件句柄”。
挂载时-public 选项和NFS URL的作用
使用-public 选项可能造成导致挂载失败的条件。添加NFS URL也可产生导致失败的情
形。以下列表介绍了如何使用这些选项挂载文件系统的具体细节。
带有NFS URL的public 选项-强制使用公共文件句柄。如果系统不支持公共文件句柄,
则挂载将失败。
带有常规路径的public 选项-强制使用公共文件句柄。如果系统不支持公共文件句柄,
则挂载将失败。
仅NFS URL-使用公共文件句柄(如果在NFS 服务器上启用了此文件句柄)。如果在使
用公共文件句柄时挂载失败,则使用MOUNT 协议尝试挂载。
仅常规路径-请不要使用公共文件句柄。而应使用MOUNT 协议。
客户端故障转移
通过使用客户端故障转移,NFS 客户机可以识别出使相同数据可用的多个服务器,并且在
当前服务器不可用时可以切换到备用服务器。如果发生以下情况之一,则文件系统就会变
得不可用。
如果文件系统连接到的服务器崩溃
如果服务器过载
如果出现网络故障
在上述情况下执行的故障转移通常对用户是透明的。因此,故障转移可以随时进行,而不
会中断客户机上正在运行的进程。
故障转移要求采用只读方式挂载文件系统。文件系统必须相同,故障转移才能成功进行。
有关使文件系统相同的因素的说明,请参见第174 页中的“什么是复制的文件系统?”。
静态文件系统或不经常被更改的文件系统是故障转移的最佳候选系统。
您不能对同一NFS 挂载同时使用CacheFS 和客户端故障转移。系统针对每个CacheFS 文件
系统存储了额外信息。故障转移期间不能更新此信息,因此挂载文件系统时只能使用这两
个功能之一。
需要为每个文件系统建立的副本数目取决于许多因素。理想的情况是,应该至少具有两个
服务器。每个服务器都应该支持多个子网。此设置比每个子网上具有唯一一个服务器更
好。该过程要求检查列出的每个服务器。因此,列出的服务器越多,每个挂载的速度就越
慢。
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 173
故障转移术语
要完全领会该过程,需要了解两个术语。
故障转移-从支持复制的文件系统的服务器列表中选择服务器的过程。通常,使用已排
序列表中的下一个服务器,除非该服务器无法做出响应。
重映射-即使用新的服务器。在正常使用中,客户机在远程文件系统上存储每个活动文
件的路径名。在重映射期间,系统将评估这些路径名以在新的服务器上找出这些文件。
什么是复制的文件系统?
为了实现故障转移,当其中每个文件大小都相同且文件大小或文件类型与原始文件系统相
同时,可以将这样的文件系统称为副本。不考虑权限、创建日期和其他文件属性。如果文
件大小或文件类型不同,则重映射将失败,且该过程将挂起,直到旧的服务器可用为止。
在NFS 版本4 中,该行为是不同的。请参见第174 页中的“NFS 版本4 中的客户端故障转移
”。
可以使用rdist、cpio 或其他文件传输机制来维护复制的文件系统。由于更新复制的文件系
统会导致不一致,因此,为实现最佳效果应考虑以下预防措施:
在安装新版本的文件之前,先重命名旧版本的文件
在夜间运行更新,此时客户机使用率较低
使更新始终很小
将副本数目降到最少
故障转移和NFS 锁定
某些软件包需要对文件进行读取锁定。为防止这些产品被破坏,允许对只读文件系统进行
读取锁定,但是读取锁定仅对客户端是可见的。这些锁定在重映射后不会发生变化,因为
服务器不“知晓”有关锁定的信息。由于文件不会发生更改,因此您不需要在服务器端锁定
文件。
NFS 版本4 中的客户端故障转移
在NFS 版本4 中,如果由于文件大小不同或文件类型不同而无法建立副本,则将发生以下
情况。
文件被标记为停用。
列显警告。
应用程序收到系统调用故障信息。
注– 如果重新启动应用程序并再次尝试访问该文件,则应该会成功。
在NFS 版本4 中,您不会再收到因不同大小的目录而导致的复制错误。在以前的NFS 版本
中,这种情况被视为错误且会阻碍重映射过程。
NFS 服务如何工作
174 系统管理指南:网络服务• 2006 年8 月
此外,在NFS 版本4 中,如果目录读取操作未成功,则将由列出的下一个服务器执行该操
作。在以前的NFS 版本中,未成功的读取操作将导致重映射失败且该过程挂起,直到原始
服务器可用为止。
大文件
从Solaris 2.6 发行版开始,Solaris OS 支持超过2GB的文件。缺省情况下,UFS 文件系统是
使用-largefiles 选项挂载的,因而支持此新功能。以前的发行版不能处理此大小的文件。
有关说明,请参见第84 页中的“如何在NFS 服务器上禁用大文件”。
如果服务器的文件系统是使用-largefiles 选项挂载的,则Solaris 2.6 NFS 客户机可以访问
大文件,而不需进行更改。但是,并不是所有的Solaris 2.6 命令都可以处理这些大文件。有
关可处理大文件的命令的列表,请参见largefile(5)。不能支持具有大文件扩展的NFS 版本
3 协议的客户机不能访问任何大文件。尽管运行Solaris 2.5 发行版的客户机可以使用NFS 版
本3 协议,但是该发行版不提供大文件支持。
NFS 服务器日志如何工作
NFS 服务器日志记录提供NFS 读写记录,以及修改文件系统的操作记录。此数据可用于跟
踪对信息的访问。此外,记录可以提供用于度量信息重要性的定量方法。
访问启用日志记录的文件系统时,内核会将原始数据写入缓冲区文件。此数据包括以下内
容:
时间标记
客户机IP 地址
申请者的UID
正在访问的文件对象或目录对象的文件句柄
已执行操作的类型
nfslogd 守护进程会将此原始数据转换为日志文件中存储的ASCII 记录。转换期间,IP 地址
将被修改为主机名,UID 将被修改为登录名(如果已启用的名称服务可以找到匹配项)。
文件句柄也被转换为路径名。为了完成转换,该守护进程将跟踪文件句柄并在单独的文件
句柄到路径表中存储信息。这样,每次访问文件句柄时,就不必再次识别路径了。由于在
nfslogd 关闭时不会在文件句柄到路径表中对映射进行任何更改,因此必须始终使该守护进
程保持运行状态。
注– NFS 版本4 不支持服务器日志记录。
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 175
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 协议
中使用的多组件查找功能的扩展。
NFS 服务如何工作
176 系统管理指南:网络服务• 2006 年8 月
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 浏览不运行CGI 脚本。因此,带有活动Web 站点(使用许多CGI 脚本)的文件系统
可能不适用于NFS 浏览。
浏览器可能会启动不同查看器来处理不同文件格式的文件。如果可以通过文件名来确定
文件类型,则通过NFS URL访问这些文件可以启动外部查看器。使用NFS URL时,浏览
器应该识别标准MIME 类型的任何文件扩展名。WebNFS 软件不会为了确定文件类型而
在文件内部进行检查。因此,确定文件类型的唯一方法就是通过文件扩展名。
NFS 浏览不能利用服务器端图像地图(可单击的图像)。但是,NFS 浏览可以利用客户
端图像地图(可单击的图像),因为URL是使用位置定义的。不需要来自文档服务器的
任何其他响应。
安全NFS 系统
NFS 环境是用于在具有不同计算机体系结构和操作系统的网络中共享文件系统的一种强大
而便捷的方式。但是,这些通过NFS 操作使文件系统共享非常便利的功能同时还会造成一
些安全问题。以前,大多数NFS 实现使用UNIX(或AUTH_SYS)验证,但是也可以使用
更强大的验证方法(如AUTH_DH)。使用UNIX 验证时,NFS 服务器通过验证发出请求的
计算机(而不是用户)来验证文件请求。因此,客户机用户可以运行su 并模仿文件的属
主。如果使用DH验证,则NFS 服务器将验证用户,这使这类模仿非常困难。
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 177
凭借超级用户权限和对网络编程的了解,任何人都可以将任意数据引入网络,并从网络中
提取任何数据。最危险的攻击就是涉及数据引入的那些攻击。例如,通过生成适当的包或
通过记录“会话”并稍候重放来模仿用户。这些攻击将影响数据的完整性。涉及被动窃听
(仅侦听网络通信流量,而不模仿任何人)的攻击不是很危险,因为不会损害数据完整
性。用户可通过对通过网络发送的数据进行加密来保护敏感信息的保密性。
解决网络安全问题的常见方法是针对每个应用程序都单独制定解决方案。更好的方法是在
涉及所有应用程序的层上实现标准验证系统。
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 将密钥存储在公
钥映射中。这些映射包含所有潜在用户的公钥和私钥。有关如何设置映射的更多信息,请
参见《System Administration Guide: Naming and Directory Services (DNS, NIS, and LDAP)》。
NFS 服务如何工作
178 系统管理指南:网络服务• 2006 年8 月
DH验证的安全性依赖于发件人加密当前时间的能力,随后收件人可以对该时间进行解密,
并对照自己的时钟进行检查。时间标记是使用DES 进行加密的。使此方案正常工作的要求
如下所示:
两个代理必须就当前时间达成一致。
发件人和收件人必须使用相同的加密密钥。
如果网络运行时间同步程序,则系统将自动同步客户机和服务器上的时间。如果时间同步
程序不可用,则可以使用服务器的时间(而不是网络时间)来计算时间标记。启动RPC 会
话之前,客户机将询问服务器时间,然后计算其自己的时钟与服务器时钟之间的时间差
值。计算时间标记时会使用该差值来调整客户机的时钟。如果客户机与服务器的时钟未同
步,则服务器将开始拒绝客户机的请求。客户机上的DH验证系统将与服务器重新进行同
步。
客户机和服务器使用同一个加密密钥,具体方法是:生成一个随机的对话密钥(也称为会
话密钥)并使用公钥密码学推导公用密钥。公用密钥是只有客户机和服务器才能推导的密
钥。对话密钥用于加密和解密客户机的时间标记。公用密钥用于加密和解密对话密钥。
KERB 验证
Kerberos 是MIT 开发的验证系统。Kerberos 提供各种加密类型,包括DES。Kerberos 支持不
再作为安全RPC 的一部分来提供,但是从Solaris 9 发行版开始,包括服务器端和客户端实
现。有关Kerberos 验证实现的更多信息,请参见《System Administration Guide: Security
Services》中的第20 章,“Introduction to the Kerberos Service”。
在NFS 中使用安全RPC
如果计划使用安全RPC,请注意以下几点:
如果在周围无人的情况下服务器崩溃(例如,在断电后),则存储在系统中的所有私钥
都将被删除。此时,没有进程可以访问安全网络服务或挂载NFS 文件系统。重新引导期
间的重要进程通常以root 身份运行。因此,如果已妥善存储了超级用户的私钥,但没有
人可以键入该私钥的解密口令,则这些进程可以正常工作。keylogin -r 允许root 在
keyserv 读取的/etc/.rootkey 中存储明文形式的私钥。
某些系统以单用户模式引导,届时控制台上会显示超级用户登录shell,但不显示口令提
示。在这类情况下,物理安全性是非常必要的。
无盘计算机引导并不是绝对安全的。他人可以模拟引导服务器并引导不正当的内核,例
如,在远程计算机上记录您的私钥。安全NFS 系统仅在内核和密钥服务器都处于运行状
态之后,才会提供保护。否则,无法验证引导服务器提供的回复。此限制可能是严重问
题,不过,只有使用内核源代码的复杂攻击才能利用此限制。此外,犯罪行为会留下证
据。如果轮询网络查找引导服务器,则会发现不正当引导服务器的位置。
大多数setuid 程序都归root 所有。如果root 的私钥存储在/etc/.rootkey 中,则这些程
序会正常工作。但是,如果用户拥有setuid 程序,则setuid 程序可能始终无法正常工
作。例如,假设setuid 程序归dave 所有,并且在引导计算机之后dave 未登录计算机。
在这种情况下,该程序无法访问安全网络服务。
NFS 服务如何工作
第6 章• 访问网络文件系统(参考) 179
如果登录远程计算机(使用login、rlogin 或telnet)并且使用keylogin 获取访问权
限,则可以访问您的帐户。原因是您的私钥会被传递给该计算机的密钥服务器,该服务
器随后会存储您的私钥。只有在不信任远程计算机的情况下才考虑使用此过程。但是,
如果存在疑问,请勿在远程计算机要求口令时登录远程计算机。请使用NFS 环境挂载与
远程计算机共享的文件系统。此外,也可以使用keylogout 从密钥服务器中删除私钥。
如果使用-o sec=dh 选项共享起始目录,则远程登录可能是个问题。如果未将
/etc/hosts.equiv 或~/.rhosts 文件设置为提示输入口令,则将成功登录。但是,用户
不能访问其起始目录,因为没有在本地进行验证。如果系统提示用户输入口令,则当该
口令与网络口令匹配时,用户有权访问其起始目录。
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 ]
Autofs 映射
180 系统管理指南:网络服务• 2006 年8 月
mount-point mount-point 是目录的全(绝对)路径名。如果目录不存在,则autofs 将创
建该目录(如果可能)。如果目录存在且不为空,则在该目录上挂载会隐
藏该目录的内容。在这种情况下,autofs 将发出警告。
作为挂载点的表示法/- 指示此特定映射是直接映射。该表示法还表示没
有特定的挂载点与该映射关联。
map-name map-name 是autofs 用于查找位置说明或挂载信息的映射。如果名称前面
有一个斜杠(/),则autofs 会将该名称解释为本地文件。否则,autofs 会使
用在名称服务转换器配置文件(/etc/nsswitch.conf) 中指定的搜索项来搜
索挂载信息。特殊映射还可用于/net。有关更多信息,请参见第181 页中
的“挂载点/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 使用。
Autofs 映射
第6 章• 访问网络文件系统(参考) 181
使用/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 选项的
信息,请参见第102 页中的“使用CacheFS 访问NFS 文件系统”。
Autofs 映射
182 系统管理指南:网络服务• 2006 年8 月
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 映射中包含的选项将被任
何其他映射中的相应项所覆盖。
有关与此类型的映射关联的其他重要功能,请参见第189 页中的“Autofs 如何为客户机选择
最近的只读文件(多个位置)”。
挂载点/−
在示例6–3 中,挂载点/- 通知autofs 不要将auto_direct 中的项与任何特定挂载点关联。间
接映射使用在auto_master 文件中定义的挂载点。直接映射使用在已命名映射中指定的挂载
点。请记住,在直接映射中,关键字或挂载点是全路径名。
NIS 或NIS+ auto_master 文件只能具有一个直接映射项,因为在名称空间中挂载点必须是唯
一的值。作为本地文件的auto_master 文件可以具有任意数目的直接映射项(如果这些项不
重复)。
Autofs 间接映射
间接映射使用关键字的替代值在客户机上的挂载点与服务器上的目录之间建立关联。间接
映射对于访问特定文件系统(如起始目录)非常有用。auto_home 映射便是间接映射。
间接映射中的行具有以下通用语法:
Autofs 映射
第6 章• 访问网络文件系统(参考) 183
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)都可以从使用特定主映射(引用上一个示例中的映射的主映射)设置的任何计算机
访问此路径。
Autofs 映射
184 系统管理指南:网络服务• 2006 年8 月
在上述情况下,用户linda 可以在其中的任何一台计算机上运行login 或rlogin,并且已为
她挂载了起始目录。
而且,此时Linda 还可以键入以下命令:
% cd~d avid
autofs 将为她挂载David 的起始目录(如果允许所有权限)。
注– 自动挂载程序映射之间不会出现任何选项关联。添加到自动挂载程序映射中的任何选项
将覆盖以前搜索到的映射中列出的所有选项。例如,将使用任何其他映射中对应的项覆盖
auto_master 映射中包括的选项。
在没有名称服务的网络中,必须更改网络中所有系统上的所有相关文件(如/etc/passwd)
以允许Linda 访问其文件。在运行NIS 的网络中,应在NIS 主服务器上进行更改并将相关的
数据库传播到从属服务器。在运行NIS+ 的网络中,执行更改后会自动将相关的数据库传播
到从属服务器。
Autofs 如何工作
Autofs 是一项可自动挂载相应文件系统的客户端服务。以下是协同工作以完成自动挂载的
组件:
automount 命令
autofs 文件系统
automountd 守护进程
自动挂载服务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 如何工作
第6 章• 访问网络文件系统(参考) 185
以下是有关autofs 工作方式的简要概述。
自动挂载守护进程automountd 是在引导时由服务svc:/system/filesystem/autofs 启动的。
请参见图6–3。此服务还运行automount 命令,后者读取主映射并安装autofs 挂载点。有关
更多信息,请参见第187 页中的“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 工具创建映射,以满足环境的需要。请参见第195 页中的“
修改Autofs 导航网络的方式(修改映射)”。
Autofs 如何工作
186 系统管理指南:网络服务• 2006 年8 月
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
Autofs 如何工作
第6 章• 访问网络文件系统(参考) 187
#
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 选项。有关此限制的说明,请参阅第188 页中的
“Autofs 取消挂载”。
Autofs 取消挂载
一段空闲时间后将按相反的顺序(与挂载顺序相反)执行取消挂载过程。如果分层结构中
的较高层上的某个目录处于繁忙状态,则只取消挂载该目录下面的文件系统。在取消挂载
过程中,将先删除所有触发节点,然后再取消挂载文件系统。如果文件系统处于繁忙状
态,则取消挂载将失败并将重新安装触发节点。
Autofs 如何工作
188 系统管理指南:网络服务• 2006 年8 月
注意– 指定分层递阶时,请勿使用-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 列出了多个位置,第一个挂载点有三个位置,第二个挂
载点有两个位置。任何复制的位置都可以向任何用户提供相同的服务。只有在挂载只读文
件系统时此过程才有意义,因为您必须对要写入或修改的文件位置进行某些控制。您需要
避免在某个时候修改某个服务器上的文件,然后在几分钟后又去修改其他服务器上的“同一
个”文件。这样做的优点是,将自动使用可用性最佳的服务器,而无需执行用户所需的任何
工作。
如果已将文件系统配置为副本(请参见第174 页中的“什么是复制的文件系统?”),则
客户机可以利用故障转移。这样,不仅可以自动确定最佳的服务器,而且在该服务器不可
用时,客户机还会自动使用下一个最佳服务器。故障转移最先在Solaris 2.6 发行版中得以实
现。
Autofs 如何工作
第6 章• 访问网络文件系统(参考) 189
将好的文件系统配置为副本的示例是手册页。在大型网络中,多个服务器可以导出当前的
一组手册页。如果服务器正在运行且正在导出其文件系统,则从哪个服务器挂载手册页并
不重要。在前面示例中,多个挂载位置在映射项中被表示为挂载位置的列表。
/usr/man -ro oak:/usr/man rose:/usr/man willow:/usr/man
在本示例中,可以从服务器oak、rose 或willow 挂载手册页。哪个服务器最好取决于很多
因素,其中包括:
支持特定NFS 协议级别的服务器数目
服务器的邻近度
加权
排序期间,将对支持各版本的NFS 协议的服务器进行计数。大多数服务器支持的协议版本
将成为要使用的缺省协议。此选择为客户机提供最多可依赖的服务器。
找到包含同一版本协议的最大的服务器子集后,服务器列表将按邻近度进行排序。为确定
邻近度,将检查IPv4 地址。根据IPv4 地址可显示每个子网中的服务器。本地子网中的服务
器优先于远程子网中的服务器。首选最近的服务器可以减少延迟时间和网络通信流量。
注– 不能确定使用IPv6 地址的副本的邻近度。
图6–5 说明了服务器的邻近度。
图6–5服务器邻近度
如果支持同一协议的多个服务器位于本地子网中,则系统将确定连接每个服务器的时间并
将使用最快的服务器。使用加权也会影响排序(请参见第191 页中的“Autofs 和加权
”)。
Autofs 如何工作
190 系统管理指南:网络服务• 2006 年8 月
例如,如果版本4 服务器比较多,则版本4 将成为要使用的缺省协议。但是,现在排序过程
更加复杂了。以下是如何进行排序的一些示例。
本地子网中的服务器优先于远程子网中的服务器。因此,如果版本3 服务器位于本地子
网中,而最近的版本4 服务器位于远程子网中,则版本3 服务器优先级更高。同样,如
果本地子网包含版本2 服务器,则它们优先于包含版本3 和版本4 服务器的远程子网。
如果本地子网包含数目不同的版本2、版本3 和版本4 服务器,则需要进行更多排序。
自动挂载程序将优先使用本地子网上的最高版本。在这种情况下,版本4 是最高版本。
但是,如果本地子网具有的版本3 或版本2 服务器比版本4 服务器多,则自动挂载程序
将从本地子网上的最高版本“向下移动”一个版本。例如,如果本地子网有三个版本4 服
务器、三个版本3 服务器和十个版本2 服务器,则将选择版本3 服务器。
同样,如果本地子网包含数目不同的版本2 和版本3 服务器,则自动挂载程序将首先查
看哪个版本代表本地子网上的最高版本。接下来,自动挂载程序将对运行每个版本的服
务器数目进行计数。如果本地子网中的最高版本也代表最多的服务器,则将选择最高版
本。如果较低版本具有更多服务器,则自动挂载程序将从本地子网上的最高版本向下移
动一个版本。例如,如果本地子网上的版本2 服务器比版本3 服务器更多,则将选择版
本2 服务器。
注– /etc/default/nfs 文件中的关键字值也会影响加权。具体来说,
NFS_SERVER_VERSMIN、NFS_CLIENT_VERSMIN、NFS_SERVER_VERSMAX 和
NFS_CLIENT_VERSMAX 的值可以从排序过程中排除某些版本。有关这些关键字的更多信
息,请参见第129 页中的“/etc/default/nfs 文件的关键字”。
选择服务器之后,可以在挂载时使用故障转移检查排序方式。在个别服务器可能无法临时
导出其文件系统的环境中,多个位置是非常有用的。
在具有许多子网的大型网络中,故障转移特别有用。Autofs 将选择适当的服务器,并且能
够将NFS 网络通信限制在本地网络段。如果服务器具有多个网络接口,则可以列出与每个
网络接口关联的主机名,就像接口是单独的服务器一样。Autofs 将选择离客户机最近的接
口。
注– 对于手动挂载,不会执行任何加权和邻近度检查。mount 命令将对从左到右列出的服务
器设置优先级。
有关更多信息,请参见automount(1M) 手册页。
Autofs 和加权
对autofs 映射增加加权值可影响对处于同一邻近度级别的服务器的选择。例如:
/usr/man -ro oak,rose(1),willow(2):/usr/man
Autofs 如何工作
第6 章• 访问网络文件系统(参考) 191
括号中的数字指示加权。不含加权的服务器的值为零,因此最有可能被选择。加权值越
高,服务器被选中的几率越低。
注– 所有其他的服务器选择因素都比加权重要。只有在网络邻近度相同的服务器之间进行选
择时,才考虑加权。
映射项中的变量
通过在客户机名称前加一个美元符号($) 前缀可以创建特定于该客户机的变量。该变量有助
于了解正在访问同一个文件系统位置的不同体系结构类型。还可以使用花括号将变量名与
附加字母或数字分隔开。表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 会将映射名视为字符串,并使
Autofs 如何工作
192 系统管理指南:网络服务• 2006 年8 月
用名称服务转换器策略查找映射名。如果路径名是绝对路径名,则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
Autofs 如何工作
第6 章• 访问网络文件系统(参考) 193
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 如何工作
194 系统管理指南:网络服务• 2006 年8 月
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 如何工作
第6 章• 访问网络文件系统(参考) 195
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
Autofs 如何工作
196 系统管理指南:网络服务• 2006 年8 月
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/&
Autofs 参考
第6 章• 访问网络文件系统(参考) 197
在如下情况下,还可以在直接映射中使用关键字替换:
/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 - "
Autofs 参考
198 系统管理指南:网络服务• 2006 年8 月
SLP 主题
本节提供用于服务定位协议(Service Location Protocol, SLP) 服务的概述、规划、任务和
参考信息。
第3 部分
199
200
SLP(概述)
服务定位协议(Service Location Protocol, SLP) 为已启用SLP 的网络服务的搜索和调配提供了
与平台无关的便捷框架。本章介绍用于IP 内联网的SLP 体系结构和SLP 的Solaris 实现。
第201 页中的“SLP 体系结构”
第204 页中的“SLP 实现”
SLP 体系结构
本节概括了SLP 的基本操作,并介绍了SLP 管理中所用的代理和进程。
只需进行少量配置或无需进行任何配置,SLP 便可自动提供下面的所有服务。
旨在获取访问服务所需信息的客户机应用程序请求
对网络硬件设备或软件服务器的服务通知;例如,打印机、文件服务器、摄像机和
HTTP 服务器
从主服务器故障中进行托管恢复
此外,还可以根据需要执行以下操作,以管理和调整SLP 操作。
将服务和用户组织到由逻辑组和功能组构成的范围中
启用SLP 日志,以监视网络中的SLP 操作或对其进行故障排除
调节SLP 时间参数,以提高性能和可伸缩性
将SLP 配置为:在不支持多点传送路由的网络中部署SLP 时,它不发送和处理多点传送
消息
部属SLP 目录代理以提高可伸缩性和性能
7第7 章
201
SLP 设计摘要
SLP 库向网络识别的代理告知通知服务,以便在网络中搜索这些服务。SLP 代理负责维护有
关服务类型和位置的最新信息。这些代理也可以使用代理注册来通知未直接启用SLP 的服
务。有关更多信息,请参见第10 章。
客户机应用程序依赖于SLP 库,该库可直接向通知服务的代理发出请求。
SLP 代理和进程
下表介绍了SLP 代理。有关此卷中使用的这些术语和其他术语的扩展定义,请参阅词汇
表。
表7–1 SLP代理
SLP 代理说明
目录代理(Directory Agent,
DA)
对服务代理(Service Agent, SA) 注册的SLP 通知进行高速缓存的进
程。DA会根据需要,将服务通知转发给用户代理(User Agent,
UA)。
服务代理(Service Agent, SA) 代表服务来分发服务通知并向目录代理(Directory Agent, DA) 进行
注册的SLP代理。
用户代理(User Agent, UA) 代表用户或应用程序获取服务通知信息的SLP 代理。
范围服务的管理或逻辑分组。
下图显示了实现SLP 体系结构的基本代理和进程。该图表示了SLP 的缺省部署。未进行任
何特殊配置。只需要两个代理:UA和SA。SLP 框架允许UA向SA多点传送服务请求。SA
会向UA单点传送应答。例如,当UA发送服务请求消息时,SA将以服务应答消息来响应。
服务应答包含与客户机要求相匹配的服务的位置。属性和服务类型还可能具有其他请求和
应答。有关更多信息,请参见第11 章。
SLP 体系结构
202 系统管理指南:网络服务• 2006 年8 月
图7–1 SLP基本代理和进程
下图显示在框架中部署DA时用于实现SLP 体系结构的基本代理和进程。
图7–2 用DA实现的SLP 体系结构代理和进程
部署DA时,网络中发送的消息较少,因此UA可以更快速地检索信息。当网络规模增大或
者不支持多点传送路由时,DA是基本要素。DA用作已注册的服务通知的高速缓存。SA发
送注册消息(SrvReg),其中列出它们向DA通知的所有服务。然后,SA将在应答中收到确认
(SrvAck)。服务通知将由DA刷新,或到期(根据为通知设置的生命周期)。UA搜索到DA
后,会向DA单点传送请求,而不向SA多点传送请求。
有关Solaris SLP 消息的更多信息,请参阅第11 章。
以上文章转自于 : http://developers.sun.com.cn/