快速定位阻塞点
-
检查挂载点类型
mount | grep -E "$(df -h | awk 'NR>1{print $6}')"
- 重点关注NFS/CIFS等网络存储:网络延迟或服务端故障是常见原因。
- 留意FUSE文件系统(如GlusterFS、s3fs):用户态文件系统易受进程异常影响。
-
查看进程状态
新开终端执行:strace -p $(pgrep -f "df -h") # 跟踪df进程的系统调用
- 若卡在
statfs()
调用:表明特定挂载点文件系统响应超时。 - 若显示
connect()
阻塞:确认网络存储连通性。
- 若卡在
分场景深入排查
▶ 场景1:网络存储(NFS/CIFS)问题
- 基础连通性测试
rpcinfo -p <NFS_Server_IP> # 检查NFS服务端口 smbclient -L //<Samba_Server> -U user # Samba列表测试
- 卸载卡死的挂载点
umount -f -l /mnt/nfs # -l 惰性卸载,-f 强制操作
⚠️ 警告:强制卸载可能导致数据损坏,优先联系存储管理员确认服务状态。
▶ 场景2:本地文件系统故障
- 检查磁盘健康
smartctl -a /dev/sdX # 查看S.M.A.R.T.信息 dmesg -T | grep -i "error\|sdX" # 检索内核磁盘错误
- 修复文件系统(紧急操作)
umount /dev/sdX1 # 必须卸载后操作 fsck -y /dev/sdX1 # 自动修复错误
📌 重要:操作前务必备份数据!若无法卸载,重启进救援模式执行。
▶ 场景3:内核或进程级阻塞
-
查看D状态进程
ps -eo pid,stat,cmd | grep "^[0-9]* D" # 定位不可中断睡眠进程
- D状态进程:通常是等待I/O的进程,可能因硬件故障或驱动问题卡死。
-
内核信息收集
echo l > /proc/sysrq-trigger # 触发线程堆栈输出(需启用sysrq) dmesg -T > /tmp/dmesg.log # 保存完整内核日志
进阶诊断工具
工具 | 命令示例 | 作用 |
---|---|---|
lsof | lsof /mnt/hang_disk |
查看占用挂载点的进程 |
systemtap | stap -e 'probe ioblock.* {...}' |
动态跟踪块I/O事件 |
perf | perf record -g -a sleep 30 |
采样全系统调用链 |
预防与优化建议
-
挂载参数调整
# NFS优化示例: mount -o soft,timeo=10,retrans=2 server:/path /mnt
soft
:超时后返回错误而非无限重试timeo
:超时时间(十分之一秒)
-
监控策略
- 部署Prometheus+Node_Exporter监控
node_filesystem_files{state="free"}
等指标 - 对网络存储配置独立心跳检测
- 部署Prometheus+Node_Exporter监控
-
高可用设计
- 关键存储使用多路径IO(multipath)
- NFS集群部署结合Keepalived实现VIP漂移
总结排查流程
graph TD A[df卡住] --> B{检查挂载类型} B -->|网络存储| C[测试服务端连通性] B -->|本地磁盘| D[检查SMART/内核日志] C --> E[强制卸载+修复服务] D --> F[fsck修复/更换磁盘] B -->|未知原因| G[strace跟踪+分析D状态进程] G --> H[收集内核信息/联系厂商]
引用说明:
- Linux man-pages: strace(1), mount(8)
- Red Hat知识库: 当NFS挂载卡住时的处理方案
- Linux内核文档: sysrq.txt
操作警示:生产环境执行高危命令前,务必在测试环境验证并制定回滚计划,本文内容基于通用Linux发行版(RHEL/Debian)实践,特殊硬件或定制内核需参考厂商文档。
通过以上结构化排查,可解决95%以上的df
卡住问题,当问题涉及内核层时,建议结合kdump
捕获崩溃转储并提交Linux社区分析。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/5462.html