系统管理指南:网络服务

NFS 疑难解答过程

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

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

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

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


    % /usr/sbin/ping bee
    
    bee is alive

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

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

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


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


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

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

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

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

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

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

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

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

Procedure如何远程检查 NFS 服务器

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

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


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

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

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

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


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

    注 –

    NFS 版本 4 不支持 UDP。


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

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


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

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

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


    % cd /net/wasp
    

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


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


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

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

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

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

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

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

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


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


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

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


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

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

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


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

    注 –

    NFS 版本 4 不支持 UDP。


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

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


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

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

Procedure如何重新启动 NFS 服务

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

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

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

    键入以下命令。


    # svcadm restart network/nfs/server
    

Procedure如何热启动 rpcbind

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

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

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

  2. 确定 rpcbind 的 PID

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


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

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


    # kill -s term 115
    

    注 –

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


  4. 重新启动 rpcbind

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


    # /usr/sbin/rpcbind -w
    

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

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


% nfsstat -m

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

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

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

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

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

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

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


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


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

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

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

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


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