如何排查Ubuntu环境下ext4分区报告与实际占用空间不匹配问题?
解决ext4分区df报告已用空间与手动计算不符的问题
先理清楚你的环境背景,方便定位问题:
- 硬件:4TB WD Red HDD,通过VMware ESXi 6.5的RDM(Raw Device Mapping)模式直通给Ubuntu虚拟机
- 系统:Ubuntu 16 LTS Server,ext4分区
/dev/sdb1挂载在/DataVolume,作为Samba网络共享目录 - 磁盘状态:重建分区表后的全新空盘
问题核心
你执行df -T /dev/sdb1得到的输出里,出现了明显的数值矛盾:
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/sdb1 ext4 3845577736 69648 3650140872 1% /DataVolume
- df直接报告的已用空间:
69648 / 1024 ≈ 68MB,这是实际被文件占用的空间 - 手动计算(总容量-可用空间)得到的“已用”:
(3845577736 - 3650140872) / 1024² ≈ 186GB,这个差值其实包含了ext4默认预留的root专属维护空间
原因解释
ext4文件系统默认会预留总容量的5%空间给root用户——目的是当磁盘快满时,root还能登录系统进行清理、维护操作。这部分预留空间不会被df的Used字段统计,但会从总容量里扣除,所以你手动计算时会出现巨大差值。
你的分区总容量约3.58TB,5%的预留空间就是约179GB,和你计算的186GB接近,剩下的差值是ext4自身元数据(比如inode、日志等)占用的空间,完全符合预期。
解决方法(按需调整预留空间)
如果这个分区只是用来做存储共享,不需要给root预留这么多空间,可以用tune2fs命令调整预留比例:
调整为1%(推荐,保留少量维护空间)
sudo tune2fs -m 1 /dev/sdb1
完全取消预留(适合纯存储盘,无系统操作需求)
sudo tune2fs -m 0 /dev/sdb1
执行完后再用df -T /dev/sdb1查看,你会发现手动计算的差值和报告的已用空间加上预留空间的总和就一致了。
内容的提问来源于stack exchange,提问作者scopchanov
相关产品推荐
相关产品推荐

