磁盘满了别急着删:先用 df 和 du 找到是谁占的

举报
yd_299492234 发表于 2026/10/31 09:38:37 2026/10/31
【摘要】 服务器上最常见的半夜告警之一就是磁盘满了。服务写不进日志、数据库起不来、上传失败,第一反应往往是到处删文件。但删错东西比磁盘满更危险:删了正在写的日历志、删了数据库的数据文件,恢复起来远比清理麻烦。稳妥的顺序是先定位、再判断、最后清理,每一步都留证据。第一步看整体:df -h。这一条告诉你哪个挂载点满了,是根分区满了,还是 /var、/data 某个数据盘满了。很多人一上来就 du 整盘,从...

服务器上最常见的半夜告警之一就是磁盘满了。服务写不进日志、数据库起不来、上传失败,第一反应往往是到处删文件。但删错东西比磁盘满更危险:删了正在写的日历志、删了数据库的数据文件,恢复起来远比清理麻烦。稳妥的顺序是先定位、再判断、最后清理,每一步都留证据。

第一步看整体:df -h。这一条告诉你哪个挂载点满了,是根分区满了,还是 /var、/data 某个数据盘满了。很多人一上来就 du 整盘,从根目录一路扫下去,又慢又容易被 /proc、/sys 这类虚拟目录干扰。先用 df 定范围,再对着满的那个挂载点动手,效率高得多。注意 df 看到 Use% 100% 不一定等于完全写不进——ext4 默认给 root 留 5% 保留空间,普通用户写不进、root 还能写,这也是为什么有时候普通服务挂了、root 登录一看还能写几兆。

第二步在可疑目录里找大户:du -sh /* 或者 du -h --max-depth=1 /var | sort -rh | head。du 是按目录汇总,配合 sort 能一眼看到最大的几个子目录。再一层层往下钻,直到找到具体的大文件或日志目录。还有一个容易漏的角落:已被删除但仍被进程占用的文件。df 显示满、du 加起来却不大,多半就是这种情况——文件删了,句柄没放,空间没释放。用 lsof | grep deleted 能看到,处理办法是重启对应服务或让它重新打开日志,而不是继续删别的文件。

第三步再决定怎么清。日志类文件先看能不能轮转和压缩,而不是直接 rm:logrotate、journalctl --vacuum-size 这类工具就是干这个的;应用日志如果没配轮转,顺手补一个轮转配置,比下次再满一次强。缓存和临时文件要分清归属:包管理缓存、构建产物、旧的备份快照,这些删了一般能重建;数据库文件、用户上传、唯一一份的备份,删之前必须确认有第二份。凡是不确定归属的,先 mv 到临时目录观察一天,服务正常再删,这比直接 rm 多一道保险。

最后是防复发。磁盘满从来不是一次性事件:加一个简单的磁盘用量告警,80% 提醒、90% 必须处理;给增长最快的日志目录配上轮转和保留天数;定期看一次最大的十个目录。很多“磁盘又满了”其实是同一个日志目录每个月准时复发,修掉源头比每次救火省事。记住顺序:df 定范围、du 找大户、lsof 查已删未放、确认归属再清理、最后把轮转和告警补上。磁盘清理拼的不是删得快,而是删得准。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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