Linux 磁盘空间告急:用 df 与 du 快速定位并安全清理的实战

举报
yd_229851404 发表于 2026/11/11 06:07:09 2026/11/11
【摘要】 服务器最让人头疼的故障之一,就是磁盘突然写满:服务写日志失败、数据库拒绝写入,而 df 一看,Use% 已经到了 100%。这篇文章讲清楚 df 与 du 的分工,以及哪些能删、哪些千万别碰。 一、先看整体:df 回答“哪块盘满了”df -h按人类可读的方式显示每个挂载点的总容量、已用、可用和挂载点。重点不是看根分区有多大,而是看哪个挂载点先满:根分区满、/var 满、/home 满,处理思...

服务器最让人头疼的故障之一,就是磁盘突然写满:服务写日志失败、数据库拒绝写入,而 df 一看,Use% 已经到了 100%。这篇文章讲清楚 df 与 du 的分工,以及哪些能删、哪些千万别碰。

一、先看整体:df 回答“哪块盘满了”

df -h

按人类可读的方式显示每个挂载点的总容量、已用、可用和挂载点。重点不是看根分区有多大,而是看哪个挂载点先满:根分区满、/var 满、/home 满,处理思路完全不同。

如果 df 显示还有空间却写不进去,就要怀疑 inode 耗尽:

df -i

看 IUsed% 这一列。小文件成千上万时,空间没满、inode 先满,同样写不进去,这时删大文件没有用,得清理大量小文件。

二、再找大户:du 回答“空间被谁吃了”

知道哪个挂载点满了,再用 du 逐层下钻:

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

这条命令列出 /var 下一级子目录的大小,并按大小倒序排列。找到最大的目录后,把路径换成它,再深入一层,两三轮就能锁定大户。不要一上来就 du -h /,全盘扫描又慢又吵,还会把挂载的远程目录也算进去;先用 -x 把扫描限制在同一个文件系统内。

三、三种常见的“假满”和“真满”

第一种是已删除但仍被占用的文件:日志被 rm 删掉,进程还握着句柄,空间不会释放。用 lsof | grep deleted 可以看到这类文件,正确做法是重启对应服务,或者用 : > 文件名 的方式截断日志,而不是直接删正在写的文件。

第二种是日志失控:某个服务开启了 debug 日志,一夜写出几十 GB。先用 journalctl --disk-usage 看 systemd 日志占了多少,再用 journalctl --vacuum-size=500M 做有上限的清理,比手动删 /var/log/journal 更安全。

第三种是缓存和临时文件堆积:包管理缓存、旧内核、构建产物和 /tmp 下的过期文件。清理前先确认它们可以重建或重新下载,生产环境尤其要先备份关键配置。

四、可以安全清理的清单

按风险从低到高:包管理器缓存 apt clean 或 yum clean all;journalctl --vacuum-time=7d 只保留最近七天的系统日志;/tmp 和 /var/tmp 里超过一周的临时文件;自己确认无用的旧备份和构建产物;轮转后残留的 .gz 旧日志。清理完立刻再跑一次 df -h,确认可用空间回升,并看一眼服务日志是否恢复正常写入。

千万别碰的几类:正在运行的数据库数据目录、/etc 下的配置文件、不知道归属的 /opt 或 /usr/local 子目录,以及任何没有备份的生产数据。磁盘满的时候最忌“先删了再说”,删错的代价比磁盘满大得多。

五、让磁盘不再半夜告急

治标之后要治本:给日志加上 logrotate 轮转,限制单个日志文件大小和保留份数;对关键挂载点做磁盘使用率告警,85% 提醒、95% 紧急处理。df 与 du 都不复杂,难的是养成“先定位、再确认、后清理”的顺序。磁盘告急时不慌,按挂载点、目录、文件三层下钻,大多数问题十分钟内就能找到元凶。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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