免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: leolein
打印 上一主题 下一主题

df和du的区别以及磁盘空间使用问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2009-09-30 14:46 |只看该作者
学习下

论坛徽章:
0
32 [报告]
发表于 2009-10-01 08:04 |只看该作者
呵呵, 我也碰到这样的问题.

两台设置一模一样的机器, Solaris10 x86的, root partition 10G.

一台用df -h检查, /使用了28%, 另一台/用了78%.

在两台机器同时用du / -h | more 一版一版翻看, 没有区别.

会是什么原因呢?

论坛徽章:
0
33 [报告]
发表于 2010-09-17 09:27 |只看该作者
碰到这个问题如何解决呢  ?

论坛徽章:
0
34 [报告]
发表于 2011-11-24 10:38 |只看该作者
实现原理:
du -s命令通过将指定文件系统中所有的目录、符号链接和文件使用的块数累加得到该文件系统使用的总块数;
df命令通过查看文件系统磁盘块分配图得出总块数与剩余块数。
du是用户级程序,不考虑Meta Data(系统为自身分配的一些磁盘块)

ps:应用程序打开的文件句柄没有关闭的话,会造成df命令显示的剩余磁盘空间少。而du则不会。
例子:
  1. #include <unistd.h>   
  2. #include <stdlib.h>   
  3. #include <stdio.h>   
  4. #include <fcntl.h>   
  5.   
  6. int main(int argc,char **argv)  
  7. {  
  8.     if(open("tempfile",O_RDWR) < 0){  
  9.         fprintf(stderr,"open error");  
  10.         exit(-1);  
  11.     }  
  12.   
  13.     if(unlink("tempfile") < 0){  
  14.         fprintf(stderr,"unlink error");  
  15.         exit(-1);  
  16.     }  
  17.   
  18.     printf("file unlinked\n");  
  19.     sleep(15);  
  20.     printf("done\n");  
  21.     exit(0);  
  22. }
复制代码
分別在程序sleep的時候執行 du 和df 命令。

论坛徽章:
7
双子座
日期:2013-09-09 15:55:31CU大牛徽章
日期:2013-09-18 15:22:06CU大牛徽章
日期:2013-09-18 15:22:20CU大牛徽章
日期:2013-09-18 15:22:26CU大牛徽章
日期:2013-09-18 15:22:31CU大牛徽章
日期:2013-09-18 15:22:37CU大牛徽章
日期:2013-09-18 15:22:46
35 [报告]
发表于 2011-11-24 15:07 |只看该作者
UNIX的机制问题。UNIX文件删除是有两个条件的:
1、link数为0
2、已经没有进程使用open()系统调用去打开该文件.

而df和du使用的计算方式不同,才导致这种差异。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP