NFS问题诊断
Posted 金陵大掌柜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFS问题诊断相关的知识,希望对你有一定的参考价值。
温故:
在上一篇文章《如何挂载NFS(二)》中又给大家介绍了NFS挂载的第二种方式,即直接安装。直接安装和预定义安装的最大区别就是前者不会主动在filesystems文件中更新自己的信息,这也是为什么我们也会把直接安装称之为临时安装的原因。具体的操作我这里不再赘述,如果有兴趣可以去看看我的上一篇文章。链接如下:如何挂载NFS(二)
知新:
今天要和大家聊的是NFS的问题诊断,主要是讲一些检查的方法。说一个我之前遇到的情况,话说某天我做AIX系统巡检的时候,突然发现使用 df -g命令竟然没有结果显示,开始大家还有点懵,后来发现是挂载的NFS文件系统出了问题,对远程的NFS文件系统修复之后,发现再次使用df -g就没有问题了。这个事只是给大家提供一个思路,下面我要讲的才是本次的重点。
如果说找出了一个NFS问题之后,应该从以下三个方向进行排查,分别是服务器、客户端、网络。具体的排查思路大致可以分为以下四个方面:
(1)检查网络连接功能是正常的,可以通过 ping 命令来确诊。
(2)检查 inetd,portmap 和 biod 进程是否正常运行。
(3)检查该文件系统在客户机上是否有正确的安装点目录。
(4)验证服务器是否正常运行。
在客户端排查:
检查本地NFS进程是否可以使用
lssrc -g nfs
检查NFS服务器是否可以使用
/usr/bin/rpcinfo -p NFS服务器主机名
执行完之后,如果服务器正常运行,则会显示一批程序列表,例如版本号、协议和端口号等
检查NFS服务器的守护进程是否可以使用
/usr/bin/rpcinfo -u NFS服务器 mount
/usr/bin/rpcinfo -u NFS服务器 portmap
/usr/bin/rpcinfo -u NFS服务器 nfs
如果没有下图中查询到的类似结果,说明服务器可能存在问题
检查NFS客户端的网络连接
nfsstat -c
retrans 列的值说明重发的次数。客户机上的 retrans 列的值除以call 列的值如果大于5%,即 retrans÷call×100>5%,就说明重发现象比较严重。
在服务器端排查:
检查进程是否启动
lssrc -g nfs
检查服务器的exports文件
showmount -e
检查服务器的网络连接
nfsstat -s
拓展
常见NFS报错信息如下:
1.硬安装和软安装的文件问题 。
当网络或服务器出现问题时,访问硬安装(hard-mount)和软安装(soft-mount)的远程文件出现的问题是不相同的。 如果服务器无法响应硬安装的请求时,客户机上的 NFS 就显示下面的信息∶ NFS server hostname not responding, still trying 如果服务器无法响应软安装的请求时,客户机上的 NFS 就显示下面的信息∶ Connection timed out
2. Bad sendreply 信息 。
不足的网络传输缓存区可能会引起下面的错误信息∶ nfs_server: bad sendreply 使用 smitty commodev 命令可以增加传输缓存区,首先选择适配器类型,然后再增加传输缓存区的大小。
3.服务器没有响应 。
这个错误通常发生在NFS 进程没有启动或者已经停止运行的时候。如果服务器上的 mountd 进程或 nfsd 进程没有启动或者已经停止了,当客户机试图安装一个已导出的文件系统时,将会显示一个 1831-010 错误信息。 如果 rpc,mountd 进程启动之后又死掉了,在客户机上就会收到这个错误信息,然后按照下面的方法来解决问题∶
(1)telnet 到NFS 服务器上,以root 用户进入系统;
(2)用 cd 命令进入到/etc 目录下;
(3)执行 stopsrc -g nfs 命令;
(4)执行 stopsrc-s portmap 命令;
(5)执行 rm-rf state sm sm.bak xtab rmtab 命令;
(6)执行startsrc -s portmap 命令;
(7)执行 startsrc-g nfs 命令;
(8)执行exportfs-a 命令;
(9)执行showmount e servername 命令(其中 servername 为 NFS 服务器的主机名)。
4.远程安装错误。
(1)mount: ..already mounted 。 试图安装的文件系统已经被安装。
(2)mount .. not found in /etc/filesystems 。指定的文件系统与目录名不匹配。如果执行的 mount 命令只带有文件系统名或只带有目录名参数时,这个命令就会在 /etc/filesystems 文件中查找文件系统字段或目录字段与这个参数相匹配的记录,然后根据这个记录的描述来安装这个 NFS 目录。
(3) mount..not in hosts database 。 在一个没有使用 NIS(Network Information Service,网络信息服务)的网络上,这个错误信息说明了mount 命令使用的主机名不在 /etc/hosts 文件中。在一个运行NIS 的网络上,这个错误信息说明了NIS 在 /etc/hosts 文件中不能发现主机名,或者 NIS 的ypbind 进程已经终止运行。如果存在 /etc/resolv.conf,则要使用一个名字服务器做主机名解析,因为在指定的数据库中可能存在问题。检查 mount 命令的拼写和语法。如果命令拼写正确,网络上没有运行NIS,而且只是因这个主机名而出现这个错误,则应该检查 /etc/hosts 文件中的记录。如果网络上运行着 NIS,通过下面的命令检查 ypbind 进程是否正常运行∶# ps -eflgrep ypbind
如果存在一条关于 ypbind 进程的记录,再用 rlogin 命令登录到远程主机上,或者用 rcp命令拷贝一些文件到远程主机中,如果这些命令失败了,ypbind 进程可能停止运行或者被挂起了。如果只是因这个主机名而出现这个错误,应该检查 NIS 服务器上的/etc/hosts 文件中的记录。
(4)mount .. server not responding: port mapper failure-RPC timed out 。尝试安装的 NFS 服务器可能掉电或不正常运行了,或者 portmap 进程停止运行或者被挂起了,那么应该重新启动 inetd,portmap 和 ypbind 进程。如果用 rlogin 命令不能登录到远程服务器上,而服务器工作是正常的,则应该通过登录到其他远程主机来检查网络连接,也应该检查服务器的网络连接。
(5)1831-019 mount ..server not responding: program not registered 。这意味着 mount 命令与 portmap 进程取得联系,但是 rpc.mountd 进程没有注册。
(6)mount: access denied 。在 NFS 服务器上这个文件系统的导出选项中没有用户所在客户机的主机名。运行下面的命令,可以得到服务器上导出文件系统的列表∶# showmount -e host_name如果想要安装的文件系统,或者主机名或网络组名(netgroup name)不在这个文件系统的用户列表中,登录到服务器上检查 /etc/exports 文件中适当的文件系统记录。如果一个文件系统存在于 /etc/exports 文件中,但是不在 showmount 命令的输出中,说明 mountd进程可能有故障。mountd 进程不能解析 /etc/exports 文件中的记录,它就不能发现目录,或者目录名不是一个本地可以被安装的目录。如果/etc/exports 文件是正确的而且网络上运行了 NIS,应该检查服务器上的 ypbind 进程,它可能停止运行或者挂起了。
(7)mount .… Permission denied 。这个信息通常说明了服务器上的身份验证可能有问题。在以前的例子中,用户的主机名或用户名不在服务器上的导出列表中,服务器无法认出主机上的ypbind 进程,或者服务器无法接受用户所提供的身份标识。检查服务器上的/etc/exports 文件和 ypbind 进程,如果是有效的,在这种情况下,只能用 hostname 命令改变主机名再重新尝试 mount 命令。
(8)mount … Not a directory 。远程的路径或本地的路径不是一个目录。检查命令的拼写之后,再尝试在远程路径和本地路径上执行该命令。
(9)mount: … You are not allowed 。用户必须要有 root 用户身份或者是一个 system 组的成员,才能运行 mount 命令,因为它会影响机器上所有用户使用这个文件系统。NFS 安装或卸载的操作只允许 root 用户和 system组的用户完成。
今天暂且讲到这里,下一篇讲的是《NFS系统的链接》
以上是关于NFS问题诊断的主要内容,如果未能解决你的问题,请参考以下文章
阿里Java诊断工具 arthas - 生产环境反编译动态修改程序调试应用