Linux 文件系统故障诊断案例集锦:真实生产事故复盘与预防
一、空间相关故障(最常见 Top 3)
案例1:df 显示 100% 满,du 却只显示 60%(Deleted 文件幽灵占用)
现象:/var 分区告警 98%,业务写日志失败,但 du -sh /var 只显示 65%。
根因:大量进程(主要是 Java/Nginx)仍持有已删除文件的句柄(deleted but open)。
排查命令:
lsof +L1 | grep deleted
ls -l /proc/*/fd/* | grep deleted | wc -l
fuser -u /var
修复:重启对应服务或 kill -9 持有句柄的进程,空间瞬间释放。
预防:logrotate 配置 copytruncate 或 delaycompress,监控 lsof +L1 数量 > 50 即告警。
案例2:inode 耗尽,磁盘却还有 40% 空间
现象:无法创建新文件,报 No space left on device。
根因:/tmp 下百万级小临时文件(通常是 PHP、Python 临时文件或日志碎片)。
排查:
df -i
find /tmp -xdev -type f | wc -l
修复:find /tmp -type f -mtime +1 -delete + 改为 tmpfs。
预防:/tmp 必须挂载为 tmpfs + systemd-tmpfiles 定时清理,inode 比例格式化时调高。
案例3:LVM 快照空间耗尽导致全卷 IO 挂起
现象:数据库突然只读,iostat 显示 await 超 500ms。
根因:LVM COW 快照写满,未及时合并。
排查:lvs -o +snap_percent
修复:lvconvert --merge 或扩大快照体积。
预防:监控 snap_percent > 70% 自动告警 + 定时合并脚本。
二、权限与链接相关故障
案例4:Nginx 403,但文件明明存在(权限逐级问题)
现象:namei -m 排查发现上级目录无 x 权限。
修复:chmod o+x /data 或正确 chown。
预防:上线前必须执行 namei -m 检查路径权限。
案例5:软链接悬空 + 硬链接空间不释放
现象:rm 删除文件后空间未释放,ls 显示 -> 断链。
排查:find / -type l -xtype l 和 lsof +L1
预防:软链接统一使用绝对路径,定期清理断链;硬链接仅用于零成本备份。
三、文件系统损坏与修复案例
案例6:ext4 突然只读,fsck 报 superblock 错误
现象:mount -o remount,rw 失败。
排查:dmesg | grep EXT4
修复:进入 rescue mode,e2fsck -f -y /dev/sda1。
预防:开启 barrier=1 + UPS + 定期 tune2fs 检查。
案例7:XFS 元数据损坏,xfs_repair -L 清日志
现象:xfs_repair 提示日志不一致。
修复:xfs_repair -L(最后手段,丢失最近事务)。
预防:XFS 生产分区必须配合 LVM 快照。
案例8:Btrfs 碎片化严重,ls 命令都变慢
现象:btrfs filesystem df 显示碎片率高。
修复:btrfs balance start -dusage=80 /data + btrfs scrub。
预防:每周定时 balance + autodefrag 挂载选项。
四、网络文件系统与容器卷故障
案例9:NFS Stale file handle
现象:服务端文件被删除,客户端报 Stale NFS file handle。
修复:客户端 umount -f 后重新挂载。
预防:NFSv4.2 + soft + timeo=600 + 监控 showmount。
案例10:Kubernetes PV 挂载失败,Pod CrashLoopBackOff
现象:kubectl describe pod 显示 MountVolume.SetUp failed。
常见根因:NodeAffinity 不匹配、StorageClass 参数错误、fsGroup 权限。
排查:kubectl get pv,pvc + journalctl -u kubelet
预防:StorageClass 统一模板 + fsGroup 强制设置。
案例11:overlay2 层数爆炸,Docker 启动极慢
现象:du -sh /var/lib/docker/overlay2 巨大。
修复:docker system prune -a --volumes + 重启 Docker。
预防:定期清理 + 使用 Longhorn/Rook 替代本地 overlay。
五、云存储集成故障
案例12:AWS EFS Burst Credit 耗尽
现象:突发高 I/O 后性能骤降。
修复:切换 Max I/O 模式 + Provisioned Throughput。
预防:CloudWatch 监控 BurstCreditBalance < 20% 告警。
案例13:阿里云 NAS 权限映射不一致
现象:Linux 侧 uid 1000,NAS 侧显示 nobody。
修复:使用 Access Point + 正确 uid/gid 映射。
六、加密与配额相关故障
案例14:LUKS 密钥丢失,无法挂载
现象:cryptsetup luksOpen 失败。
修复:header 备份恢复 + 密钥找回。
预防:LUKS header 每日备份到 Vault + TPM2 绑定。
案例15:quota 超限未告警,导致业务写入失败
预防:每日 repquota 巡检 + Prometheus 自定义指标。
(因篇幅限制,以上仅展示部分经典案例,完整版包含 20 个案例,涵盖日志轮转失败、fstrim 未执行导致 SSD 衰退、bind mount 循环、procfs 被刷导致负载高等场景。)
七、通用故障诊断方法论(推荐 SOP)
- 现象收集:dmesg、journalctl -xe、df -hT、iostat -x 1 5
- 空间/ inode:df -h、df -i、lsof +L1
- 权限/链接:namei -m、find -type l -xtype l
- 文件系统一致性:fsck -n / xfs_repair -n
- 进程关联:lsof、fuser、/proc/pid/fd
- 云/网络:nfsstat、showmount、云监控
- 容器:kubectl describe + docker logs
- 根因定位 → 临时规避 → 永久修复 → 预防措施