linux下du和df结果不一致的原因及处理

上传人:m**** 文档编号:71481286 上传时间:2019-01-20 格式:DOCX 页数:5 大小:16.43KB
返回 下载 相关 举报
linux下du和df结果不一致的原因及处理_第1页
第1页 / 共5页
linux下du和df结果不一致的原因及处理_第2页
第2页 / 共5页
linux下du和df结果不一致的原因及处理_第3页
第3页 / 共5页
linux下du和df结果不一致的原因及处理_第4页
第4页 / 共5页
linux下du和df结果不一致的原因及处理_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《linux下du和df结果不一致的原因及处理》由会员分享,可在线阅读,更多相关《linux下du和df结果不一致的原因及处理(5页珍藏版)》请在金锄头文库上搜索。

1、linux下du和df结果不一致的原因及处理本实验结果是在RHEL6.4-64bit下得出1.原理介绍1 .1du的工作原理du命令会对待统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取的,所以有很大的灵活性,不一定非要针对一个分区,可以跨越多个分区操作。如果针对的目录中文件很多,du速度就会很慢了。1.2 df的工作原理df命令使用的事statfs这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据是基于分区元数据的,所以只能针对整个分区。由于df直接读取超级块,所以运行速度不受文件多少影响。2.实验模拟常见的df和du不一致情况就是文件被删除的而进程

2、句柄还在导致的问题。当一个文件被删除后,在文件系统目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除,分区超级块中的信息也就不会更改,这样df仍旧会统计这个被删除了的文件。首先查看磁盘和路径rootzhjk115 app#df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root 45G 8.0G 35G 19% /tmpfs 4.0G 1.5G 2.5G 37% /dev/shm/dev/mapper/VolG

3、roup-lv_app 255G42G 201G18% /app/dev/sda1 485M 38M 422M 9% /bootrootzhjk115 app#rootzhjk115 app#pwd/app用dd命令创建1G大学的文件rootzhjk115 app#ddif=/dev/zeroof=/app/test.isobs=1024kcount=10001000+0 records in1000+0 records out1048576000 bytes (1.0 GB) copied, 4.31891 s, 243 MB/s查看df和du结果,目前是一致的rootzhjk115 app

4、#df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root 45G 8.0G 35G 19% /tmpfs 4.0G 1.5G 2.5G 37% /dev/shm/dev/mapper/VolGroup-lv_app 255G43G 200G 18% /app/dev/sda1 485M 38M 422M 9% /bootrootzhjk115 app#du -sh43G模拟进程在使用test.iso文件 www.f-1.ccrootzhjk115 app#tail -f test.iso &1 22

5、349rootzhjk115 app#ps -ef |grep tailroot2234921633 28 09:56 pts/1 00:00:01tail -f test.isoroot 22353 21633 0 09:56 pts/1 00:00:00 grep tail删除test.iso文件,可以看出df和du的结果是不一致的rootzhjk115 app#rm -rf test.isorootzhjk115 app#df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root 45G 8.0G

6、 35G 19% /tmpfs 4.0G 1.5G 2.5G 37% /dev/shm/dev/mapper/VolGroup-lv_app 255G43G 200G 18% /app/dev/sda1 485M 38M 422M 9% /bootrootzhjk115 app#du -sh42G用lsof查看哪个进程在使用/app/test.isorootzhjk115 app#lsof |grep test.isotail 22349 root 3r REG 253,2 1048576000 12 /app/test.iso手动kill占有test.iso文件的进程,此时,du和df的结果

7、一致rootzhjk115 app#kill -9 223491+ Killed tail -f test.isorootzhjk115 app#du -sh42Grootzhjk115 app#df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/VolGroup-lv_root 45G 8.0G 35G 19% /tmpfs 4.0G 1.5G 2.5G 37% /dev/shm/dev/mapper/VolGroup-lv_app 255G42G 201G 18% /app/dev/sda1 485M 38M 422M 9% /boot结论:本实验主要是针对Linux环境的使用,该问题是由于进程的文件句柄释放问题导致的,很多情况为清理完日志等文件是du显示为已释放空间,但df空间还在使用,此时可以通过echo(或者)代替rm来避免这种情况,同时也可以查看是哪个进程在使用,可以根据情况手动清理、重启应用或者等待释放。注:当oracle主机某些日志被清理后但df显示空间没有被释放也是同样的道理,一般来说等一段时间即可,否则需要重启数据库实例来释放空间。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > linux/Unix相关

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号