当前位置:首页>Linux>Linux 文件系统故障诊断案例集锦:真实生产事故复盘与预防

Linux 文件系统故障诊断案例集锦:真实生产事故复盘与预防

  • 2026-10-11 14:36:33
Linux 文件系统故障诊断案例集锦:真实生产事故复盘与预防

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)

  1. 现象收集:dmesg、journalctl -xe、df -hT、iostat -x 1 5
  2. 空间/ inode:df -h、df -i、lsof +L1
  3. 权限/链接:namei -m、find -type l -xtype l
  4. 文件系统一致性:fsck -n / xfs_repair -n
  5. 进程关联:lsof、fuser、/proc/pid/fd
  6. 云/网络:nfsstat、showmount、云监控
  7. 容器:kubectl describe + docker logs
  8. 根因定位 → 临时规避 → 永久修复 → 预防措施

最新文章

随机文章