Linux 服务器磁盘突然占满?我按这 5 步排查和清理

举报
yd_259998656 发表于 2026/11/11 07:17:04 2026/11/11
【摘要】 服务器报警最常见的一种,就是磁盘使用率突然飙到 90% 以上。第一次遇到容易慌,其实排查路径很固定:先定位是谁在占,再决定删什么,最后补上预防措施。这篇记录我自己处理这类问题的一套流程,命令都可以直接套用。 第一步:先看整体,确认是哪块盘满了df -h看 Mounted on 和 Use% 两列,先确认是系统盘、数据盘还是某个单独挂载点满了。注意还有一种隐形情况:文件数(inode)耗尽,表...

服务器报警最常见的一种,就是磁盘使用率突然飙到 90% 以上。第一次遇到容易慌,其实排查路径很固定:先定位是谁在占,再决定删什么,最后补上预防措施。这篇记录我自己处理这类问题的一套流程,命令都可以直接套用。

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

df -h

看 Mounted on 和 Use% 两列,先确认是系统盘、数据盘还是某个单独挂载点满了。注意还有一种隐形情况:文件数(inode)耗尽,表现和磁盘满几乎一样,顺手一起查:

df -i

如果 inode 100% 但空间还剩很多,问题多半是海量小文件,排查方向完全不同。

第二步:逐层往下找大目录

du -h -x / | sort -rh | head -20

-x 的作用是只统计当前文件系统,不跨挂载点,避免把别的盘也算进来。从根目录列出最大的 20 个,再对可疑目录继续往下 du,一层层缩小范围,一般两三层就能定位到具体目录。常见的元凶就几个:/var/log 日志、/var/lib/docker 镜像和容器、某个应用自己的数据或缓存目录。

第三步:找具体的大文件

find /var -type f -size +500M -exec ls -lh {} \; 2>/dev/null

把范围限定在第二步定位到的目录里,找超过 500MB 的单个文件。日志文件异常膨胀是最常见的,比如某个服务报错后疯狂刷日志,一夜之间写出几个 GB。

第四步:清理时注意"删了空间却不释放"的坑

删日志别直接 rm 正在被进程写的文件——文件删了,但进程还握着句柄,空间不会释放,df 看还是满的。正确做法是清空内容:

> /var/log/app.log

或者用 truncate。已经 rm 掉但空间没回来的,用 lsof 找已删除仍被占用的文件:

lsof | grep deleted

重启对应服务释放句柄,空间就回来了。系统日志则用 journalctl 正规清理:

journalctl --vacuum-time=7d

只保留最近 7 天。Docker 占的空间用 docker system df 先看构成,再考虑清理无用镜像和停止的容器,数据卷别乱动。

第五步:补预防,别下个月再来一次

定位到根源后,花十分钟把复发堵上:给日志配 logrotate 并设置大小上限和保留份数;给关键目录做简单的使用率监控,80% 就告警,别等 100% 业务受影响才发现;应用日志级别在线上别长期开 debug。这三件事做完,这类报警基本就很少再见了。

总结一下:df 看全局,du 逐层定位,find 抓现行,清理时注意句柄问题,最后补上轮转和监控。磁盘满不可怕,可怕的是删错东西——动手前先看清文件属于谁、还在不在被使用,稳一点比快一点重要。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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