在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

linux df -h显示空间信息不正确的更多相关文章

  1. Linux df -h空间显示不正确

    今天发现一个测试数据库磁盘空间快满了,准备将几个不再用的表空间删除.通过以下命令删除表空间内容及数据文件. drop tablespace tablespace_name including cont ...

  2. linux df -h卡成狗

    linux执行df -h命令,直接卡在,很久没有任何动静 strace df -h跟踪命令执行,查看卡在那里 还有可能就是重做系统吧,检测下内存条是不是坏了等 http://blog.51cto.co ...

  3. Linux的硬盘使用情况、挂载、SSD挂载(查看df -h不能看到的卷)

    linux上的盘和window的有区别,磁盘空间必须挂载在目录上,要不然没用 对与新增的硬盘.SSD固态硬盘.挂载到linux上的操作如下: df -h      #显示目前在Linux系统上的文件系 ...

  4. linux命令df中df -h和df -i

    df 命令: linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [ ...

  5. [linux]df 磁盘100%Used告警,du显示目录状态良好的故障排查

    1.回顾: 某在线主机深夜连续接到告警系统的disk Used 超限告警. 登陆主机查看却遇到了困惑:在检查磁盘使用量 df –h 出来的磁盘使用量确实和告警信息一样,已经被100%占用,但是查看目录 ...

  6. linux命令df中df -h和df -i的区别

    df 命令: linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [ ...

  7. df -h和du -sh显示结果不一样的原因及解决

    一.背景:一台2T硬盘的mysql服务器,保存电话的CDR信息.按照历史数据的水平,一个月能生成20+GB的文件.然而短短的半年时间,满了?! 登录服务器看谁占了这么大的空间?好吧,slow-quer ...

  8. linux 故障:df -h统计磁盘空间占用太多,但又du -h找不到大的文件

    用lsof / | grep -i delete 从根目录定位打开的被删除的文件 如果定位到某文件占用空间很大 主要是因为我们在删除这个日志文件的时候是用rm -rf *.log这样的命令删除的,删除 ...

  9. linux挂载点 和 文件系统$ mount$ cat /etc/fstab$ vgs$ pvs$ lvs$ df -h$ lsof +D / /* beware not to kill your box */

    $ mount$ cat /etc/fstab$ vgs$ pvs$ lvs$ df -h$ lsof +D / /* beware not to kill your box */ 一共挂载了多少文件 ...

随机推荐

  1. django建表报错

     今天在用pycharm创建数据库的表的时候碰见了一个报错,这还是头一次碰见这种奇怪的错误.这里记住希望能避免错误. 我所创建的表是用的django原有的用户表,做了一下继承. class UserI ...

  2. Visio Studio使用总结

    1.常用快捷键: 注释:Ctrl+K+C 取消注释:Ctrl+K+U 增加缩进:Table 减少缩进: Table+Shift 格式化文本:A.  Ctrl+K+F(选中文本)  B.  Ctrl+K ...

  3. Python镜像源

    镜像源 官方:https://pypi.python.org/pypi 豆瓣:https://pypi.doubanio.com/simple/ 阿里:http://mirrors.aliyun.co ...

  4. 进入BIOS的步骤

    查看自己的BIOS版本 $ systeminfo 对号入座,电脑进入BIOS的两种实用方法

  5. IIS 配置asp.net 环境

    打开Internet信息服务管理器,在左侧点击“应用程序池”,下面将以asp.net v4.0 程序池为例 在中间的“ASP.NET V4.0”上右键“高级选项”,展开“进程模型”,找“标识”选项,然 ...

  6. Unity 游戏对象的组件列表

    描述: 1 个游戏对象,上面有 4 个组件, 如图: 脚本 Test_01 的内容,如下: using System.Collections; using System.Collections.Gen ...

  7. 牛客网Java刷题知识点之字节缓冲区练习之从A处复制文本文件到B处(BufferedReader、BufferedWriter)、复制文本文件的原理图解

    不多说,直接上干货! CopyTextByBufTest.java package zhouls.bigdata.DataFeatureSelection.test; import java.io.B ...

  8. C# FTPHelper帮助类

    网上的FTPHelper类感觉用起来不方便,而且代码的质量也不高,因此自己重新写了一个FTPHelper.此文之前是发布在我的CSDN博客中的,现在转过来. 主要就是借鉴了DbHelper的Creat ...

  9. Container&injection(容器与注入思想)

    container 为了更好理解JAVA容器,查询了容器的概念以及容器的诞生原因和历史: 容器技术是怎么一个概念呢?其实,IT里的容器技术是英文单词Linux Container的直译.contain ...

  10. Spring-cloud之Ribbon负载均衡的使用及负载均衡策略配置(与Eurka配合使用)

    什么是Ribbon,ribbon有什么用,个人先总结一下(不正确请提出讨论):Ribbon是基于客户端的负载均衡器,为我们提供了多样的负载均衡的方案,比如轮询,最小的并发请求的server,随机ser ...