磁盘空间告警时应按“df→du→find→lsof→清理”顺序排查:先用df -h定位满载分区,再用du -sh逐级筛查大目录,接着用find查找大文件和日志,通过lsof +L1识别已删未释放文件,最后针对性清理日志、缓存等。

磁盘空间告警一响,别急着删文件。先找准“真凶”,再动手,才能既快又稳不翻车。
第一步:看清哪块盘真满了
用 df -h 快速扫一遍所有挂载点,重点关注 Use% 列:
- 数值接近或达到 100% 的分区,就是主战场(比如
/dev/sda1 100% /) - 注意区分:/var/lib/docker/overlay2 占满 ≠ 容器数据多,可能是日志没限流或镜像残留
- 若发现
tmpfs或/dev/shm高占用,通常是内存映射异常,不是磁盘问题
第二步:顺藤摸瓜找大目录
锁定满的挂载点(如 /)后,从顶层往下筛:
-
sudo du -sh /* 2>/dev/NULL | sort -hr—— 看根下谁最大(常见嫌疑:/var、/home、/data) - 进到大目录里继续挖:
cd /var && sudo du -sh * 2>/dev/null | sort -hr - 想省力又全面?加
--max-depth=2一步看到二级子目录:sudo du -h --max-depth=2 /var | sort -hr | head -n 15
第三步:揪出具体的大文件
目录定位清楚后,直接搜文件更高效:
- 查大于 500MB 的文件:
find / -xdev -type f -size +500M 2>/dev/null -exec du -h {} ; | sort -hr | head -n 10 - 专盯日志:
find /var/log -name "*.log*" -size +100M 2>/dev/null - 别漏掉“已删但未释放”的文件:
lsof +L1或lsof | grep deleted,找到 PID 后重启对应服务即可腾空间
第四步:安全清理不踩坑
清理前先确认类型,再选合适方式:
- 日志文件:优先
sudo truncate -s 0 /path/to/huge.log(清空不删),或用journalctl --vacuum-size=200M控制 systemd 日志 - 临时文件:/tmp 下可删旧文件:
find /tmp -type f -mtime +7 -delete - docker 日志:全局限制写入
/etc/docker/daemon.json加"log-opts": {"max-size": "10m", "max-file": "3"} - 包缓存:ubuntu 用
apt clean,centos 用yum clean all,Snap 用户别忘rm -rf /var/cache/snapd/
基本上就这些。顺序不能乱:看 df → 挖 du → 找 find → 查 lsof → 再清理。熟练了,5 分钟内定位+释放不是难事。