最常见原因是已删除但被进程占用的文件;可用lsof +L1或find /proc/*/fd -ls | grep deleted定位,再通过SIGHUP或kill释放,同时排除挂载覆盖、预留空间、快照等干扰。

df -h 显示 100% 但 du 统计总和远小于实际用量
这种情况不是磁盘真满了,而是有文件被进程打开后删除了,空间没释放。df 统计的是文件系统级块占用,du 只统计目录树里还“可见”的文件,已删但未关闭的文件不会出现在 du 结果里。
执行以下命令确认:
lsof +L1
输出中带 (deleted) 标记、且 SIZE 列很大的行就是元凶。常见于:
-
java进程持续写catalina.out后被rm删除 -
mysqld持有旧 binlog 文件句柄 -
nginxworker 进程仍在追加写已被轮转删除的 access.log
临时解决:重启对应服务;长期解决:确保日志轮转后触发 kill -USR1 或 systemctl reload 让进程重新打开日志文件。
df -i 显示 IUse% 100% 但 df -h 还有空间
这是 inode 耗尽,典型表现是能读文件但无法创建新文件、No space left on device 错误持续出现,即使 df -h 显示还有几十 GB 空闲。
快速定位小文件爆炸源:
find /var -xdev -type f | cut -d/ -f 1-3 | sort | uniq -c | sort -nr | head -10
重点关注:
-
/var/log/journal/:systemd-journald 默认不设大小限制,可能积累数百万个微小日志对象 -
/var/spool/postfix/maildrop/:邮件队列积压 -
/tmp或/var/tmp下大量临时碎片文件(如 Python 的.pyc缓存)
清理建议:
- 限制 journald:
sudo systemctl edit systemd-journald,添加RuntimeMaxUse=500M - 清空 postfix 队列:
postsuper -d ALL(需先确认无关键邮件) - 慎用
rm -rf /tmp/*:某些服务可能正使用其中文件,建议先lsof +D /tmp检查
find 和 du 找不到大文件,但 /var/lib/docker 占用飙升
Docker 是隐藏空间大户,尤其在未配置清理策略的生产环境。du -sh /var/lib/docker 常显示十几 GB,但 du -sh /var/lib/docker/* 各子目录加起来却只有几 GB——说明空间藏在 overlay2 的未引用层或 dangling 镜像里。
精准释放步骤:
- 查看真实镜像/容器/卷占用:
docker system df -v - 清理悬空镜像:
docker image prune -f - 清理已停止容器:
docker container prune -f - 清理未被任何容器引用的 volume:
docker volume prune -f - 强制清理所有构建缓存:
docker builder prune -a -f
注意:docker system prune -a 会删掉所有未运行容器、网络、镜像和构建缓存,务必确认业务无依赖。
MySQL 二进制日志或慢查询日志占满 /var/lib/mysql
MySQL 的 mysql-bin.000xxx 和 slow.log 不受 logrotate 管理,容易失控增长。直接 rm 删除会导致 MySQL 启动失败或主从同步中断。
安全清理方式分两步:
- 登录 MySQL 执行:
PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 3 DAY); - 对慢查询日志:
SET GLOBAL slow_query_log = 'OFF';→truncate table mysql.slow_log;→SET GLOBAL slow_query_log = 'ON';
长期预防:
- 在
my.cnf中设置:expire_logs_days = 3(MySQL 5.7 及以前)或binlog_expire_logs_seconds = 259200(8.0+) - 禁用慢查询日志除非必要:
slow_query_log = 0 - 避免将
datadir和log_bin放在同一分区,防止日志撑爆数据目录
真正难处理的不是单个大文件,而是那些既不显眼、又持续增长、还绑定着运行时状态的东西——比如被进程 hold 住的 deleted 文件、inode 耗尽、Docker dangling layer、MySQL binlog 的生命周期管理。这些地方一疏忽,清理完立刻反弹。


















