Linux常见故障处理之df命令卡住不输出

一、背景说明

  朋友咨询Linux系统下输入df -h命令后没有任何输出结果,博主的第一反应是/根分区磁盘空间满了,朋友说cd等其他命令可以执行。博主又猜测可能是有人误定义了命令别名,进一步确认命令卡住在等待输出页面。事后博主想起来可能是共享网络磁盘无法访问导致的,博主曾经遇到过一次nfs挂载配置到了/etc/fstab中,服务器重启之后因为nfs服务端挂掉了导致服务器无法启动。

  为了验证博主的想法搭建了一个实验环境,环境说明如下:

  • nfs-server操作系统:centos7.6
  • nfs-client操作系统:centos6.5

二、验证方案

1、搭建NFS服务端

  关于NFS服务的搭建我们可以参考博文Linux之centos7环境搭建NFS服务器

root@s76 publicdata# systemctl status nfs-server

2、NFS客户端挂载

  客户端上安装showmount软件包,然后挂载nfs共享磁盘即可。

root@localhost~# mount -t nfs 192.168.10.76:/publicdata /test

root@localhost~# df -hT

3、模拟NFS server服务故障

  为了模拟NFS server服务故障我们可以停止nfs服务或者通过防火墙阻断NFS服务。

root@s76 publicdata# systemctl stop nfs-serve

4、验证df命令

  当NFS服务挂掉的情况下,不仅df命令、ls等查看磁盘目录的命令如果涉及到/挂载目录也会出现命令卡住没有输出的情况。df命令还可以通过ctrl+C命令中断回到shell中断,ls命令甚至无法通过ctrl+C或者ctrl+Z命令返回重新执行。

5、恢复NFS server服务再次验证

  NFS server服务恢复后再次验证,df -hT命令执行的时候还是会卡住,等个几秒钟,nfs客户端会与NFS server重新建立连接,并正常输出信息。

root@localhost~# df -hT

Filesystem Type Size Used Avail Use% Mounted on

/dev/sda3 ext4 36G 2.0G 32G 6% /

tmpfs tmpfs 931M 0 931M 0% /dev/shm

/dev/sda1 ext4 291M 39M 238M 14% /boot

192.168.10.76:/publicdata nfs 56G 5.2G 51G 10% /test

6、别名的可能性验证

  如下测试结果,如果是正常的"df -h"没有输出不可能是别名的原因,因为别名不能包含空格,如果是错误输入df-h命令是可以通过别名实现如上效果的。当然为了确认别名的问题,我们还可以使用which命令验证确认是否为别名。

root@localhost/# alias df-h="echo "";sleep 1000"

root@localhost/# df-h

root@localhost/# which df

/bin/df

7、根分区满导致此现象的可能性验证

  我们可以尝试将跟分区磁盘空间写满,直到无法写入。虽然显示100%使用,实际上不会是完整的刚好百分百,但是这种情况我们还是可以执行df -h命令。所以经验证根分区满不会导致此现象。

dd if=/dev/zero of=/fill_disk bs=100M count=100

root@localhost/# dd if=/dev/zero of=/fill_disk7 bs=1k count=1

三、NFS server服务宕机的情况重启服务器验证

1、停止nfs server服务

root@s76 publicdata# systemctl stop nfs-server

2、将nfs挂载写入到/etc/fstab

root@localhost~# cat /etc/fstab |grep test

192.168.10.76:/publicdata /test nfs defaults 0 0

3、重启nfs客户端服务器

root@localhost~# reboot

4、控制台登录验证

  控制台登录验证对比发现nfs共享磁盘配置在/etc/fstab中会停留在如何页面数分钟,最终还是可以启动成功。如果没有在/etc/fstab中配置NFS共享磁盘自动挂载则很快启动完成。

四、故障原因及处置步骤

一、故障原因分析

  如上实验所示,df命令卡住无输出的原因就是nfs共享磁盘无法访问导致。df命令不仅会读取本地磁盘,也会读取挂载的其他任意磁盘,当无法连接到远程的nfs服务的时候就会一直在等待nfs server服务回复消息。

二、建议处置步骤

  针对不同业务场景,建议如下:

  • 如果是对于熟悉的环境知道nfs服务所在地址,我们可以登录nfs server服务器启动nfs服务,重新执行命令等待结果输出;
  • 如果是不熟悉的陌生环境,建议先通过history命令查看历史挂载记录,查看/etc/fstab文件等确认可能的nfs server地址,然后登录nfs服务器启动nfs服务后重新挂载。
  • 如果是nfs服务器执行了迁移调整,我们可以先取消nfs服务挂载,然后重新挂载新的nfs共享磁盘。

root@localhost~# umount -a -t nfs

相关推荐
戴为沐4 小时前
Linux内存扩容指南
linux
zylyehuo14 小时前
Linux 彻底且安全地删除文件
linux
用户805533698031 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297911 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
Web3探索者3 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo3 天前
Linux系统中网线与USB网络共享冲突
linux
Sokach10154 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
AlfredZhao5 天前
Docker 容器时区不对,`timedatectl` 不存在怎么办?
linux·timezone
zzzzzz3106 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
XIAOHEZIcode6 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏