Linux使用du和df命令结果不一致
2015-03-30 16:09
351 查看
Linux下面通常用du和df命令看磁盘空间的使用情况,基本语法如下:
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命令。
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命令。
相关文章推荐
- 7.Linux swap分区的使用,主引导记录(MBR)的备份、dd,df,du命令的使用
- linux 查看内存使用free命令 查看空间使用du命令 查看磁盘分区情况df命令
- 实用Linux命令,不求最全但求实用-------磁盘使用情况du,df
- Linux,du、df统计的硬盘使用情况不一致问题
- Linux & Unix 中 df 和 du 命令统计磁盘空间数值不一致
- Linux下查看文件和文件夹大小的df和du命令使用介绍
- Linux,du、df统计的硬盘使用情况不一致问题如何处理
- du 及 df 命令的使用(附带示例) | Linux 中国
- Linux查看磁盘的使用状况命令du、df
- Linux系统中df与du命令查看分区大小不一致问题分析
- Linux中du命令:同样可以查看使用的空间,但是与df有不同
- Linux,du、df统计的硬盘使用情况不一致问题
- Linux查看磁盘的使用情况命令: df 和 du
- 实用Linux命令,不求最全但求实用-------磁盘使用情况du,df
- Linux命令:free & df & du !
- Linux查看磁盘属性、文件夹/文件大小的命令 --- df和du
- linux的du和df命令
- 详细分析Linux df命令的使用方法
- statfs获得硬盘使用情况 模拟linux命令 df
- Linux系统下ifconfig命令使用及结果分析