解决du df结果不一样的问题

问题描述:

一直在报 IOError: [Errno 28] No space left on device 内存不足的错误,用df查看查看使用率是100%,但是用du检查发现还有7G的内存。所以一直在好奇为什么 df du差别这么大,我电脑消失的7个G去哪了呢?

>> df -h
> Filesystem                  Size  Used Avail Use% Mounted on
 /dev/mapper/centos-root      50G   50G   14M  100% /
>> sudo du -x -h --max-depth=1
> 43G

大概了解了一下du和df的区别:

  • du: disk usage 磁盘空间,是文件夹里所有文件大小叠加在一起计算的。
  • df: disk free 磁盘空闲空间,是通过统计磁盘中空闲计算的。

解决方案:

1)最常见的df和du结果不一样是因为文件删除的问题。一个文件被删除后,就已经不在文件系统目录中了,所以du就不会再统计它。但是如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会在磁盘中真正被删除。这样df仍旧会统计这个被删除了的文件,就会产生df du 结果不一样的问题。
这种情况的解决办法是用lsof | grep deleted查找这样的进程,然后kill掉这些进程。

但是我测试了一下我的问题不是由于删除文件的问题导致的所有就又查到了另一种情况。

2)/mount节点的问题,文件虽然是挂载在硬盘上的,但是实际上还是会往磁盘上存储一些,这种情况du不会计算在内,所以我尝试了用sudo umount -v 解除了磁盘上所有挂载的盘,发现并没有多余的文件。

3)最后发现了清理磁盘碎片的问题

查看碎片情况:

>> xfs_db -c frag -r /   # 不知道为啥我执行这步一直在报错
> xfs_db: can't determine device size

>> xfs_db -c frag -r /dev/mapper/centos-root #这样为正常查询
> actual 354555, ideal 352996, fragmentation factor 0.44%                             
> Note, this number is largely meaningless.                                           
> Files on this filesystem average 1.00 extents per file   

整理碎片(需要一定的空余空间):
>> sudo xfs_fsr /
>/ start inode=0

清理完碎片,df du 不一样的问题就解决啦~ 电脑多出了7个G,美滋滋!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值