《df 显示 100% 用满,du 加起来却只有 95%:那 5% 被 ext4 预留给了 root》
应用写日志突然报错 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——可能盘没满,只是预留块把普通用户挡在了门外。
- 点赞
- 收藏
- 关注作者
评论(0)