根文件系统空间占用统计不一致问题求助
根文件系统空间占用统计不一致问题求助
我遇到了一个奇怪的问题:我的根文件系统
/dev/mapper/rhel-root总大小只有5GB,df -h显示已经用了4.7G,剩余349M;但我用find / -xdev 2>/dev/null -exec du -h --total {} + | sort -h | tail -n1统计根目录下所有文件的总大小,结果却显示有8.6G。这中间的差异到底是怎么回事?我漏掉了什么?
我的命令输出如下:
[root@- ~]# df -h / Filesystem Size Used Avail Use% Mounted on /dev/mapper/rhel-root 5.0G 4.7G 349M 94% [root@- ~]# find / -xdev 2>/dev/null -exec du -h --total {} + | sort -h | tail -n1 8.6G total
系统信息:
- OS: Red Hat Enterprise Linux release 8.9 (Ootpa)
我之前也碰到过类似的空间统计不一致的情况,大概率是下面这几个原因导致的,你可以逐一排查试试:
- 被删除但仍被进程占用的文件:Linux里有个特性,要是一个文件被删除了,但还有进程在打开它,
df会继续把它算进已用空间里,但du不会统计(因为文件已经不在目录结构里了)。你可以跑lsof | grep deleted找出这类文件,找到对应的进程后,重启进程就能释放这些被占用的空间。 - 隐藏的挂载点:比如某个非空目录(比如
/tmp或者/mnt)原本有文件,后来你把另一个分区挂载到这个目录上,原来的文件就被隐藏起来了。因为你用了-xdev参数,du只会统计当前根文件系统的内容,不会去统计被挂载点覆盖的文件,但这些文件其实还是占用着根分区的空间。你可以临时卸载可疑的挂载点(比如umount /mnt),看看里面有没有被隐藏的文件,或者用mount命令查看所有挂载点,排查有没有这类情况。 - LVM快照占用空间:你的根分区是LVM逻辑卷,要是之前创建过快照卷,快照会占用逻辑卷的空间,
df会把这部分算进去,但du统计不到。你可以用lvdisplay命令查看有没有对应的快照卷,要是有的话,确认是否还需要,不需要的话可以删除快照释放空间。 - 文件系统预留空间:ext系列文件系统默认会给root用户预留5%的空间,防止磁盘满了后root无法操作。不过这个一般不会造成这么大的差异,但你也可以用
tune2fs -l /dev/mapper/rhel-root | grep Reserved查看预留的大小,确认是否是这个因素。
备注:内容来源于stack exchange,提问作者Eliseo Meza
相关产品推荐
相关产品推荐

