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

相关推荐
groundhappy3 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕4 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫5 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生5 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.116 小时前
linux基础IO
linux·运维·服务器
BelongPanda8 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯8 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_777998349 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器
yunwei379 小时前
eBPF 教程:检查 exec 后真正安装的可执行镜像
linux·开源
笑锝没心没肺9 小时前
yum update 报错:GPG key retrieval failed: [Errno 14] HTTPS Error 404 - Not Found
linux·运维·服务器