磁盘满了别急着删:df/du 定位大文件一次讲清

举报
yd_252454439 发表于 2026/11/02 10:39:05 2026/11/02
【摘要】 服务器报磁盘满了,服务写不进日志、数据库起不来,很多人第一反应是到处删文件。先别急着删:删错了恢复不了,删对了也只是缓一缓。先定位到底是谁占了空间,再决定删什么,这才是正确的顺序。Linux 上定位就两个命令:df 看整体,du 看细节。先用 df -h 看各挂载点用了多少。重点看 Use% 那一列,根分区 / 满了最要命,因为日志、临时文件、系统服务都往这里写。如果是某个数据盘满了,范围就...

服务器报磁盘满了,服务写不进日志、数据库起不来,很多人第一反应是到处删文件。先别急着删:删错了恢复不了,删对了也只是缓一缓。先定位到底是谁占了空间,再决定删什么,这才是正确的顺序。Linux 上定位就两个命令:df 看整体,du 看细节。

先用 df -h 看各挂载点用了多少。重点看 Use% 那一列,根分区 / 满了最要命,因为日志、临时文件、系统服务都往这里写。如果是某个数据盘满了,范围就小得多。注意一个常见误区:df 显示的是文件系统层面,有时候删了文件空间却没释放——因为还有进程拿着这个文件不放,文件删了但句柄还在,空间就不还。lsof | grep deleted 能找到这类进程,重启对应服务空间就回来了。

确定了是哪个分区满,再用 du 往下钻。du -sh /var/* 这种写法一次看一层,先找到最大的目录,再进一层继续看,一层层收敛,比直接 du -sh /* 漫无目的翻快得多。嫌麻烦就用 du -h --max-depth=1 / | sort -rh | head,直接列出根目录下最大的十个目录。定位时注意:du 默认不跟随符号链接,跨文件系统时加 -x 只统计当前文件系统,避免把挂载的数据盘也算进来误导判断。

找到大头之后,处理分三种情况。第一是日志:/var/log 里动辄几个 G 的日志最常见,先看是不是某个服务在疯狂报错刷日志,修掉根因比删日志重要;临时清理可以用 journalctl --vacuum-size=500M 缩 systemd 日志,用 logrotate 配好轮转,省得下次又满。第二是缓存和临时文件:/tmp、应用缓存目录可以清,但清之前确认没有正在跑的任务依赖它们。第三是业务数据:数据库、上传文件、备份文件,这类不能直接删,正确做法是先做备份再归档到别处,或者扩容。

最后给一套防复发的做法:一是给日志配轮转,别让单个日志无限长;二是给磁盘用量设告警,80% 就提醒,别等到 100% 服务挂了才发现;三是定期跑一次 du 巡检,心里有数哪个目录在悄悄变大。磁盘满从来不是突然发生的,它是慢慢涨上来的——定期看一眼,比半夜被报警叫醒强得多。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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