nfs常见问题以及解决办法是什么

39次阅读
没有评论

这篇文章给大家介绍 nfs 常见问题以及解决办法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

之前开发时就碰到过 nfs 客户端卡住的情况,umount -f /mnt 提示 device is busy,并且尝试访问挂载目录、df - h 等操作都会使终端卡住,ctrl+ c 也不能强行退出。

当时忙着赶进度,没研究这个问题。最近倒出功夫研究一下,顺便学习一下 nfs 的优化。
造成这种现象的原因是 nfs 服务器 / 网络挂了,nfs 客户端默认采用 hard-mount 选项,而不是 soft-mount。他们的区别是
soft-mount: 当客户端加载 NFS 不成功时,重试 retrans 设定的次数. 如果 retrans 次都不成功,则放弃此操作,返回错误信息 Connect time out
hard-mount: 当客户端加载 NFS 不成功时, 一直重试,直到 NFS 服务器有响应。hard-mount 是系统的缺省值。在选定 hard-mount 时,最好同时选 intr , 允许中断系统的调用请求,避免引起系统的挂起。当 NFS 服务器不能响应 NFS 客户端的 hard-mount 请求时,NFS 客户端会显示
NFS server hostname not responding, still trying

下面列出 mount 关于 nfs 相关的参数
(1)-a:把 /etc/fstab 中列出的路径全部挂载。
(2)-t:需要 mount 的类型,如 nfs 等。
(3)-r:将 mount 的路径定为 read only。
(4)-v mount:过程的每一个操作都有 message 传回到屏幕上。
(5)rsize=n:在 NFS 服务器读取文件时 NFS 使用的字节数,默认值是 4096 个字节。
(6)wsize=n:向 NFS 服务器写文件时 NFS 使用的字节数,默认值是 4096 个字节。
(7)timeo=n:从超时后到第 1 次重新传送占用的 1 / 7 秒的数目,默认值是 7 / 7 秒。
(8)retry=n:在放弃后台 mount 操作之前可以尝试的次数,默认值是 7 000 次。
(9)soft:使用软挂载的方式挂载系统,若 Client 的请求得不到回应,则重新请求并传回错误信息。
(10)hard:使用硬挂载的方式挂载系统,该值是默认值,重复请求直到 NFS 服务器回应。
(11)intr:允许 NFS 中断文件操作和向调用它的程序返回值,默认不允许文件操作被中断。
(12)fg:一直在提示符下执行重复挂载。
(13)bg:如果第 1 次挂载文件系统失败,继续在后台尝试执行挂载,默认值是失败后不在后台处理。
(14)tcp:对文件系统的挂载使用 TCP,而不是默认的 UDP。

如 #mount -t nfs -o soft 192.168.1.2:/home/nfs /mnt

至于传输尺寸的选择,可以进行实际测试:
time dd if=/dev/zero of=/mnt/nfs.dat bs=16k count=16384
即向 nfs 服务器上的 nfs.dat 文件里写入 16384 个 16KB 的块(也有经验说文件大小可以设定为 nfs 服务器内存的 2 倍)。
得到输出如:
输出了 16384+0 个块
user    0m0.200s
输出了 66535+0 个块
user    0m0.420s
192.168.1.4:/mnt  /home/nfs  nfs   rsize=8192,wsize=8192,timeo=10,intr
重新挂载 nfs 服务器,调整读写块大小后重复上述过程,可以找到最佳传输尺寸。

NFS 服务器的故障排除
故障排除思路:
NFS 出现了故障,可以从以下几个方面着手检查。
(1)NFS 客户机和服务器的负荷是否太高,服务器和客户端之间的网络是否正常。
(2)/etc/exports 文件的正确性。
(3)必要时重新启动 NFS 或 portmap 服务。
运行下列命令重新启动 portmap 和 NFS:
service portmap restart
service nfs start
(4)检查客户端中的 mount 命令或 /etc/fstab 的语法是否正确。
(5)查看内核是否支持 NFS 和 RPC 服务。
普通的内核应有的选项为 CONFIG_NFS_FS=m、CONFIG_NFS_V3=y、CONFIG_ NFSD=m、CONFIG_NFSD_V3= y 和 CONFIG_SUNRPC=m。
我们可以使用常见的网络连接和测试工具 ping 及 tracerroute 来测试网络连接及速度是否正常,网络连接正常是 NFS 作用的基础。rpcinfo 命令用于显示系统的 RPC 信息
,一般使用 - p 参数列出某台主机的 RPC 服务。用 rpcinfo- p 命令检查服务器时,应该能看到 portmapper、status、mountd nfs 和 nlockmgr。用该命令检查客户端时,应
该至少能看到 portmapper 服务。

使用 nfsstat 命令查看 NFS 服务器状态
nfsstat 命令显示关于 NFS 和到内核的远程过程调用(RPC)接口的统计信息,也可以使用该命令重新初始化该信息。如果未给定标志,默认是 nfsstat -csnr 命令。使用该命令显示每条信息,但不能重新初始化任何信息。

nfsstat 命令的主要参数如下。
(1)-b:显示 NFS V4 服务器的其他统计信息。
(2)c:只显示客户机端的 NFS 和 RPC 信息,允许用户仅查看客户机数据的报告。nfsstat 命令提供关于被客户机发送和拒绝的 RPC 和 NFS 调用数目的信息。
要只显示客户机 NFS 或者 RPC 信息,将该参数与 - n 或者 - r 参数结合。
(3)-d:显示与 NFS V4 授权相关的信息。
(4)-g:显示 RPCSEC_GSS 信息。
(5)-m:显示每个 NFS 文件系统的统计信息,该文件系统和服务器名称、地址、安装标志、当前读和写大小,以及重新传输计数
(6)-n:为客户机和服务器显示 NFS 信息。要只显示 NFS 客户机或服务器信息,将该参数与 - c 和 - s 参数结合。
(7)-r:显示 RPC 信息。
(8)-s:显示服务器信息。
(9)-t:显示与 NFS 标识映射子系统的转换请求相关的统计信息,要只显示 NFS 客户机或服务器信息,将 - c 和 - s 选项结合。
(10)-4:当与 -c、-n、- s 或 - z 参数组合使用时,将包含 NFS V4 客户机或服务器的信息,以及现有的 NFS V2 和 V3 数据。
(11)-z:重新初始化统计信息。该参数仅供 root 用户使用,并且在显示上面的标志后可以和那些标志中的任何一个组合到统计信息的零特殊集合。

要显示关于客户机发送和拒绝的 RPC 和 NFS 调用数目的信息,输入:
nfsstat -c
要显示和打印与客户机 NFS 调用相关的信息,输入如下命令:
nfsstat -cn
要显示和打印客户机和服务器的与 RPC 调用相关的信息,输入如下命令:
nfsstat -r
要显示关于服务器接收和拒绝的 RPC 和 NFS 调用数目的信息,输入如下命令:
nfsstat –s

关于 nfs 常见问题以及解决办法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。