《df 显示 100% 用满,du 加起来却只有 95%:那 5% 被 ext4 预留给了 root》

举报
yd_241984912 发表于 2026/11/11 15:54:53 2026/11/11
【摘要】 应用写日志突然报错 No space left on device,登上去 df -h 一看,根分区 Use% 100%,确实满了。但奇怪的是,du -sh /* 把各目录加起来只有 19G,盘明明是 20G——那 5% 去哪了?更怪的是:用 root 还能继续往盘里写文件,只有普通用户和应用写不进去。盘到底满没满?答案在文件系统里。ext4 默认会给 root 预留 5% 的空间,这 5%...

应用写日志突然报错 No space left on device,登上去 df -h 一看,根分区 Use% 100%,确实满了。但奇怪的是,du -sh /* 把各目录加起来只有 19G,盘明明是 20G——那 5% 去哪了?

更怪的是:用 root 还能继续往盘里写文件,只有普通用户和应用写不进去。盘到底满没满?

答案在文件系统里。ext4 默认会给 root 预留 5% 的空间,这 5% 不计入普通用户的可用空间。查一下就清楚:

tune2fs -l /dev/vda1 | grep -i reserved

输出里有一行 Reserved block count,20G 的盘上大约是 262144 个块,正好 5%。df 显示的 Available 是扣掉预留块之后剩给普通用户的,Use% 也是按这个口径算的——所以普通用户视角盘已经 100%,而 du 统计的真实占用只有 95%。

这不是 bug,是 ext4 故意留的安全垫。系统盘被普通用户写满时,root 还能登录、还能清日志、还能救系统,不至于连个落脚的地方都没有。预留块只对非 root 用户生效,root 把剩下的 5% 也写满了,那才是真满。

如果这是纯数据盘,上面没有系统关键进程,5% 纯属浪费:1TB 的盘预留 5% 就是 50G 白白锁着。可以在线调小,不用卸载:

tune2fs -m 1 /dev/vdb1

改完 df 立刻见效。也可以直接指定块数,比如 tune2fs -r 262144。根分区建议别清零,至少留 1%,关键时刻 root 还要靠它写日志、起服务。

下次遇到 df 显示 100%、du 加起来却对不上数,别急着删文件,先 tune2fs -l 看一眼 Reserved block count——可能盘没满,只是预留块把普通用户挡在了门外。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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