要确定 NFS 服务出现故障的位置,需要遵照几个过程执行操作以隔离故障。请检查以下各项:
客户机是否可以访问服务器?
客户机是否可以访问服务器上的 NFS 服务?
NFS 服务是否正在服务器上运行?
在检查上述各项的过程中,您可能会注意到网络的其他部分未正常运行。例如,名称服务或物理网络硬件可能未正常运行。《系统管理指南:名称和目录服务(DNS、NIS 和 LDAP)》包含几个名称服务的调试过程。另外,在该过程中,您可能还会了解到问题不在客户端。例如,如果从工作区域的每个子网中至少获得了一个故障呼叫。在这种情况下,应该假定问题出在服务器上或服务器附近的网络硬件上。因此,应该在服务器而不是客户机上启动调试过程。
检查是否可以从客户机访问 NFS 服务器。请在客户机上键入以下命令。
% /usr/sbin/ping bee bee is alive |
如果此命令报告服务器处于活动状态,请以远程方式检查 NFS 服务器。请参见如何远程检查 NFS 服务器。
如果不能从客户机访问服务器,请确保本地名称服务正在运行。
对于 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 |
如果名称服务正在运行,请通过键入以下内容确保客户机已收到正确的主机信息:
% /usr/bin/getent hosts bee 129.144.83.117 bee.eng.acme.com |
如果主机信息正确,但不能从该客户机访问服务器,请从其他客户机运行 ping 命令。
如果从第二台客户机运行的命令失败,请参见如何验证服务器上的 NFS 服务。
如果可以从第二台客户机访问服务器,请使用 ping 检查第一台客户机到本地网络中的其他系统的连接。
如果此命令失败,请检查客户机上的网络软件配置,例如 /etc/netmasks 和 /etc/nsswitch.conf。
(可选的)检查 rpcinfo 命令的输出。
如果 rpcinfo 命令未显示 program 100003 version 4 ready and waiting,则服务器上未启用 NFS 版本 4。有关启用 NFS 版本 4 的信息,请参见表 5–3。
如果软件正确,请检查网络硬件。
尝试将客户机移至第二个网络断开位置。
请注意,如果使用的是 NFS 版本 4 服务器,则不必同时支持 UDP 和 MOUNT 协议。
通过键入以下命令,检查 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 服务。
检查服务器的 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 服务。
通过键入以下命令,检查服务器的 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 服务。
检查本地 autofs 服务是否正在使用:
% cd /net/wasp |
选择已知且应该正常工作的 /net 或 /home 挂载点。如果此命令失败,请在客户机上以超级用户身份键入以下内容以重新启动 autofs 服务:
# svcadm restart system/filesystem/autofs |
验证是否在服务器上按照预期方式共享文件系统。
% /usr/sbin/showmount -e bee /usr/src eng /export/share/man (everyone) |
请检查服务器上的项和本地挂载项中是否有错误。另外,还要检查名称空间。在本示例中,如果第一台客户机不在 eng 网络组中,则该客户机不能挂载 /usr/src 文件系统。
请检查所有本地文件中包括挂载信息的所有项。此列表包括 /etc/vfstab 和所有的 /etc/auto_* 文件。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
检查服务器是否可以访问客户机。
# ping lilac lilac is alive |
如果不能从服务器访问客户机,请确保本地名称服务正在运行。对于 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 |
如果名称服务正在运行,请检查服务器上的网络软件配置,例如 /etc/netmasks 和 /etc/nsswitch.conf。
# /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中的步骤执行操作。
# 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 服务。
# /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 服务。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
在服务器上重新启动 NFS 服务。
键入以下命令。
# svcadm restart network/nfs/server |
如果 NFS 服务器由于正在工作而无法重新引导,则可以重新启动 rpcbind,而不必重新启动使用 RPC 的所有服务。只需遵照以下步骤完成热启动即可。
成为超级用户或承担等效角色。
角色包含授权和具有一定权限的命令。有关角色的更多信息,请参见《系统管理指南:安全性服务》中的“配置 RBAC(任务列表)”。有关如何使用主管理员配置文件配置角色,请参见《系统管理指南:基本管理》中的第 2 章 “使用 Solaris Management Console(任务)”。
确定 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 |
将 SIGTERM 信号发送至 rpcbind 进程。
在本示例中,term 是要发送的信号,115 是程序的 PID(请参见 kill(1) 手册页)。此命令会导致 rpcbind 在 /tmp/portmap.file 和 /tmp/rpcbind.file 中创建当前注册服务的列表。
# kill -s term 115 |
如果未使用 -s term 选项中止 rpcbind 进程,则无法完成 rpcbind 的热启动。必须重新引导服务器才能恢复服务。
重新启动 rpcbind。
重新热启动该命令,以便查看通过 kill 命令创建的文件。热启动还可确保进程在无需重新启动所有 RPC 服务的情况下进行恢复。请参见 rpcbind(1M) 手册页。
# /usr/sbin/rpcbind -w |
运行带有 -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 |
在 Solaris 2.6 发行版以及 2.6 发行版之后修补的 mount 命令的任何版本中,不会针对无效选项发出警告消息。以下过程有助于确定在命令行上或通过 /etc/vfstab 提供的选项是否有效。
对于本示例,假定以下命令已运行:
# mount -F nfs -o ro,vers=2 bee:/export/share/local /mnt |
通过运行以下命令来验证选项。
% 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 命令是验证选项的最准确的方法。
检查 /etc/mnttab 中的项。
mount 命令不允许将无效选项添加到挂载表中。因此,请验证文件中列出的选项是否与命令行中列出的那些选项匹配。采用这种方式,即可检查 nfsstat 命令未报告的那些选项。
# grep bee /etc/mnttab bee:/export/share/local /mnt nfs ro,vers=2,dev=2b0005e 859934818 |