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

本文发布时间: 2019-Mar-22
Linux下面通常用du和df命令看磁盘空间的使用情况,基本语法如下:df - report file system disk space usagedf [OPTION]... [FILE]...-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)du - estimate file space usagedu [OPTION]... [FILE]...-h, --human-readable print sizes in human readable format (e.g., 1K 234M 2G)-s, --summarize display only a total for each argumentdf和du命令得到的磁盘空间统计信息不一致的根本原因是打开文件描述符(虽然文件已被删除,还有其他进程可能打开了该文件),下面模拟这种情景:1.开始之前的磁盘使用情况:vonzhou@vonzhou:~$ df -h /homeFilesystem Size Used Avail Use% Mounted on/dev/sda1 6.8G 6.3G 196M 98% /vonzhou@vonzhou:~$ du -sh /home2.2G /home2. 另起一个终端通过vi,打开test.iso(大小700M左右) ;vonzhou@vonzhou:~$ lsof | grep isovi 21350 vonzhou 3r REG 8,1 741343232 325789 /home/vonzhou/test.iso3. 从当前终端删除这个700多M的文件test.iso;vonzhou@vonzhou:~$ rm test.iso 4. 此时发现df的统计并没有发生改变,但是du没有统计它了,原因是当前目录没有了test.iso这个文件,但是有进程持有对其的打开文件描述符,所以文件系统中还存在。vonzhou@vonzhou:~$ df -h /homeFilesystem Size Used Avail Use% Mounted on/dev/sda1 6.8G 6.3G 196M 98% /vonzhou@vonzhou:~$ du -sh /home1.5G /homevonzhou@vonzhou:~$ lsof | grep isovi 21350 vonzhou 3r REG 8,1 741343232 325789 /home/vonzhou/test.iso(deleted)5. 停止vi进行对文件的占有,再次看磁盘空间的使用情况,这是二者才表现出一致的状态:vonzhou@vonzhou:~$ lsof | grep isovonzhou@vonzhou:~$ df -h /homeFilesystem Size Used Avail Use% Mounted on/dev/sda1 6.8G 5.6G 903M 87% /vonzhou@vonzhou:~$ du -sh /home1.5G /home总结:之所以出现这种不一致的情况,是因为df和du通过不同的机制来得到磁盘空间的使用状况,du似乎更精确和实时,每次运行该命令,都会递归遍历该路径下面的所有文件进行空间大小的计算,当然速度上会慢一点。df会依赖超级块的信息,会统计那些在内存但不在磁盘上的文件,会统计索引文件和元数据,所以会看到df显示的使用率比du高。所以通常下,选择使用du命令。


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:09pm
栏目列表