; [resource]
# e.g,
# share -F nfs -o rw=engineering -d “home dirs” /export/home2
#
当如下情况时,/etc/dfs/dfstab文件的内容被执行:
● 系统进入运行级3。
● 超级用户运行shareall命令。NFS后台进程必须被运行。
● 超级用户运行/etc/init.d/nfs.server脚本(该脚本包含一个
shareall命令)加start 参数。这个脚本启动NFS服务器后台进程。
注意 - 如果nfs.server脚本没有在/etc/dfs/dfstab文件中找到任何share
命令,它不运行NFS后台进程而退出。
NFS存取管理
缺省情况下,被挂接的NFS资源可以有基于标准Solaris文件许可的读写特权。存取
决策基于比较客户机用户和文件所有者的ID。
下面的share命令选项限制NFS客户机的读写能力并允许超级用户存取一个被挂
接的资源。
● ro
通知客户机该服务器只接受读请求。
● rw
允许服务器接受来自客户机的读和写请求。
● root= client
通知客户机指定系统的root用户可以在被共享的资源上执行超级用户特权的
请求。
● ro= access-list
允许来自指定存取列表的读请求。
● rw= access-list
允许来自指定存取列表的读写请求。
▼ access-list=client:client
允许存取基于一个冒号分隔的一个或更多客户机的列表。
▼ access-list=@network
允许存取基于一个网络号(例如,@192.168.100)或网络名(例如,
@mynet.com)。这个网络必须在/etc/networks中定义。
▼ access-list=.domain
允许存取基于一个域名系统(DNS)域;这个点(.)识别它为一个DNS
域。
▼ access-list=netgroup_name
允许存取基于一个已配置的网络组(网络信息服务[NIS]或只是网络信息服
务增强[NIS+])。
▼ anon= n
设置n为未知用户的有效用户ID(EUID)。缺省情况下,未知用户被给与
EUID60001 UID_NOBODY。如果n被设为-1,存取被拒绝。
你可以通过用逗号分隔每个选项来结合这些选项,构成复杂的存取限制。
例子
# share -F nfs -o ro directory
这个命令行限制对被挂接NFS资源的存取为只读存取。
# share -F nfs -o ro,rw=client1 directory
这个命令行限制对被挂接NFS资源的存取为只读存取;然而,NFS服务器接受来自名为client1的客户机的读和写请求。
# share -F nfs -o root=client2 directory
这个命令行允许名为client2的客户机上的root用户对被挂接的NFS资源有超级用户存取权限。
# share -F nfs -o anon=0 directory
通过设置选项anon=0,用于存取被共享资源的EUID被设为正在存取被共享资源的用户的UID。
unshare命令
/usr/sbin/unshare命令使文件系统不可用于远程系统挂接。它读
/dfs/sharetab文件。
命令格式
unshare [ -F nfs ] pathname
选项
下面选项可以被用于unshare命令:
● -F nfs
指定nfs为文件系统类型。因为NFS是缺省的远程文件系统,这个选项通常不
被要求。
● pathname
指定被取消共享的文件资源的路径名。
下面例子使资源不可用于挂接:
# unshare /usr/share/man
shareall和unshareall命令
用/usr/sbin/shareall和/usr/sbin/unshareall命令共享所有NFS资源和
取消所有NFS资源共享。
Shareall命令
不加任何参数,shareall命令共享列在/etc/dfs/dfstab文件中的所有文件
资源。
shareall [ -F nfs ]
unshareall命令
不加任何参数,unshareall命令取消当前被共享的文件资源。它通过读
/etc/dfs/sharetab文件来做这些。
unshareall [ -F nfs ]
配置NFS文件系统
要设置NFS服务器,完成下面的步骤:
1.编辑/etc/dfs/dfstab文件,添加这些文件资源使其只要系统进入运行级3
就自动被共享。
share -F nfs /usr/share/man
2.通过调用下面的启动NFS服务器后台进程:
# /etc/init.d/nfs.server start
这样共享/etc/dfs/dfstab文件的内容。
注意 - 你可以用dfshares命令验证可用的资源。
NFS信息的命令
用下面命令获得关于NFS资源的信息。
dfshares命令
dfshares命令显示当前被共享的NFS资源。
命令格式
dfshares [ -F nfs ] [ host ]
不加参数,dfshares命令显示本地服务器的被共享资源。
# dfshares
RESOURCE SERVER ACCESS TRANSPORT
host1:/usr/share/man host1 - -
它也用于显示一个指定服务器名的被共享的资源。
# dfshares host2
RESOURCE SERVER ACCESS TRANSPORT
host2:/export host2 - -
dfmounts命令
这个命令显示被挂接资源的信息。
命令格式
dfmounts [ -F nfs ] [ server ]
不加参数,dfmounts命令显示被共享的资源和挂接本地服务器资源的客户机。
# dfmounts
RESOURCE SERVER PATHNAME CLIENTS
- host1 /usr/share/man host5,host9
这个命令也用于显示一个指定服务器名的被挂接资源信息。
# dfmounts host2
RESOURCE SERVER PATHNAME CLIENTS
- host2 /export host5,host9
NFS客户机
下面的命令和文件用于NFS客户机。
mount命令
用/usr/sbin/mount命令连接一个本地或远程文件资源到文件系统层次。
命令格式
mount [ -F nfs ] [ -o options ] server:pathname mount_point
选项
下面的选项可以被用于mount命令。
● -F nfs
指定nfs为文件系统类型。这个选项不被要求因为nfs是缺省的远程文件系统
类型。
● -o options
指定关于文件系统指定选项的一个逗号分隔的列表,比如rw,挂接文件资源为
读,写,以及ro挂接文件资源为只读。(缺省是rw)
● server:pathname
指定远程文件资源的服务器的名称和路径名;它们被一个冒号分隔(:)。
● mount_point
指定本地系统上挂接点的路径名(此路径必须存在)。
存取一个远程文件资源
用mount命令来存取一个远程文件资源;例如:
# mount host1:/usr/share/man /usr/share/man
要从一个逗号分隔的主机列表中的第一个可用主机挂接一个远程只读文件,执
行下面的:
# mount -o ro host1,host2,host3:/usr/share/man /usr/share/man
由于文件系统被共享为只读,如果多个主机被命名并且列表中的第一个服务器
停机,越过故障特性使用列表中的备用服务器来存取文件。
/etc/vfstab文件
要在引导时有远程文件资源挂接,在客户机的/etc/vfstab文件中输入合适的项
目。例如:
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
host1:/usr/share/man - /usr/share/man nfs - yes soft,bg
/etc/vfstab文件中的字段为:
● device to mount
远程文件资源的服务器名和路径名;它们被一个冒号(:)分隔。
● device to fsck
NFS资源不是由客户机检查,因为文件系统不是由客户机所有。这个字段对
NFS资源总是破折号(-)。
● mount point
文件资源的缺省挂接点。
● FS type
对NFS资源用nfs。
● fsck pass
NFS资源不从客户机检查,因为文件系统不由客户机所有。这个字段对NFS资
源总是破折号(-)。
● mount at boot
yes或no,表明当系统进入运行级2或mountall命令被执行时,文件资源是
否应当被挂接。
● mount options
一个逗号分隔的挂接选项列表。
▼ rw|ro
指定是否资源被挂接为读写或只读。缺省为读写。
▼ bg|fg
在一个NFS挂接期间,如果第一个挂接尝试失败,在后台或前台重试。缺
省是在前台重试。
▼ soft|hard
当重新传输数量到达在retrans=n选项中指定的数量,用soft选项挂接
的一个文件系统对请求返回一个错误然后停止尝试。以hard选项挂接的
文件系统显示一个警告消息并继续尝试请求。缺省是一个hard挂接。
注意 - 尽管soft或bg不是缺省设置,结合这两个选项通常导致当NFS挂接问题出
现时客户机启动最快。
▼ intr|nointr
表明杀死一个被挂起进程的键盘中断,该进程等待被硬挂接的文件系统上
的回应。缺省是intr。
▼ suid|nosuid
表明是否允许setuid执行。缺省允许setuid执行。
▼ timeo=n
设置timeout为一秒的十分之n。缺省暂停时间是11,对用户数据报
(UDP)以一秒的十分之一(0.1)来,对传输控制协议(TCP)以一秒的十
分之600来衡量。
▼ retry=n
设置再尝试挂接操作的次数。缺省是10,000次。
▼ retrans=n
设置NFS重新传输次数为n。对UDP缺省为5。对面向连接的传输(例如
TCP),这个选项没有作用。
注意 - 如果文件资源列在/etc/vfstab文件中,超级用户可以在命令行上指定
server:pathname或 mount_point,因为mount命令为了更多信息检查
/etc/vfstab文件。
建议的挂接选项
用bg选项挂接一个文件系统表明如果服务器的mountd不响应,系统重新挂接文
件系统的尝试在后台进行。这样防止重新挂接中断其它系统服务。
当文件系统被挂接,一个NFS请求等待一个响应的时间量由timeo域(一秒的十
分之几)指出。如果没有收到响应,那么timeo域的值加倍,重新尝试请求。
当重新传输时间到达retrans域的值,以soft选项挂接的文件系统返回一个错
误。以hard选项挂接的文件系统显示一个警告消息并继续再尝试。
表6-1列出对一些普通被共享文件资源的建议挂接选项。
表6-1 挂接选项
NFS文件资源 读写/只读 系统启动 服务器崩溃 中断 安全
/usr ro fg hard nointr suid
/export/home rw bg hard intr nosuid
/opt/frame ro bg soft - nosuid
一个只读目录
/usr文件系统包含操作系统二进制码。这些重要文件系统在前台被挂接,所以直
到挂接完成,引导过程才继续。
NFS客户机硬挂接这个目录。这意味着客户机继续重试挂接请求直到服务器响
应。
一个读写目录
/export/home目录是通常放置用户登录目录的地方。对所有读写(rw)文件系
统(例如,用户的主目录)建议一个硬挂接。
nosuid选项提供附加网络安全,因为NFS资源上的setuid选项被忽略。
一个只读应用目录
不重要的应用通常在后台(bg)用soft挂接为只读(ro)。如果系统引导期间
服务器没有响应,系统继续引导。如果服务器崩溃,那么挂接超时。
umount命令
用/usr/sbin/umount命令从文件系统层次断开一个本地的或远程的文件资源。
命令格式
umount server:pathname | mount_point
这个命令行可以指定server:pathname或mount_point。
# umount /usr/share/man
mountall和umountall命令
用/usr/sbin/mountall和/usr/sbin/umountall命令挂接和卸载所有文件
资源。
mountall命令
不加任何参数,/usr/sbin/mountall命令挂接列在/etc/vfstab文件中
mount-at-boot值为yes的所有文件资源。
要限制这个命令只对远程文件系统,用-r选项。
命令格式
mountall -r [ -F nfs ]
# mountall -r
选项
下面的选项可以用于mountall命令:
● -F nfs
指定nfs为文件系统类型。这个选项不被要求,因为nfs是缺省远程文件系统
类型。
umountall命令
不加任何选项,/usr/sbin/umountall命令卸载所有当前挂接的文件资源。要
限制这个命令只对远程文件资源,用-r选项。
注意 - root ( / ),/usr,/var,所有伪文件系统不被卸载。
命令格式
umountall -r [ -F nfs ]
# umountall -r
选项
下面的选项可以用于umountall命令:
● -F nfs
指定nfs文件系统类型。这个选项不被要求,因为nfs是缺省远程文件系统类
型。
NFS客户机设置
要设置一个NFS客户机,完成下面的步骤:
1.用/usr/sbin/dfshares命令显示一个服务器的可用资源。
# dfshares host1
RESOURCE SERVER ACCES TRANSPORT
host1:/usr/share/man host1 - -
2.用/usr/sbin/mount命令存取远程文件资源。
# mount host1:/usr/share/man /usr/share/man
客户机上的/usr/share/man目录是在本地系统文件层次内的挂接点。这个
目录应为空。
3.在决定对位于远程服务器上手册页的读取不再需要后,你可以用
/usr/sbin/umount命令从客户机卸载远程文件资源。
# umount /usr/share/man
有时候,卸载一个NFS文件系统的尝试导致下面的错误消息:
nfs mount: /usr/share/man: is busy
这通常意味着一个用户或程序正在存取这个资源。
用/etc/vfstab文件挂接
编辑/etc/vfstab文件来为远程资源添加一个项目,只要系统进入运行级3,则
该远程资源自动被挂接。
host1:/usr/share/man - /usr/share/man nfs - yes ro,bg
NFS服务器记录
Solaris 8操作环境的一个新特性是NFS服务器记录。这个特性记录NFS对文件系统
的读写。后台进程,nfslogd,提供这个操作记录。
当NFS服务器记录被允许时,所有对文件系统的NFS操作由内核写入一个缓存文
件。这个数据包括一个时间戳,客户机IP地址,请求者的UID,被存取文件资源的
文件句柄,和所发生的操作的类型。
nfslogd后台进程将原始数据转换为保存在ASCII日志文件中的ASCII记录。在这
个转换过程中,IP地址被转换为主机名,UID被转换为登录名。
文件句柄到路径名的映射也由nfslogd处理。它跟踪在一个file-handle-to-
path映射表中的这些映射。
对/etc/nfs/nfslog.conf文件中识别的每个标签存在一个映射表。
这些文件句柄也被转换成路径名。后台进程跟踪文件句柄并在一个分离的文件句
柄到路径名表中保存信息。用这种方法,路径不必在每次一个文件句柄被存取时
被重新识别。
注意 - 保持nfslogd后台进程运行是很重要的,因为如果nfslogd被关闭,就
没有对file_handle-to-path表中映射的变化的跟踪。
允许NFS服务器记录
要允许nfs服务器记录,完成下面的步骤:
1.成为超级用户。
2.可选:改变文件系统配置设置:
在/etc/nfs/nfslog.conf中,或通过改变与global标签关联的数据编辑
对所有文件系统的缺省设置,或为指定文件系统添加新的标签。如果不需要作
这些改变,不要编辑这些文件。
3.要用NFS服务器记录为每个文件系统添加项目,编辑/etc/dfs/dfstab,在
这个文件中为想要允许NFS服务器记录的文件系统添加项目。
要指定一个标签,你必须在/etc/nfs/nfslog.conf文件中用log=tag选
项输入被使用的标签。
使用log选项不指定一个标签使得缺省使用global标签。下面的例子使用缺
省设置global标签:
share -F nfs -o ro,log=global /export/ftp
4.检查nfs服务正在服务器上运行。
如果nfs后台进程没有运行,执行下面的命令重起NFS后台进程:
# /etc/init.d/nfs.server start
5.如果NFS后台进程已经运行,执行一个命令共享文件系统。
在你向/etc/dfs/dfstab添加项目之后,文件系统可通过重新引导系统或使
用shareall命令被共享。
# shareall
如果NFS后台进程早些时被重起,你不必运行这个命令,因为启动脚本会运行
它。
6.验证信息正确。
运行share命令检查正确选项被列出:
# share
- /export/share/man r ""
- /usr/src rw=eng ""
- /export/ftp ro,log=global ""
7.启动NFS日志后台进程,nfslogd,如果它还没有运行。
# /usr/lib/nfs/nfslogd
如果你用nfs.server脚本重起NFS后台进程,那么这一步是不必要的。因为
如果/etc/nfs/nfslog.conf文件存在,这个脚本也启动这个后台进程。
/etc/nfs/nfslog.conf文件
这个文件详细说明路径,文件名,和nfslogd使用的记录类型。每个说明与一个
标签关联。
启动NFS服务器记录要求你识别每一个文件系统的标签。全局标签说明缺省值。
下面是一个初始nfslog.conf文件的例子:
# cat /etc/nfs/nfslog.conf
#ident "@(#)nfslog.conf 1.5 99/02/21 SMI"
#
.
.
# NFS server log configuration file.
#
; [ defaultdir=; ] \
[ log=; ] [ fhtable=; ] \
[ buffer=; ] [ logformat=basic|extended ]
#
global defaultdir=/var/nfs \
log=nfslog fhtable=fhtable buffer=nfslog_workbuffer
按需使用下面每个标签的参数:
● defaultdir=path
指定记录文件的缺省目录名。
● log=path/filename
设置日志文件的路径和文件名。
● fhtable=path/filename
为file_handle-to-path数据库文件选择路径和文件名。
● buffer=path/filename
决定缓存文件的路径和文件名。
● logformat=basic|extended
选择当创建用户可读的日志文件时被使用的格式。基本格式产生一个类似于某
些ftpd后台进程的日志文件。扩展格式给出一个更详细的观察。
对可以指定路径和文件名的参数,如果不指定路径,使用由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
你必须在启动NFS服务器记录之前,创建名为logs,fh,和buffers的目录。
在这个例子中,任何用log=publicftp被共享的文件系统使用下面的值:
● 缺省目录是/var/nfs。
● 日志文件被保存在/var/nfs/logs/nfslog*中。
● file_handle-to-path数据库被保存在/var/nfs/fh/fhtables中。
● 缓存文件被保存在/var/nfs/buffers/workbuffer中。
/etc/default/nfslogd文件
一个NFS服务器上的NFS操作被记录,基于/etc/default/nfslogd中说明的
配置信息。
这个文件说明当使用NFS服务器记录时使用的一些参数。这些参数包括:
● MAX_LOGS_PRESERVE – 决定被保存的日志文件数量。缺省值是10。
● MIN_PROCESSING_SIZE – 设置缓存文件进行处理和写入日志文件之前必
须达到的最小字节数。缺省值是524,288字节。添加这个数可以通过减少缓存
文件被处理的次数来改善性能。
这个参数,和IDLE_TIME一起,决定多久缓存文件被处理。
● IDLE_TIME – 设置在检查缓存文件中的更多信息之前nfslogd应该睡眠
(等待)的秒数。它也决定多久配置文件被检查。缺省值是300秒。添加这个
数可以通过减少检查次数来改善性能。
● CYCLE_FREQUENCY – 决定在日志文件被循环之前必须经过的小时数。缺省
值是24小时。用这个选项防止日志文件增长得太大。
● UMASK – 指定nfslogd创建的日志文件的许可。缺省值是0137。
NFS命令,文件,和后台进程的摘要
服务器和客户机系统使用的主要命令和文件在表6-2中概述。
表 6-2 NFS命令,文件,和后台进程的摘要
NFS 服务器 NFS 客户机
命令 share resource mount server:directory \
mount-point
unshare resource umount mount-point
shareall mountall -r
unshareall umountall -r
dfmounts dfshares server
/etc/init.d/nfs.server /etc/init.d/nfs.client
文件 /etc/dfs/fstypes /etc/dfs/fstypes
/etc/dfs/dfstab /etc/vfstab
/etc/dfs/sharetab /etc/mnttab
/etc/rmtab
/etc/nfs/nfslog.conf
/etc/default/nfslogd
/etc/nfs/nfslogtab
后台进程 /usr/lib/nfs/nfsd /usr/lib/nfs/statd
/usr/lib/nfs/mountd /usr/lib/nfs/lockd
/usr/lib/nfs/statd
/usr/lib/nfs/lockd
/usr/lib/nfs/nfslogd
处理NFS错误
你可以通过一个客户机上的控制台消息或表征发现大多数的NFS问题。
rpcbind失效错误
错误消息
nfs mount: server1:: RPC: Rpcbind failure
RPC: Timed Out
nfs mount: retrying: /mntpoint
这个消息在引导过程中或是在响应一个显式挂接请求时显示在客户机上。它表明
一个使用服务器的问题。这个错误的发生可以由于支持客户机节点的hosts数据
库文件中结合了一个不正确的Internet地址和一个正确的主机或节点名。
这个错误也可以发生在任何时候支持客户机节点的hosts数据库文件正确地指定
服务器节点,但是服务器节点完全地过载,临时停止,或已经崩溃。
解决方案
如果服务器节点可操作,判断是否关键的服务器资源用光(例如,内存,交换
区,或磁盘空间)。
注意 – 这个例子由临时关掉服务器接点产生,当时试图(通过命令行)使它为一
个客户机节点的挂接请求服务。
服务器不响应错误
错误消息
NFS server server2 not responding, still trying
这个消息在引导过程中或是在响应一个显式挂接请求时显示在客户机上,它表明
已知的主机不可到达。
解决方案
完成下面的步骤:
1.用ping命令(ping server2)判断是否本地系统和服务器之间的网络不
通。
2.判断是否服务器(server2)不可用。
NFS客户机重新引导失败错误
错误情况
NFS客户机重新引导失败,不产生一个错误消息。
只要一个系统管理员试图init 6或reboot重启一个NFS客户机节点就遇到这种
情况。客户机正确重新引导直到系统回显:
Setting default interface for multicast: add net 224.0.0.0: gateway:
client_node_name.
客户机节点没有完成正确的启动序列且不产生任何错误消息。
这些表征和一个客户机用/etc/vfstab文件中的项目请求一个NFS挂接是一致
的,这个项目指定了到一个不在运行的NFS服务器的在前台的硬挂接。
解决方案
如果NFS可用却失败,完成下面的步骤:
1.重设失败的客户机节点,并引导进入单用户模式。
2.在单用户模式,编辑/etc/vfstab文件注释掉NFS挂接。
3.按Control-D继续引导过程到缺省的运行级(通常3)。
4.用/etc/vfstab文件中的信息,判定是否所有NFS服务器可操作且正常运
行。
5.在你判定哪个NFS服务器失败并已经解决任何显著的问题之后,移除
/etc/vfstab文件中的注释。
注意 – 一个向/etc/vfstab文件中的项目添加注释的替代方法是改变那些项目
去使用soft挂接和background活动选项。
停止的服务器错误
错误消息
nfs mount: dbserver: NFS: Service not responding
nfs mount: retrying: /mntpoint
这个消息在引导过程中或是在响应一个显式挂接请求时显示在客户机上,指出一
个可到达的服务器没有运行nfsd服务器后台进程。
解决方案
完成下面的步骤:
1.在服务器上用who –r命令来看它是否在运行级3。如果不是,用init 3命令
改变至运行级3。
2.在服务器上用ps –e命令检查是否nfsd后台进程和NFS服务器进程正在运
行。如果没有,用/etc/ini