df -h统计的信息与du -sh不一致的原因(转)

简介: 有时候会遇到这样的问题:df -h统计一个目录,显示有约100M可用空间,使用了5G;而用du -sh统计该目录下的文件大小,却发现总共才占用了1G。也就是说,二者统计结果差距巨大。 例如: 1、df -h /tmp/ 结果: Size Used Avail Use% Mounted on3.9G 3.5G 220M 95% /tmp 2、du -sh /tmp/ 结果: 132K    /tmp/ 文章来源:http://www.codelast.com/ 结果差异巨大。

 

有时候会遇到这样的问题:
df -h统计一个目录,显示有约100M可用空间,使用了5G;
而用du -sh统计该目录下的文件大小,却发现总共才占用了1G。
也就是说,二者统计结果差距巨大。

例如:

1、df -h /tmp/

结果:

Size Used Avail Use% Mounted on
3.9G 3.5G 220M 95% /tmp

2、du -sh /tmp/

结果:

132K    /tmp/

文章来源:http://www.codelast.com/

结果差异巨大。

引用网上的一段话,原因是这样的:

(1)This section gives the technical explanation of why du and df sometimes report different totals of disk space usage.
When a program that is running in the background writes to a file while the process is running, the file to which this process is writing is deleted. 
Running df and du shows a discrepancy in the amount of disk space usage. The df command shows a higher value.2)The difference is that whenever an application has an open file, but the file is already deleted, 
then it is counted in the df output (because the space is certainly not free) 
but not in du (because it is not being used by a file).

如何查看是什么进程导致的问题?

假设你发现是 /tmp/ 目录不对劲,那么就这样就可以查看:

lsof | grep /tmp/

输出的结果中,注意某些含有“(deleted)”字样的记录,它们中的一部分就是罪魁祸首,将它们kill掉即可(如果可以重启这些进程所对应的服务的话,也有可能解决问题)。

http://www.codelast.com/?p=1066

 


汇总一些原理分析
实现原理:
du -s命令通过将指定文件系统中所有的目录、符号链接和文件使用的块数累加得到该文件系统使用的总块数;
df命令通过查看文件系统磁盘块分配图得出总块数与剩余块数。
du是用户级程序,不考虑Meta Data(系统为自身分配的一些磁盘块)

ps:应用程序打开的文件句柄没有关闭的话,会造成df命令显示的剩余磁盘空间少。而du则不会。


[root@hadoop01 ~]# du -sh . [对当前目录下所有的目录和文件的大小进行汇总,-s表示汇总,-h表示以KB, MB, GB, TB格式进行人性化显示]
[root@hadoop01 ~]# du -sh *|grep [MG]|sort -nr  [筛选出大小为MB和GB级别的目录和文件,并降序排序]

 

相关文章
|
Linux Shell
Linux du 和 df统计目录大小为何不一样?
Linux du 和 df统计目录大小为何不一样?
148 0
|
Ubuntu Linux
df 命令
df 命令
98 0
|
存储 Linux 索引
df与du输出结果不同的原因研究
作者:岭南 # Question 标准GNU工具coreutils中有俩程序df / du,他们都可以查看磁盘的使用情况。通常情况下他们的统计结果并不会相同,这是因为统计信息来源的差异。所以问题来了:在ext4文件系统下,有哪些可能的因素会带来统计信息的差异? # Knowledge Background ## ext4 filesystem ### physical
1233 0
|
应用服务中间件
du 和 df以及lsof
du:disk usage 通过搜索文件来计算每个文件的大小然后累加得到的值。   df:disk free 通过文件系统来获取空间大小的信息。
1046 0
df命令
df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
1010 0
[20180312]iostat显示输出问题.txt
[20180312]iostat显示输出问题.txt --//别人问的问题,使用iostat诊断分析磁盘io. --//如果这样过滤丢失了开头:Device:         rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/...
872 0
|
Linux Shell
df命令/du命令/磁盘分区
      4.1 df命令  4.2 du命令 4.3/4.4 磁盘分区   df命令  磁盘管理df 大小单位是KB,挂载点是linux上的目录       df -h 根据磁盘大小适当调整单位;单位有:Byte ,1KB,1...
1830 0