磁盘空间突然减少通常源于进程持续写入、日志疯长、缓存堆积或临时文件未清理;应先用df -h定位告警分区,再逐层du -h –max-depth=1配合sort -hr缩小范围,最后用find找大文件并谨慎处理。

磁盘空间突然减少,通常不是因为文件凭空变大,而是某个进程持续写入、日志疯长、缓存堆积或临时文件未清理。关键不是“删得快”,而是“找得准、动得稳”。下面分三步讲清楚怎么快速定位真正的大文件。
先看哪块盘满了
用 df -h 看整体占用,重点关注 Use% 列超过 90% 的挂载点。比如输出里显示 /dev/vda1 97% /,说明根分区告急;如果 /dev/vdb1 95% /data,那问题在数据盘。别一上来就进 /var/log 盲查——先确认目标分区,省一半时间。
逐层缩小范围找大目录
进到告警的挂载点(如 cd /),运行这组命令:
- du -h –max-depth=1 * 2>/dev/NULL | sort -hr | head -10:列出当前层各目录大小,取前10名
- 挑出最大的那个(比如
/var占了 35G),再进它:cd /var - 重复上一步:
du -h --max-depth=1 * 2>/dev/null | sort -hr | head -10 - 常见“高危区”优先查:
/var/log、/var/lib/docker、/tmp、/root
精准揪出单个大文件
进入可疑目录后,直接搜大文件:
- 找大于 500MB 的文件:find . -type f -size +500M -exec ls -lh {} ;
- 想按大小排序显示:find . -type f -size +100M -print0 | xargs -0 du -h | sort -hr
- 特别注意正在被写入的日志(如
catalina.out、mysql-bin.000xxx):用 lsof +L1 或 lsof | grep deleted 查看是否已被删除但句柄仍被进程占用
删之前多问一句:它能动吗?
找到文件不等于立刻 rm:
- 日志类(
.log):优先用 echo “” > filename 清空内容,保留文件和权限 - 已确认无用的归档/备份:
rm -f安全删除 - binlog、journal、core dump 类:查清来源服务,停服务再删,或配置自动轮转(logrotate/systemd-journald)
- 不确定的文件:先 ls -l 看属主、修改时间、权限;再 file 或 head -n 5 看内容类型