现象

nfs 服务器因网络等问题与客户端通信失败后,nfs客户端此时执行 ls 命令卡死

原因

单从nfs 的知识来看,造成nfs 客户端卡死的问题,是因为nfs 客户端默认采用 hard 挂载模式。

改用 soft 模式后,则超时后将抛出一个I/O 错误
参考以下文档:
redHat-nfs 文档

hard or soft — Specifies whether the program using a file via an NFS connection should stop and wait (hard) for the server to come back online, if the host serving the exported file system is unavailable, or if it should report an error (soft).
If hard is specified, the user cannot terminate the process waiting for the NFS communication to resume unless the intr option is also specified.
If soft is specified, the user can set an additional timeo=<value> option, where <value> specifies the number of seconds to pass before the error is reported.Using soft mounts is not recommended as they can generate I/O errors in very congested networks or when using a very busy server.

还需要关注的:选项: intr — Allows NFS requests to be interrupted if the server goes down or cannot be reached.

解决

由于nfs 服务器 可能不稳定(当然在网络或服务器不稳定的情况下,不推荐使用nfs),因此使用脚本定时探测后,如果服务器正常,则挂载;如果服务器异常,则卸载。
主要使用到的命令如下:
showmount -e ${ip地址} :检测服务器暴露的nfs 挂载点
mount -t nfs -o rw,intr,soft,timeo=30,retry=3 ${远程地址} ${本地地址} : 将远程目录,以soft、intr模式,并设置超时时间、重试次数
umount -f -l -t nfs ${远程地址}  lazy、force 卸载

#!/bin/bash
# config
NFS_SERVER_IP="192.168.38.201"
NFS_SHARE_DIR="/root/share"
NFS_SHARE_FULL_PATH="${NFS_SERVER_IP}:${NFS_SHARE_DIR}"# 日志文件路径
LOG_PATH="/root/nfs.log"
# 本地挂载目录
LOCAL_MOUNT_PATH="/root/client-share/"# 卸载
doUmount() {umount -f -l -t nfs ${NFS_SHARE_FULL_PATH} >>${LOG_PATH} 2>&1echo "卸载结果: $?" >>${LOG_PATH}
}# 检测nfs 服务器状态
checkServerStatus() {exportList=$(showmount -e ${NFS_SERVER_IP} 2>>${LOG_PATH} )exportTargetCount=$(echo "${exportList}" | grep -c ${NFS_SHARE_DIR})if [ "${exportTargetCount}" -ge 1 ]; thenreturn 0elseecho "在showmount 结果中找不到指定目录,exportList:" "${exportList}" >>${LOG_PATH}return 1fi
}# 挂载
doMount() {mount -t nfs -o rw,intr,soft,timeo=30,retry=3 ${NFS_SHARE_FULL_PATH} ${LOCAL_MOUNT_PATH} >>${LOG_PATH} 2>&1if [ $? -eq 0 ]; thenecho "NFS [${NFS_SHARE_FULL_PATH}] 自动挂载成功" >>${LOG_PATH}elseecho "NFS [${NFS_SHARE_FULL_PATH}] 挂载失败" >>${LOG_PATH}fi
}# 检测并挂载
checkAndMount() {# 是否已经挂载shareCount=$(df -h | grep -c ${NFS_SHARE_FULL_PATH})if [ "${shareCount}" -ge 1 ]; thenecho "NFS  [${NFS_SHARE_FULL_PATH}] 已挂载,无需重复挂载" >>${LOG_PATH}elsedoMountfi
}main() {echo "NFS 检测开始:$(date +"%F %T")" >>${LOG_PATH}checkServerStatus# server 状态正常if [ $? -eq 0 ]; thencheckAndMountelseecho "请检查server运行情况" >>${LOG_PATH}doUmountfiecho "NFS 检测结束:$(date +"%F %T")" >>${LOG_PATH}exit 0
}main

需要注意的是,当 mount 成功后,该文件夹本身包含的文件只有在 umount 后才能看到。可以通过挂载前将已有的文件,移动到其他文件夹后,再拷贝到nfs 挂载目录上。

参考文档

redHat-nfs 文档

nfs 客户端卡死问题相关推荐

  1. NFS基本配置与NFS客户端自动挂载

    NFS基本配置与NFS客户端自动挂载 一.NFS基本配置 1>NFS主要实现linux与Linux之间文件的共享,它不适用于windows系统. 2> NFS的配置比较简单,只需要几条命令 ...

  2. 14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3

    14.4 exportfs命令 由于配置了no_root_squash的权限所以有如下结果: 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp yum ...

  3. exportfs命令、NFS客户端问题、FTP介绍、使用vsftpd搭建ftp

    2019独角兽企业重金招聘Python工程师标准>>> 1. exportfs命令 一般情况下重启服务器上nfs服务时,需把客户端上的挂载先卸载掉,以免进程后面杀不掉.当客户端服务器 ...

  4. exportfs+NFS客户端问题

    1exportfs命令 原理图: 假如要是A上面的NFS服务停掉了,但是B和C还在挂载着A分享的分区,就不可以正常工作了,由于B和C上面的进程是d(不可中断进程),一旦A停止了B和C一定会出问题,也不 ...

  5. linux 安装nfs 客户端,在CentOS 7上安装NFS服务器和客户端

    NFS服务器和客户端安装在CentOS 7上 版本1.0 作者:Srijan Kishore 在Twitter上关注howtoing 最后编辑 16 / Dec / 2014 本指南介绍如何在Cent ...

  6. NFS客户端挂载目录后无写入权限的解决方案

    NFS客户端挂载目录后无写入权限的解决方案 参考文章: (1)NFS客户端挂载目录后无写入权限的解决方案 (2)https://www.cnblogs.com/mh-study/p/11148790. ...

  7. 服务器所属文件变成nobody,NFS(expirtfs命令,NFS客户端创建新文件所属组和所属主都为nobody)(示例代码)...

    一.exportfs命令 nfs进程不能随便从新启动,如果不得已要重启,必须把客户端的挂载目录卸载,然后在从新启动. 这时候就可以用exportfs命令 -a             全部挂载或者全部 ...

  8. win7 ghost 版 打开或关闭windows功能 ,如nfs 客户端 telnet 客户端 提示 并非所有的功能被成功更改

    最近使用win 7 中的nfs client (客户端)功能,两台电脑都是ghost的旗舰版(两台使用的是不同的ghost文件),其中有一台能在控制面板->程序和功能->打开或关闭wind ...

  9. linux卸载nfs软件,linux nfs客户端卸载

    NFS客户端对于同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能,建议修改为128.本文介绍如何修改同时发起的NFS请求数量. 您可以通过以下两种方法修改同时发起的NFS ...

最新文章

  1. SVN优化(一) SVN忽略maven项目的target
  2. 第一课 第四节 数据转换
  3. 单片机彩灯移动实验_单片机课程设计彩灯实验.doc
  4. 转载:static的初始化顺序
  5. 【Linux】一步一步学Linux——netstat命令(166)
  6. Linux Increase The Maximum Number Of Open Files / File Descriptors (FD)
  7. Linux中Shell循环结构for用法笔记
  8. Maven的资源坐标
  9. 前端学习(777):Math对象
  10. JVM整体架构与调优参数说明
  11. 数学建模-2.优劣解距离法Topisis模型
  12. 安卓10侧边返回_Android 之路 (10) - 集成滑动返回(SwipeBackLayout)
  13. 洛谷——P1319 压缩技术
  14. MQTT服务器Mosquitto安装及使用
  15. To B 创业的本质,是求增速与生存环境的平衡
  16. Drools规则引擎使用
  17. 超全地牢场景unity3d模型素材网站整理
  18. imagej得到灰度图数据_ImageJ的高级使用方法
  19. React路由ReactRouter6
  20. 计算机基础与程序设计自考怎么过

热门文章

  1. silva132_与詹姆斯·席尔瓦(James Silva)的对话,
  2. Android - ReactNative Debug 技巧
  3. 清华系ChatGPT发布!唐杰团队打造,专对中文优化,还能把握最新新闻动态
  4. python画图设置字体_【转】matplotlib画图时的中文设置
  5. diea社区版如何创建springboot
  6. 第五章.MyBatis高级映射
  7. 定向网络攻击分析与防御
  8. 【自建NAS】基础环境搭建,几行命令建成私有云盘,无复杂配置
  9. RPi.GPIO 官方使用文档翻译
  10. 「Luogu2495」 [SDOI2011]消耗战 虚树