Linux 磁盘满了别急着删文件:用 df 和 du 四步定位真凶

举报
yd_275127495 发表于 2026/11/09 09:00:20 2026/11/09
【摘要】 服务器突然告警磁盘使用率 100%,网站打不开、数据库写不进、连登录都可能变慢。很多人第一反应是凭感觉删几个大文件,结果删错日志、删掉正在写的文件,问题反而更糟。磁盘满了要先定位:到底是哪类东西占了空间,再决定能不能删、怎么删。第一步:先看整体,确认是哪块盘满了用 df -h 看各挂载点的使用率。重点看 / 和 /var、/data 这些常用挂载点。如果根分区满了,再看是不是某个挂载点没挂上...

服务器突然告警磁盘使用率 100%,网站打不开、数据库写不进、连登录都可能变慢。很多人第一反应是凭感觉删几个大文件,结果删错日志、删掉正在写的文件,问题反而更糟。磁盘满了要先定位:到底是哪类东西占了空间,再决定能不能删、怎么删。

第一步:先看整体,确认是哪块盘满了

用 df -h 看各挂载点的使用率。重点看 / 和 /var、/data 这些常用挂载点。如果根分区满了,再看是不是某个挂载点没挂上,导致数据写到了根分区下面——这种情况删文件没用,得先把盘挂好。

还有一个容易被忽略的可能:inode 用完了。用 df -i 看 inode 使用率,如果 inode 到了 100%,即使磁盘还有空间也写不进新文件。大量小文件(比如缓存、会话文件、邮件队列)最容易把 inode 耗尽,这时要清的是文件数量,而不是文件体积。

第二步:用 du 一层层往下找

确认了满的分区后,用 du -sh /* 看根目录下每个目录的大小,再对最大的那个继续往下钻,比如 du -sh /var/*。这样一层层缩小范围,几分钟就能定位到具体目录。嫌手动麻烦也可以用 du -h --max-depth=2 /var | sort -rh | head -20,直接列出最大的前 20 个。

新手常踩的坑是直接对整个根分区跑 du -sh /,又慢又没用;分层钻取才是正确姿势。还要注意 du 默认不跨文件系统,如果怀疑某个挂载点有问题,加 -x 限制在同一个文件系统内,避免把其他盘的数据也算进来。

第三步:认清三类常见“真凶”,删法各不相同

第一类是日志文件。/var/log 下的日志、Nginx 或应用的访问日志最容易失控。先用 ls -lh /var/log 看大小,再用 tail 确认日志还在正常滚动。删除正在被进程写着的日志文件要小心:直接 rm 删掉后,文件句柄还在进程手里,空间并不会释放,必须重启对应服务或者用 : > file.log 把文件截断为空,后者不用重启服务,空间立刻释放。长远看要配好 logrotate,让日志自动轮转压缩。

第二类是 Docker 相关。docker system df 能看到镜像、容器、构建缓存各占多少。很多机器磁盘满就是构建缓存和悬空镜像堆出来的。docker system prune -a 可以清理未使用的镜像和缓存,但执行前先确认没有正在用的镜像会被误删,生产机上最好先 docker images 看一眼。

第三类是应用缓存和临时文件。/tmp 下的旧文件、应用的上传临时目录、数据库的慢查询日志都可能悄悄膨胀。这类文件删之前先确认没有进程正在用,lsof +L1 可以列出已被删除但仍被进程占用的文件——这些文件表面上已经不在目录里了,空间却一直没释放,重启对应进程才能真正腾出空间。

第四步:删完验证,再做预防

清理后重新跑 df -h,确认使用率降下来了。如果删了不少文件使用率却纹丝不动,多半是上面说的“已删除仍被占用”的情况,用 lsof | grep deleted 找出来,重启对应进程。

更重要的是预防而不是救火。给关键目录设个简单的监控:写个 cron 任务每天跑 df -h,使用率超过 80% 就发告警;日志配好 logrotate 的轮转周期和保留份数;Docker 机器定期跑 docker system prune。磁盘满从来不是突然发生的,都是慢慢涨上来的——早发现,早处理,就不用在半夜删文件救火。

最后提醒一句:删文件之前先问一句“这个文件删了会不会影响正在跑的服务”,不确定的先移走而不是删除,观察一天没问题再删。磁盘空间可以慢慢腾,删错数据的代价却很难挽回。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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