df是磁盘排查首个命令,直接读取文件系统元数据,快速定位“哪块地盘绷紧了”;需重点看Use%、Avail、Mounted on和Filesystem四列,配合df -i查inode耗尽,用lsof +L1查已删未释放文件,并结合挂载点用du -sh逐层下钻定位。

遇到磁盘占满故障,df 命令是第一个必须执行的诊断工具。它不扫描文件,而是直接读取文件系统元数据,响应快、结果准,能立刻告诉你“哪块地盘绷紧了”。
看懂 df -h 输出的关键字段
执行 df -h 后,重点关注四列:
- Use%:使用率超过 90% 就要警惕,100% 时普通用户通常无法写入(ext4 默认保留 5% 空间给 root)
- Avail:实际可用空间,比 Used 和 Size 的差值更可信——有些文件系统会预留空间,Size - Used ≠ Avail
- Mounted on:挂载点,决定问题影响范围。比如 /var 满了,可能影响日志、邮件、数据库临时文件;/tmp 满了,很多程序会启动失败
- Filesystem:对应具体设备(如 /dev/vda1)或虚拟文件系统(如 tmpfs),便于后续针对性处理
快速定位真实瓶颈:用 df -i 查 inode 是否耗尽
当系统报 No space left on device,但 df -h 显示还有几百 MB 可用,大概率是 inode 耗尽。小文件多的场景特别容易触发:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 执行 df -i,查看 IUse% 列。超过 95% 就需干预
- 常见高危目录:/var/spool/mail(邮件队列)、/tmp(临时文件)、/var/lib/docker/overlay2(容器层碎片)
- 清理方向不是删大文件,而是用 find /path -type f | wc -l 找出文件数量最多的子目录,再按需清理
发现 df 和 du 结果严重不符?重点查“已删未释放”文件
df 显示用了 80GB,du 统计所有目录加起来才 30GB——差额基本来自被 rm 删除但进程仍在写入的文件。这类文件在目录树中不可见,du 统计不到,但 df 仍计入已用空间。
- 运行 lsof +L1 或 lsof | grep deleted,列出所有标记为 deleted 的打开文件
- 典型占用进程:nginx(access.log)、java 应用(堆转储或日志)、rsyslog、MySQL(binlog、slow log)
- 临时释放空间:对日志类文件可执行 echo > /proc/PID/fd/FD_NUM 截断(需 root 权限);稳妥做法是重启对应服务
结合挂载点精准缩小排查范围
不要一上来就 du -sh /* 全盘扫描。先用 df 锁定问题分区,再聚焦该挂载点下的路径:
- 若 /var 使用率异常高,执行 du -sh /var/* 2>/dev/null | sort -hr | head -10
- 加上 2>/dev/null 忽略权限错误,避免卡住;sort -hr 按人类可读大小倒序排列
- 逐层下钻:比如发现 /var/log 占用最大,再执行 du -sh /var/log/* | sort -hr,定位具体日志目录

















