Linux 磁盘满了别急着删:df、du 一套组合拳先找到元凶

举报
yd_283162409 发表于 2026/10/25 06:48:08 2026/10/25
【摘要】 一、先看全貌:df -h磁盘满了,第一反应往往是到处删文件。其实第一步应该是先看全貌:哪个分区满了,满到什么程度。df -h-h 是把字节换算成人类可读的 G、M。重点看 Use% 这一列,根分区到了 90% 以上就要动手了,100% 则很多服务会直接写不进文件、开始报错。还要注意:df 看到的是文件系统层面,如果某个目录被挂载点盖住了,下面原来的文件是看不见的,这时候 du 和 df 对不...

一、先看全貌:df -h

磁盘满了,第一反应往往是到处删文件。其实第一步应该是先看全貌:哪个分区满了,满到什么程度。

df -h

-h 是把字节换算成人类可读的 G、M。重点看 Use% 这一列,根分区到了 90% 以上就要动手了,100% 则很多服务会直接写不进文件、开始报错。还要注意:df 看到的是文件系统层面,如果某个目录被挂载点盖住了,下面原来的文件是看不见的,这时候 du 和 df 对不上,往往就是挂载点遮挡的老文件在作怪。

二、再定位:du 顺着大目录往下钻

知道哪个分区满了,下一步是找大目录:

du -h --max-depth=1 / | sort -rh | head -20

这条命令列出根目录下一级各自占了多少,从大到小排。看到最大的目录就 cd 进去,再跑一次,一层一层往下钻,直到找到吃空间的大户。注意 du 默认会跟随到子目录,跑根分区时可能比较慢,耐心等它跑完;也可以先用 -x 把它限制在同一个文件系统内,避免钻进别的挂载分区。

三、常见元凶:日志、缓存和旧备份

实战里最常见的几类:/var/log 下滚雪球的日志,某个服务没配轮转,几个月下来能吃掉几十个 G;包管理器的缓存;还有遗忘在角落的手工备份 tar 包。处理日志之前先看一眼是不是还在被写入,正在疯狂增长的日志光删文件没用,得先找到对应的服务,把日志级别或轮转配好,不然删完第二天又满了。

四、删之前先查 lsof:删了文件空间却没回来

有一种经典场面:文件明明删了,df 一看空间一点没回来。原因通常是文件还被某个进程拿着句柄,内核要等进程释放才真正回收。用 lsof 能看到这类 deleted 状态的文件:

lsof | grep deleted

确认之后,重启对应的服务或者让进程重开日志句柄,空间才会真正释放。所以删日志文件之前,先想想它是不是还被服务打开着。

五、日常预防比救火便宜

救一次火很累,不如把预防做在前面:给日志配 logrotate,按时间和大小自动轮转压缩;/tmp 和缓存目录定期清理;磁盘用量设个 80% 的告警线,到了就提醒,别等到 100% 服务报错才发现。df 和 du 这两个老命令看着不起眼,但配合起来就是一套完整的排查流程:df 定分区,du 定位目录,lsof 确认句柄,最后再动手删。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。