在linux系统上有时发现使用df 查看磁盘已使用空间和使用du统计的不相等,例如:

[running]root@slave11:/$ df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1             9.9G  4.0G  5.4G  43% /

/dev/sda3              20G  1.4G   18G   8% /usr/local

/dev/sda4             244G  215G   17G  93% /data

tmpfs                  32G   52K   32G   1% /dev/shm

/dev/sdb1             9.9G  151M  9.2G   2% /data1

[running]root@slave11:/data$ du -sh

182G    .

从这里面可以看出通过du看到使用了182G,但是通过df 看,/data目录已使用215G,这是什么原因呢?

先讲du和df原理

du的工作原理

du命令会对待统计文件逐个调用fstat这个系统调用,获取文件大小。它的数据是基于文件获取的,所以有很大的灵活性,不一定非要针对一个分区,可以跨越多个分区操作。如果针对的目录中文件很多,du速度就会很慢了。

df命令使用的事statfs这个系统调用,直接读取分区的超级块信息获取分区使用情况。它的数据是基于分区元数据的,所以只能针对整个分区。由于df直接读取超级块,所以运行速度不受文件多少影响。

原因有两个:

1、硬盘本来有保留空间,可以通过tune2fs -r 40000 /dev/sda4进行设置

2、已经被删掉的文件还有程序在占用,所以文件没被真正释放

针对第二种原因,可以通过如下步骤验证查看及释放空间

1、lsof |grep deleted > deleted_file查看有哪些未被释放的文件

2、排序看最大的未被释放的文件大小,命令:sort -nr -k 7 deleted_file>sort_deleted_file

3、more sort_deleted_file 查看前面那些文件,将占用空间大的程序kill掉

kill 进程号

实例:

➜  pydata df -h
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/cluster_vg-cluster_lv   12G   11G  1.9G  85% /home/pydata

➜  pydata lsof |grep deleted
rpc.mount 17821            root    6r      REG              253,0           0  100949767 /var/lib/nfs/etab.tmp (deleted)
smbd      20496            root  cwd       DIR              253,3        3864    1684953 /home/pydata/pandx (deleted)
smbd      20496            root   10u      REG              253,3 10737418240    1684988 /home/pydata/pandx/vdb.1_1.dir/vdb_f0001.file (deleted)

➜  pydata kill -9 20496

➜  pydata kill -9 17821

➜  pydata df -h
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/cluster_vg-cluster_lv   12G  137M   12G   2% /home/pydata

最新文章

  1. css中很有用的属性
  2. 浅谈VB.Net 程序的编译和动态编译
  3. Json转Java Bean
  4. java的HashCode方法
  5. dede自定义表单增加添加时间怎么弄
  6. pushViewController addSubview presentModalViewController视图切换
  7. JQuery $()后面的括号里的内容什么时候加引号,什么时候不加
  8. JOSN反串行化
  9. nagios报错HTTP WARNING: HTTP/1.1 403 Forbidden解决方法
  10. 遇到bug我会怎么做
  11. [js高手之路] es6系列教程 - 迭代器,生成器,for...of,entries,values,keys等详解
  12. Windows下安装Python扩展模块提示“Unable to find vcvarsall.bat”的问题
  13. 【Linux高级驱动】触摸屏驱动的移植
  14. hdu-6194 string string string 后缀数组 出现恰好K次的串的数量
  15. Struts2(三)配置详解
  16. Wireless Network--poj2236(并查集)
  17. iOS使用UIWebView遇到Error Domain=WebKitErrorDomain Code=101 “The operation couldn’t be completed. (WebKitErrorDomain error 101
  18. easyui 笔记
  19. AutoResponder Reference
  20. (九)Linux查看用户登录的命令

热门文章

  1. 【ACM】懒省事的小明
  2. CESM部署安装环境和使用
  3. Python import搜索路径相关
  4. Linux 进程间通信系列之 信号
  5. PHP会话管理
  6. Murano Weekly Meeting 2015.08.18
  7. sqlldr 采集中文数据乱码问题
  8. WebGL 踩坑系列-1
  9. kindeditor编辑区空格被隐藏,导致所见所得不一致的解决办法
  10. spring整合web的ssh(springMVC、hibernate)