首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >df和du显示不同

df和du显示不同

原创
作者头像
陈不成i
修改2021-05-27 14:31:03
修改2021-05-27 14:31:03
1.8K0
举报
文章被收录于专栏:ops技术分享ops技术分享

一.简介

Linux服务器,使用df -h查看文件系统使用率,可以看到/dev/xvdb1磁盘占用了约27G,挂载目录为/opt。

但进入到opt目录中执行:du -sh ,显示空间总占用量约2.4G,即df 和du查看到的结果不一致。

二.原因分析

du - estimate file space usage du命令会对统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取,可以跨多个分区操作。

df - report file system disk space usage df命令使用statfs这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据基于分区元数据,只能针对整个分区。

导致这个两个命令查看磁盘容量不一致的原因是,用户删除了大量的文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它。

然而如果此时还有运行的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df仍会统计这个被删除的文件。

可通过 lsof命令查询处于deleted状态的文件,被删除的文件在系统中被标记为deleted。如果系统有大量deleted状态的文件,会导致du和df统计结果不一致。 lsof |grep deleted

三.解决方法

1、根据lsof列出的pid直接kill相应进程或者重启对应的服务。 示例: kill -9 692

注:如果服务器正在运行业务,kill 会导致进程直接终止,可能会影响到业务,请慎重操作。

2、重启服务器。 重启服务器系统会退出现有的进程,开机后重新加载。该过程会释放调用的deleted文件的句柄。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.简介
  • 二.原因分析
  • 三.解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档