Linux下df 和 du 查看磁盘空间大小不一致?

赞赏 2016-07-18

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

Linux下df 和 du 查看磁盘空间大小不一致?

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


问题分析:


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

du - estimate file space usage

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

df - report file system disk space usage


导致这个两个命令查看磁盘容量不一致的原因是,用户删除了大量的文件被删除后,在文件系统目录中已经不可见了,所以 du 就不会再统计它。然而如果此时还有运行的进程持有这个已经被删除的文件句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,df 仍会统计这个被删除的文件。



解决办法:

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

lsof |grep deleted //在opt目录下执行lsof |grep deleted

然后,通过如下方法处理:

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

kill -9 692

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

2、重启服务器验证效果:

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

登陆后阅读全文
阅读 2589 赞赏 0 有用 7 没用 0 收藏 0 分享

   


作者声明:本篇文章系本人原创,欢迎分享,但未经许可,谢绝转载。

0 条留言

linux分享的头像

linux分享

每个软件都有确定的用途

相关文章

安全组设置允许SSH登录到 Linux 实例

Linux 流控原理,实现,及实例

Linux 如何使用 kpartx 命令读取分区表信息

云服务器 ECS Linux /tmp 目录文件是如何做到定期清理的?

Linux Web 环境配置站点的方法

Linux 内核配置问题导致 NAT 环境访问异常

Linux Mac Window网络异常时如何抓包?

Linux 系统虚拟主机 .htaccess 如何限制某些 IP 访问?

云服务器 ECS Linux 系统如何屏蔽某个 IP 的访问?

Linux IO占用高问题如何排查?

有料推荐

这世界欠我一个这样的老公!

高校学生模仿“世界名画”摆拍,可以说是戏精本精了

iPhone X 跌破发行价,苏宁200亿入股恒大 | 财经日日评

果然是高手!这次在日本,特朗普竹杠敲得不是一般狠

资深黄牛现身说法:iPhone X价格秒变不停,就像炒股一样

长一样的双胞胎也能识别?蚂蚁金服发布「眼纹识别」技术

苏联是怎么被阿富汗拖垮的?

美团或入局「分时租赁」共享汽车,王兴要大笔投入「泛出行」领域了? | 36氪独家

你或许被“一盘番茄炒蛋”刷屏了,但有人辛酸,有人质疑

iPhone X发售前夜,黄牛与苹果公司的不安

他的文章

我是如何执行 "rm -rf ~" 的

正态分布为什么常见?(财富的分布却不符合正态分布)

Linux下窗口管理器 xmonad 的使用教程

用披萨做比喻来解释 IaaS,PaaS,SaaS 的区别

如何制作CSR(证书私钥和证书请求文件)文件?

php RedisException with message read error on connection

Windows环境下ping丢包或不通时链路测试工具推荐

Linux下ping丢包或不通时链路测试工具推荐

链路测试结果分析说明及常见链路异常场景和测试报告

SSH 登录时出现如下错误:login: Module is unknown

手机扫一扫
分享文章