df 显示磁盘满了,du 却找不到大文件?先查这三处

举报
1swei 发表于 2026/11/06 10:14:02 2026/11/06
【摘要】 磁盘告警来了,df -h 显示根分区用了 100%,但 du -sh /* 加起来却远不到这个数。先别急着删东西——两者口径本来就不一样,差出来的空间通常藏在下面三处。第一处:已删除但仍被占用的文件。进程删了文件、句柄还没关,du 看不到它,df 照算。查:lsof +L1 | headSIZE/OFFSET 列就是被"删了但还占着"的大小。常见凶手是正在写日志的进程:日志被轮转工具删了,写...

磁盘告警来了,df -h 显示根分区用了 100%,但 du -sh /* 加起来却远不到这个数。先别急着删东西——两者口径本来就不一样,差出来的空间通常藏在下面三处。

第一处:已删除但仍被占用的文件。进程删了文件、句柄还没关,du 看不到它,df 照算。查:

lsof +L1 | head

SIZE/OFFSET 列就是被"删了但还占着"的大小。常见凶手是正在写日志的进程:日志被轮转工具删了,写日志的进程没重启,空间一直不释放。解决办法是重启对应进程或让它重新打开文件,而不是再删一遍。

第二处:挂载点被遮住的目录。某个目录本来写了不少数据,后来上面又挂了一个分区,du 走挂载点只能看到新分区里的数据,旧数据被盖在下面、还占着磁盘。查:把可疑分区临时卸载(或用 mount --bind / /mnt 从根视角看),再 du 一次对比。

第三处:inode 耗尽。df -i 看一眼:inode 用满了也会报"磁盘满",但 df -h 的已用空间可能并不高。小文件海(比如没清的 session 文件、碎片化缓存)是典型成因。解决办法是按目录数文件个数定位,清掉产生小文件的源头,只删文件治标不治本。

排查顺序总结:df -h 确认是空间满还是 inode 满 → lsof +L1 查已删未释放 → 怀疑挂载遮挡就换视角 du → 最后才是按大小排序删文件。删之前先确认文件归属和进程,删错正在写的文件,服务会比磁盘先出问题。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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