磁盘空间告警时,df与du的差值揭示真实瓶颈:df -h定位高占用分区,df -i确认是否inode耗尽,若iuse%≥95%则清理小文件目录;若use%高而iuse%低,则用du分层下钻、find筛大文件、lsof +l1查已删未释放文件。

磁盘空间告警时,df 和 du 的差值就是突破口。关键不是“哪个大”,而是“为什么不一样”——差值指向真实瓶颈。
先用 df 锁定问题分区和异常类型
执行 df -h 查所有挂载点,重点关注 Use% ≥ 90% 的分区(如 /、/var、/home)。确认目标后,立刻运行 df -i 检查 inode 是否耗尽——日志暴增、容器临时文件多、小文件密集场景下,inode 耗尽比块空间满更隐蔽也更致命。
- 若
Use%高但IUse%也接近 100%,说明大量小文件占满索引节点,删文件未必见效,得清理或轮转小文件目录(如/var/log/journal或容器/tmp) - 若
Use%高而IUse%很低,说明是大文件或“幽灵文件”在占块空间,进入下一步
再用 du 分层定位可见大户
进入高占用分区根目录(如 cd /var),运行:
du -sh --max-depth=1 2>/dev/null | sort -hr
它列出一级子目录总大小,快速识别前几名(如 /var/log、/var/cache)。对排前三的目录继续下钻:
-
du -sh log/* 2>/dev/null | sort -hr | head -5—— 看具体哪些日志子目录最大 -
du -sh --exclude=/proc --exclude=/sys --exclude=/dev /var—— 跳过虚拟文件系统,避免误统计
用 find 快速抓出孤立大文件
当目录内文件极多、du 扫描慢,直接按 size 筛选更高效:
find /var -type f -size +500M -exec ls -lh {} \; 2>/dev/null- 限定范围提速:
find /var/log -name "*.log" -size +100M -exec ls -lh {} \; - 查出大文件后,用
lsof -nP | grep "filename"确认是否被进程持续写入(如catalina.out、nginx.log)
最后用 lsof 揪出已删未释放的“幽灵文件”
如果 df 显示用了 95GB,du 加起来才 60GB,差值大概率是已 rm 但进程没释放的文件。运行:
- sudo lsof +L1 —— 列出所有链接数为 0 的打开文件
- 输出中类似这行就是线索:
java 1234 root 1w REG 8,1 2.1G 123456 /var/log/app.log (deleted) - 对应 PID 的服务重启后,空间立即释放;不建议
kill -9,优先用systemctl restart xxx或优雅 reload
不复杂但容易忽略:差值不是误差,是线索。











