磁盘满了先别急着删文件:用 df 和 du 把空间占用讲清楚
磁盘满了,第一反应常常是赶紧删文件。但删错文件比磁盘满更麻烦:日志、备份、数据库文件一旦删错,服务可能直接起不来。更稳的做法是先把空间占用讲清楚:哪个挂载点满了,是谁占的,再决定删什么、留什么。
第一步:用 df 看哪个挂载点满了
df 看的是文件系统整体使用情况,也就是挂载点层面。
df -h
df -h /var
重点看 Use% 和 Mounted on。根分区满了和数据盘满了,处理思路完全不同。/var 满了多半是日志,/tmp 满了多半是临时文件,数据盘满了要先看业务数据和备份。
还有一个容易被忽略的指标是 inode:
df -i
如果磁盘空间还剩不少,但 inode 用满了,小文件太多也会导致无法写入新文件。这时删大文件没有用,要找小文件多的目录。
第二步:用 du 从大到小往下钻
确定挂载点后,用 du 看目录占用,再一层层往下钻,不要一上来就全盘扫描。
du -sh /var/*
du -sh /var/log/* | sort -rh | head -20
du -h --max-depth=1 / | sort -rh | head -20
du -sh 是看某个目录总和,–max-depth=1 是只看一层,避免输出淹没重点。排到前面的目录,再对它重复一次,直到定位到具体文件或日志目录。
第三步:区分能删、能清、不能动三类
能删的:明确的临时文件、已过期的旧备份、自己生成的测试数据,确认无用后再删。
能清但不能直接删的:正在被进程写着的日志文件。直接 rm 正在写入的日志,空间往往不会立刻释放,因为进程还持有文件句柄。更稳的是先确认服务是否可以重启,或者用截断方式处理,并先备份关键日志。
不能动的:数据库数据文件、正在运行的应用目录、系统关键目录,以及不确定归属的文件。拿不准就先不动,先查归属和最近修改时间。
一个可复用的排查顺序
- df -h:确认哪个挂载点满了。
- df -i:排除 inode 满了的情况。
- du -sh 加 sort:从大目录一层层往下钻。
- ls -lh 和最近修改时间:确认大文件是谁、什么时候产生的。
- 先清理临时和过期文件,再处理日志,最后才考虑扩容或迁移数据。
常见误区
只看 df 就删文件:df 只能告诉你满了,不能告诉你谁占的。
一上来就 du 全盘:根目录全量扫描又慢又容易被系统目录干扰。
删了文件空间没回来:先检查是不是被删除但仍被进程占用的文件,或者是不是另一个挂载点的问题。
把清理当成一劳永逸:日志和备份会继续增长,清理完要顺手看一下日志轮转和备份保留策略,否则几天后还会再满一次。
先讲清楚占用,再动手清理,磁盘满就从一次事故变成一次可复现的排查流程。
- 点赞
- 收藏
- 关注作者
评论(0)