很多时候df查看磁盘容量为什么比du统计所有目录大小高

时间:2022-07-31 05:22:00

首先区分下这两个指令:

du:功能是逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块的情况,如果没有指定目录,则对当前的目录进行统计

各个参数:

a:显示全部目录和其次目录下的每个档案所占的磁盘空间
s:只显示各档案大小的总合 
b:大小用bytes来表示
h:大小以方便读的单位展示,如MB,GB。

...更多使用说明找男人(man du)

常用:

du -sh:统计当前目录占的磁盘大小

su -sh *: 统计当前目录下各个目录占的大小


df:于du不同的是,du是面向文件的命令,只计算被文件占用的空间。不计算文件系统metadata 占用的空间。df则是基于文件系统总体来计算,通过文件系统中未分配空间来确定系统中已经分配空间的大小。df命令可以获取硬盘占用了多少空间,还剩下多少空间

常用参数

a:显示全部的档案系统和各分割区的磁盘使用情形
i:显示i -nodes的使用量
k:大小用k来表示 (默认值)

常用命令:

df -h

-------------------------------------------------------------------

下面做一个小实验,看下为什么df比du总和高。

首先df查看磁盘使用情况,tomcat包的大小为170M.

很多时候df查看磁盘容量为什么比du统计所有目录大小高

此时使用tail -f tomcat.tar模拟进程调用这个包

很多时候df查看磁盘容量为什么比du统计所有目录大小高

另开一个shell,删除这个包

很多时候df查看磁盘容量为什么比du统计所有目录大小高

此时统计磁盘使用情况没有变化,直到杀掉进程,磁盘已使用减少

很多时候df查看磁盘容量为什么比du统计所有目录大小高

结论:

1、若有进程在占用某个文件,而其他进程把这文件删掉,只会删除其在磁盘中的标记,而不会释放其占用的磁盘空间;直到所有访问该文件的进程退出为止;
2、df 是从内核中获取磁盘占用情况数据的,而du是统计当前磁盘文件大小的结果,由于磁盘标记已被删掉,因此du 不会计算上述被删除文件的空间,导致df 与 du的结果不一致