磁盘满了先别急着扩容:df 和 du 对不上时五步定位

举报
yd_254320880 发表于 2026/10/25 19:48:02 2026/10/25
【摘要】 df 显示满了、du 却统计不出大文件时,先别急着扩容:按对口径、查 deleted 句柄、查挂载覆盖、查 inode/预留、查日志、复查再定扩不扩五步定位,找到真正占空间的地方再决定要不要扩容。

云服务器报磁盘满,第一反应往往是"扩容吧"。但有一种情况扩容也白搭:df 显示满了,du 却统计不出大文件。空间不是被文件占了,就是被别的东西"藏"起来了。先按下面五步定位,找对地方再动手。

第零步:先确认两人看的是同一块盘

df 和 du 的口径不一样,直接对比容易误判:

df -h
du -sh -x /*

判断标准:df 看的是整个挂载点,du 加 -x 才不跨文件系统。先确认你查的目录和满的那块盘是同一个挂载点,别拿 / 的数字去跟 /data 的目录比。

第一步:最常见——文件删了,进程还占着

文件被 rm 删了,但有进程还拿着它的句柄,空间不会释放,du 也统计不到它:

lsof +L1

判断标准:看到 (deleted) 字样的就是这类。处理办法是重启持有它的那个服务、让进程退出释放句柄,而不是继续删别的文件。动手前先确认那是什么服务,别乱杀不认识的进程。

第二步:挂载点盖住了旧文件

新挂载点盖在旧目录上之后,下层原来的文件就被"盖住"了:du 走新挂载点看不到它们,df 却照算那块盘:

mount | grep '你要查的目录'

判断标准:如果该目录确实被挂载过,就要想办法看到下层——比如把上层临时移到别处、或用 bind 挂载的方式看下层内容。确认是下层文件在占空间后,再决定移走还是删掉。

第三步:查 inode 和预留空间

磁盘没满、文件也不大,但写不进去,还可能是 inode 用完了,或者是文件系统给 root 预留的那部分:

df -i

判断标准:df -i 的 IUse% 到 100%,就是小文件太多把 inode 耗光了——这时删大文件没用,要清掉大量小文件。ext4 默认还会给 root 预留一部分空间,普通用户看到的"可用"会比实际少,这是正常设计,不是故障。

第四步:日志是最常见的真凶

确认不是上面三种"藏起来"的情况,再去找真正的大文件,先看日志:

du -sh /var/log/*
journalctl --disk-usage

判断标准:先看是哪个日志目录在涨,再看是哪个服务在写。清理时优先用日志自带的轮转和清理办法(比如 journalctl --vacuum-size=),别直接把正在被写的文件 rm 掉——那样又会回到第一步的 deleted 句柄问题。

第五步:清理后复查,再决定要不要扩容

每清一处就复查一次:

df -h

判断标准:df 的已用真的降下来了,才算找到地方。如果五步走完都没找到、或者找到的地方清完还是满,那才是扩容或迁移数据的信号——这时扩容花的钱才花在刀刃上。

小结

顺序是:对口径 → 查 deleted 句柄 → 查挂载覆盖 → 查 inode/预留 → 查日志 → 复查再定扩不扩。df 和 du 对不上时,问题往往不在文件大小,而在"文件去哪了"这一步。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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