Linux使用du和df命令结果不一致


     Linux下面通常用du和df命令看磁盘空间的使用情况,基本语法如下:
df - report file system disk space usage
df [OPTION]... [FILE]...
-h, --human-readable
              print sizes in human readable format (e.g., 1K 234M 2G)

du - estimate file space usage
du [OPTION]... [FILE]...
-h, --human-readable
              print sizes in human readable format (e.g., 1K 234M 2G)
-s, --summarize
              display only a total for each argument



df和du命令得到的磁盘空间统计信息不一致的根本原因是打开文件描述符(虽然文件已被删除,还有其他进程可能打开了该文件),下面模拟这种情景:

1.开始之前的磁盘使用情况:
vonzhou@vonzhou:~$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       6.8G  6.3G  196M  98% /
vonzhou@vonzhou:~$ du -sh /home
2.2G     /home

2. 另起一个终端通过vi,打开test.iso(大小700M左右) ;
vonzhou@vonzhou:~$ lsof | grep iso
vi        21350    vonzhou    3r      REG        8,1 741343232  325789 /home/vonzhou/test.iso

3. 从当前终端删除这个700多M的文件test.iso;
vonzhou@vonzhou:~$ rm test.iso 

4. 此时发现df的统计并没有发生改变,但是du没有统计它了,原因是当前目录没有了test.iso这个文件,但是有进程持有对其的打开文件描述符,所以文件系统中还存在。
vonzhou@vonzhou:~$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       6.8G  6.3G  196M  98% /
vonzhou@vonzhou:~$ du -sh /home
1.5G     /home
vonzhou@vonzhou:~$ lsof | grep iso
vi        21350    vonzhou    3r      REG        8,1 741343232  325789 /home/vonzhou/test.iso (deleted)

5. 停止vi进行对文件的占有,再次看磁盘空间的使用情况,这是二者才表现出一致的状态:
vonzhou@vonzhou:~$ lsof | grep iso
vonzhou@vonzhou:~$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       6.8G  5.6G  903M  87% /
vonzhou@vonzhou:~$ du -sh /home
1.5G     /home

总结:之所以出现这种不一致的情况,是因为df和du通过不同的机制来得到磁盘空间的使用状况,du似乎更精确和实时,每次运行该命令,都会递归遍历该路径下面的所有文件进行空间大小的计算,当然速度上会慢一点。df会依赖超级块的信息,会统计那些在内存但不在磁盘上的文件,会统计索引文件和元数据,所以会看到df显示的使用率比du高。所以通常下,选择使用du命令。


这三个命令是用来查看磁盘空间的,但是它们的输出结果有一些不同,这就导致了磁盘空间显示不一致的问题。 首先,du命令是用来查看目录或文件所占用的磁盘空间的,它的输出结果是以字节为单位的。而df命令则是用来查看磁盘分区的使用情况的,它的输出结果是以块为单位的。 其次,du命令df命令的参数也不同。du命令后面跟的是目录或文件名,而df命令后面跟的是磁盘分区的挂载点。 最后,du命令df命令的输出结果格式也不同。du命令的输出结果是一个目录或文件所占用的磁盘空间,它的单位可以是字节、千字节、兆字节等。而df命令的输出结果则是磁盘分区的总容量、已用容量、可用容量和使用率,它的单位通常是千字节或兆字节。 所以,如果你使用du -sh命令来查看一个目录或文件所占用的磁盘空间,它的输出结果是以人类可读的格式显示的。而如果你使用df -h命令来查看磁盘分区的使用情况,它的输出结果也是以人类可读的格式显示的。但是,它们的单位不同,所以输出结果可能会有一些差异。此外,df命令还可以使用-a参数来显示所有文件系统的磁盘使用情况,包括那些没有挂载的文件系统,这也会导致输出结果与du命令不同。 综上所述,dudf命令的输出结果不同,使用的参数和单位也不同,因此会导致磁盘空间显示不一致的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值