磁盘空间告警时应先用df定位高危挂载点和inode耗尽情况,再用du查找大目录,接着用find扫描大文件,最后检查lsof发现的已删未释文件并重启相关进程。

磁盘空间告警时,别急着删文件。先搞清“谁占的、占在哪、能不能动”,整个排查过程其实有清晰路径可循。
看整体:用 df 定位高危挂载点
运行 df -h 查所有分区使用率,重点关注 Use% ≥ 80% 的挂载点(比如 /、/var、/home)。 再加一个 df -i 看 inode 是否耗尽——有时空间还有余量,但因小文件太多导致无法新建文件,这也是“满”的一种表现。
查目录:用 du 锁定大容量来源
进到高危挂载点根目录(如 /),执行:
du -sh /* 2>/dev/NULL | sort -rh | head -15
快速列出顶层目录大小排名。常见“大户”包括:
– /var(日志、docker、缓存)
– /home(用户数据、备份、容器镜像)
– /usr(软件安装、内核旧版本)
– /tmp 和 /var/tmp(残留临时文件)
找文件:用 find 挖出隐藏大文件
对可疑目录进一步扫描,例如:
find /var -type f -size +500M -exec ls -lh {} ; 2>/dev/null
能直接列出大于 500MB 的文件,含路径和大小。重点盯:
– /var/log/*.log 和 *.log.*(滚动日志未清理)
– /var/lib/docker/containers/**/*-json.log(Docker 容器日志)
– /home/*/Downloads 或 /root/.cache(用户缓存堆积)
别漏掉“已删未释”:检查被进程占用的删除文件
有时文件已被 rm,但进程仍在写入,空间不释放。执行:
lsof +L1 或 lsof | grep deleted
会列出这类“幽灵文件”。常见于:
– 长期运行的日志服务(rsyslog、journalctl)
– Docker 容器、java 应用、数据库进程
解决办法:重启对应服务,或用 kill -USR1 触发日志重载(视服务支持而定)。
基本上就这些。流程不复杂,但容易忽略 inode 或已删未释的情况。动手前建议先备份关键配置,清理时优先选可逆操作(如清空日志用 cat /dev/null > file.log 而非直接 rm)。