扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
NFS问题确定
与其它网络服务一样,使用网络文件系统NFS服务器可能出现问题。对这些问题的故障诊断涉及理解跟踪 NFS 问题的策略、识别 NFS 相关的错误消息和选择适当的解决方案。当跟踪到一个NFS服务器问题时,请首先孤立三个主要故障点以确定其中是哪一个不工作:服务器、客户机或网络本身。
识别硬安装和软安装文件问题
当网络或服务器有问题时,访问硬安装远程文件的程序与访问软安装远程文件的程序所出现的故障不同。
如果一台服务器未能响应一个硬安装请求,NFS 会显示消息:
NFS服务器主机名未响应,仍在尝试
因为客户机会反复尝试安装请求直到成功,所以硬安装远程文件系统导致程序挂起直到服务器响应。执行硬安装时请使用 mount 命令的 -bg 标志,这样如果服务器不响应,客户机就会在后台重试安装。
如果服务器未响应一个软安装请求,NFS 会显示消息:
连接超时
当一段时间的尝试没有成功后软安装远程文件系统返回一个错误。不幸的是在文件系统操作中很多程序不检查返回情况,因此在访问软安装文件时您不会看到该错误消息。然而,该 NFS 错误消息在控制台上显示。
获取 NFS 守护程序的当前状态
可以立即分别或全部获取 NFS 守护程序的当前状态。要分别获取 NFS 守护程序的当前状态,请运行:
lssrc -s Daemon
其中 Daemon 是由 SRC 控制的任何一个守护程序。例如,要获取 rpc.lockd 守护程序的当前状态,请运行:
lssrc -s rpc.lockd
要立即获取所有 NFS 守护程序的当前状态,请运行:
lssrc -a
识别NFS故障核对表
如果一台客户机当前有NFS故障,请执行以下操作:
1. 验证网络连接是否正确。
2. 按照 获取 NFS 守护程序的当前状态 中的指示信息,验证客户机中是否运行了 inetd , portmap 和 biod 守护程序。
3. 验证正在安装的文件系统是否存在有效的安装点。
4. 在客户机 shell 提示符下运行以下命令以验证服务器是否已启动并运行:
/usr/bin/rpcinfo -p server_name
如果服务器已启动,会显示程序、版本、协议和端口号的清单,类似以下内容:
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 1025 mountd
100001 1 udp 1030 rstatd
100001 2 udp 1030 rstatd
100001 3 udp 1030 rstatd
100002 1 udp 1036 rusersd
100002 2 udp 1036 rusersd
100008 1 udp 1040 walld
100012 1 udp 1043 sprayd
100005 1 tcp 694 mountd
100003 2 udp 2049 nfs
100024 1 udp 713 status
100024 1 tcp 715 status
100021 1 tcp 716 nlockmgr
100021 1 udp 718 nlockmgr
100021 3 tcp 721 nlockmgr
100021 3 udp 723 nlockmgr
100020 1 udp 726 llockmgr
100020 1 tcp 728 llockmgr
100021 2 tcp 731 nlockmgr
如果没有返回类似的响应,请在服务器控制台上登录服务器并按 获取NFS守护程序的当前状态 中的指示信息检查 inetd 守护程序的状态。
5. 验证 mountd 、 portmap 和 nfsd 守护程序正在NFS服务器上运行,请在客户机 shell 提示符下输入以下命令:
6. /usr/bin/rpcinfo -u server_name mount
7. /usr/bin/rpcinfo -u server_name portmap
/usr/bin/rpcinfo -u server_name nfs
如果守护程序在服务器运行,会返回以下响应:
program 100005 version 1 ready and waiting
program 100000 version 2 ready and waiting
program 100003 version 2 ready and waiting
程序号分别与命令对应,如前例中所示。如果没有返回类似的响应,请在服务器控制台上登录服务器并按照 获取 NFS 守护程序的当前状态 中的指示信息检查守护程序的状态。
8. 验证服务器中上的 /etc/exports 文件是否列出客户机要安装的文件系统名称以及该文件系统是否已导出。输入以下命令进行操作:
showmount -e server_name
该命令列出了由 server_name 当前导出的所有文件系统。
异步写错误
当应用程序在 NFS 安装文件系统中写数据到一个文件时,写操作由 biod 守护程序调度为异步处理。如果在数据实际写入磁盘的同时在 NFS 服务器上出现错误,该错误会返回 NFS 客户机,且 biod 守护程序在 NFS 数据结构内部保存错误。然后在下一次该应用程序调用 fsync 或 close 函数时,存储的错误返回该应用程序。作为此类错误的结果,写错误在程序关闭文件前不会通知给该应用程序。此事件的一个典型示例是当服务器上的文件系统已满时,导致客户机尝试的写失败。
NFS服务器错误消息
以下部分解释使用NFS时可能生成的错误代码。
nfs_server 错误消息
您网络上传输缓冲不足可能导致以下错误消息:
nfs_server: 坏发送回复
要增加传输缓冲区,请使用基于 Web 的系统管理器( wsm )或系统管理接口工具 (SMIT)快速路径, smit commodev 。然后选择您的适配器类型并增加传输缓冲区数。
mount 错误消息
一个远程的安装过程可能会以几种方式出现故障。与安装故障相关的错误消息如下:
mount: ... 已安装
您尝试安装的文件系统已经安装。
mount: ... 在 /etc/filesystems 中未找到
指定的文件系统或目录名不能匹配。
如果您发出的 mount 命令带有一个目录或文件系统名称但不是两者,该命令在 /etc/filesystems 文件的文件系统或目录字段中查找与参数匹配的项。如果 mount 命令找到类似以下的项:
/dancer.src:
dev=/usr/src
nodename = d61server
type = nfs
mount = false
则它会象已经在命令行输入以下命令一样执行安装:
/usr/sbin/mount -n dancer -o rw,hard /usr/src /dancer.src
... 在 hosts 数据库中不存在
在一个无网络信息服务的网络中,此消息表示 mount 命令中指定的主机不在 /etc/hosts 文件中。在一个运行 NIS 的网络中,该消息表示 NIS 无法找到 /etc/hosts 数据库中的主机名或机器上的 NIS ypbind 守护程序失败。如果存在 /etc/resolv.conf 文件,而名称服务器正用于主机名解析,则可能在 named 数据库中有问题。请参阅 NFS 服务器上的名称解析 。
检查 mount 命令中的拼写和语法。如果命令正确,您的网络不运行 NIS 并只得到该主机名的本条消息,请检查 /etc/hosts 文件中的项。
如果网络正在运行 NIS,请在命令行输入以下内容确保 ypbind 守护程序正在运行:
ps -ef
您应该在列表中看到 ypbnd 守护程序。尝试使用 rlogin 命令远程登录到另一台机器,或使用 rcp 命令来远程复制一些东西到另一台机器上。如果这仍然失败,您的 ypbind 守护程序很可能已停止或挂起。
如果您仅获得该主机名的本条消息,请检查 NIS 服务器上的 /etc/hosts 项。
mount: ... 服务器无响应:端口映射失败 — RPC 超时
您尝试要从其安装的服务器已当机或其端口映射器已停止或挂起。请尝试重新启动服务器以激活 inetd 、 portmap 和 ypbind 守护程序。
如果无法使用 rlogin 命令远程登录服务器但是服务器已启动,请通过尝试远程登录另一台机器以检查网络连接。同时检查服务器网络连接。
mount: ... 服务器无响应:程序未注册
这意味着 mount 命令到达了端口映射器,但是 rpc.mountd NFS 安装守护程序没有注册。
mount: 拒绝访问 ...
您的机器名不在您正尝试从服务器安装的文件系统的导出列表中。
通过在命令行运行以下命令您能得到服务器导出的文件系统的列表:
showmount -e hostname
如果您希望的文件系统不在列表中,或您的机器名或网组名称不在文件系统的用户列表中,请登录服务器并检查 /etc/exports 文件中是否有正确的文件系统项。出现在 /etc/exports 文件中,但没有出现在 showmount 命令的输出中的文件系统名表示 mountd 守护程序出了故障。守护程序不能分析文件中的该行,它不能查找目录,或此目录名不是一个本地安装的目录。如果 /etc/exports 文件看上去正确并且您的网络运行 NIS,请检查服务器上的 ypbind 守护程序。它可能已终止或挂起。有关更多信息,请参阅 AIX 5L Version 5.2 Network Information Services (NIS and NIS+) Guide 。
mount: ... : 拒绝许可权
此消息是服务器上部分认证失败的通用指示。在前一个示例中,也可能您不在导出列表中,服务器不能识别您机器的 ypbind 守护程序,或服务器不接受您提供的身份。
请检查服务器上的 /etc/exports 文件和(如果可用) ypbind 守护程序。在这种情况下,您可以仅使用 hostname 命令更改您的主机名并重试 mount 命令。
mount: ... : 不是一个目录
远程路径或本地路径不是一个目录。请检查命令中的拼写并尝试在两个目录上都运行。
mount: ... : 您不被允许
您必须有 root 许可权或是系统组的成员以在您的机器上运行 mount 命令,因为它会影响该机器上所有用户的文件系统。仅允许 root 用户和系统组的成员进行 NFS 安装和卸装安装。
识别 NFS 缓慢访问时间的原因
如果访问远程文件异常缓慢,请确保访问时间没有被失控守护程序、坏的 tty 行或类似的错误所禁止。
检查进程
在服务器上的命令行输入以下命令:
ps -ef
如果服务器似乎运行正常且别的用户得到及时的响应,请确保 biod 守护程序正在运行。请尝试以下的步骤:
1. 请运行 ps -ef 命令并在显示中寻找 biod 守护程序。
如果它们没有运行,请继续步骤 2 和步骤 3。
2. 通过发出以下命令停止 biod 守护程序。
stopsrc -x biod -c
3. 通过发出以下命令启动 biod 守护程序:
startsrc -s biod
要确定是否一个或多个 biod 守护程序没有响应,当用户怀疑一个或多个 biod 守护程序挂起时可以运行几次 nfsstat -c 。如果远程进程呼叫(RPC)客户机读或写数中没有明显的更改,则一个或多个 biod 守护程序没有执行它们的任务。您只能确定一个或多个 biod 守护程序处于非激活状态;但不能确定哪一个是处于非激活状态。
检查网络连接
如果 biod 守护程序正在工作,请检查网络连接。 nfsstat 命令确定是否正在丢信息包。使用 nfsstat -c 和 nfsstat -s 命令来确定是否客户机或服务器正在重新发送大的数据块。信息包丢失或服务器繁忙容易导致重发。重发率在百分之五或以上就认为是高。
重新发送的可能性可以通过更改通信适配器传输队列参数来减少。 系统管理接口工具 (SMIT)可以用来更改这些参数。
下面是给 NFS 服务器的推荐值。
通信适配器最大传输单元(MTU)和传输队列大小
适配器MTU传输队列
令牌环
4Mb
16Mb1500
3900
1500
850050
40(如果 nfsstat 命令超时请增加。)
40(如果 nfsstat 命令超时请增加)
40(如果 nfsstat 命令超时请增加。)
以太网150040(如果 nfsstat 命令超时请增加)
每个令牌环速度的较大
MTU 值会减少处理器使用并显著提升读/写操作。
注:
1. 如果重新发送持续,则请将这些值应用于 NFS 客户机。
2. 网络上所有节点必须使用相同 MTU 大小。
设置 MTU 大小
要设置 MTU 大小,请使用基于 Web 的系统管理器( wsm )或 SMIT 快速路径 smit chif 。请选择相应的适配器并在“最大的 IP 包尺寸”字段中输入一个 MTU 值。
ifconfig 命令可被用来设置 MTU 大小(且设置 MTU 大小为 8500 时 必须 使用)。 ifconfig 命令的格式是:
ifconfig tr n NodeName up mtu MTUSize
其中 tr n 是您的适配器名称,例如 tr0。
另一种设置 MTU 大小的方法把 ifconfig 命令和 SMIT 组合。
1. 为令牌环将 ifconfig 命令(如前例中所示)添加到 /etc/rc.bsdnet 文件。
2. 输入 smit setbootup_option 快速路径。将“使用 BSD 风格”字段切换到 是 。
设置传输队列大小
通信适配器传输队列大小由 SMIT 设置。输入 smit chgtok 快速路径,选择相应的适配器,然后在“传输”字段输入一个队列大小。
修正挂起的程序
如果在与文件相关工作期间程序挂起,NFS 服务器可能已停止。在这种情况下,可能显示以下错误消息:
NFS服务器 hostname 没有响应,仍在尝试
NFS服务器(hostname)已当机。这表示 NFS 服务器、网络连接或 NIS 服务器有问题。
如果您的机器完全挂起,请检查已从其安装文件系统的服务器。如果一台或多台服务器当机,请不用担心。当服务器重新启动时,程序会自动继续。没有文件会破坏。
如果一个软安装服务器死机,别的工作不受影响。当尝试访问软安装的远程文件时,超时的程序会失败并发出 errno 信息,但是您仍然可以访问您其它的文件系统。
如果所有服务器正在运行,请确定是否正在运行同一服务器其它用户也有问题。超过一台有服务错误的机器表示服务器上的 nfsd 守护程序有问题。在这种情况下,请登录到服务器并运行 ps 命令来察看是否 nfsd 守护程序正在运行并累积 CPU 时间。如果不是,您也许可以终止并重启 nfsd 守护程序。如果不起作用,您必须重启服务器。
如果其它系统似乎启动并运行,请检查您的网络连接和服务器连接。
许可和认证方案
有时,安装已成功的建立后,会出现读、写或创建远程文件或目录的问题。这些困难通常是由于许可或认证问题引起的。许可和认证问题的原因根据是否使用 NIS 和指定安全安装而变化。
最简单的情况出现在指定了非安全安装且没有使用 NIS 的时候。在这种情况下,用户标识(UID)和组标识(GID)只通过服务器 /etc/passwd 文件和客户机 /etc/group 文件映射。在该方案中,一个名叫 B 的要在客户机和服务器上都识别为 B 用户,用户 B 必须在 /etc/passwd 文件中有相同的 UID 号。下面是一个这样可能如何导致问题的示例:
用户 B 在客户机 foo 上的 uid 是 200。
用户 B 在服务器 bar 上的 uid 是 250。
用户 G 在服务器 bar 上的 uid 是 200。
/home/bar 目录从服务器 bar 安装到客户机 foo。如果用户 B 正编辑在客户机 foo 上的 /home/bar 远程文件系统上的文件,当保存文件时会发生混乱。
服务器 bar 认为文件属于用户 G,因为 G 在 bar 上的 UID 是 200。如果 B 通过使用 rlogin 命令直接登录到 bar,则其可能无法访问刚才在远程安装的文件系统上工作时创建的文件。然而 G,可以这样做,因为机器根据 UID 而不是名称仲裁许可权的。
该问题唯一的永久解决方案是在两台机器上重新分配一致的 UID。例如,在服务器 bar 上给 B UID 200 或在客户机 foo 上给它 250。然后需要对 B 的这些文件运行 chown 命令,以使它们与相应机器上的新标识匹配。
由于在网络中维护所有机器 UID 和 GID 映射一致的问题,通常用 NIS 或 NIS+ 来执行相应的映射以避免此类问题。有关更多信息,请参阅 AIX 5L Version 5.2 Network Information Services (NIS and NIS+) Guide 。
NFS服务器上的名称解析
当一个 NFS 服务器服务一个安装请求时,它查找产生请求的客户机的名称。服务器接管客户机网际协议(IP)地址并查找匹配该地址的相应主机名。一旦找到主机名,服务器会在导出列表中查找请求的目录并在目录的访问列表中检查客户机名称是否存在。如果存在客户机项且该项完全匹配从名称解析返回的内容,则通过此部分安装认证。
如果服务器不能执行 IP 地址到主机名解析,则服务器拒绝安装请求。服务器必须能找到产生安装请求的客户机 IP 址的某个匹配。如果目录已导出为所有客户机访问,则服务器仍然必须能执行逆向名称查找以允许安装请求。
服务器也必须能查找客户机的正确名称。例如,如果在 /etc/exports 文件中已存在类似以下的一个项:
/tmp -access=silly:funny
则以下相应的项存在于 /etc/hosts 文件中:
150.102.23.21 silly.domain.name.com
150.102.23.52 funny.domain.name.com
请注意名称是不完全对应的。当服务器查找主机 silly 和 funny 的 IP 地址到主机名匹配时,字符串名称与导出访问列表中的项不完全匹配。这种类型的名称解析问题通常在将 named 守护程序用于名称解析时发生。大多数 named 守护程序数据库具有主机的全域名的别名,以使用户在引用主机时不必输入全名。即使存在别名的主机名到 IP 地址项,逆向查找可能不存在。逆向名称查找的数据库(IP 地址到主机名)通常具有包含该主机的 IP 地址和全域名(不是别名)。有时导出项以较短的别名创建,当客户机尝试安装时会引起问题。
NFS结构中组数的限制
在使用 NFS V3.2 的系统上,用户不可能成为超过 16 个组的成员而不导致复杂化。 (组由 groups 命令定义。)如果一个用户是 17 个或更多组的成员,且用户尝试访问第 17 个(或更大)组拥有的文件时,系统将不允许文件读取或复制。为了允许用户访问文件,请重排列组的次序。
从具有先前版本 NFS 的 NFS 服务器安装
当从早于 NFS V3 的服务器安装文件系统到 NFS V3 客户机时,当客户机上执行安装的用户是超过八个组的成员时会发生问题。一些服务器不能正确处理这种情况并拒绝安装请求。解决方案是将用户的组员身份更改为少于八个然后重试安装。以下是这种组问题的特征错误消息:
RPC: Authentication error; why=Invalid client credential
没有装载NFS内核扩展而发生的问题
有些NFS命令在NFS内核扩展没有装入的情况下不能正确执行。具有这些相关性的一些命令有: nfsstat 、 exportfs 、 mountd 、 nfsd 和 biod 。当 NFS 安装在系统上时,内核扩展存放在 /usr/lib/drivers/nfs.ext 文件中。然后当配置系统文件时,该文件随后装入为 NFS 内核扩展。进行该内核扩展的脚本装入 /etc/rc.net 文件。在脚本中完成了许多别的东西,其中之一用来装入 NFS 内核扩展。请注意传输控制协议/网际协议(TCP/IP)内核扩展应该在装入 NFS 内核扩展之前装入。
注:
gfsinstall 命令是用于在系统初始启动时将 NFS 内核扩展装入内核的命令。每次系统启动时这条命令可以运行超过一次而并不会导致问题。当前随系统提供了 gfsinstall 命令,该命令用于 /etc/rc.net 和 /etc/rc.nfs 文件中。不需除去这些调用中的任何一个。