文档章节

Linux,du、df统计的硬盘使用情况不一致问题如何处理

P
 PACIDC
发布于 2015/11/04 10:24
字数 822
阅读 477
收藏 0

在运维Linux服务器时,会碰到需要查看硬盘空间的情况,这时候,通常会使用df -lh命令来检查每个挂载了

文件系统的硬盘的总量和已使用量,或者,可以使用du -sh [directory]命令来统计某个目录下所有文件的空间占用.

在使用df、du命令时,常常会遇到统计的硬盘使用情况不一致的问题.比如du统计根目录下文件总共大小为2G,

而df判断挂载在根目录的硬盘已用空间达到了3G,20G甚至更多。发生这种情况,有以下三种原因:

  • 预留空间

为了预防紧急情况,linux ext文件系统会预留部分硬盘空间,具体预留的数值可以通过

tune2fs -l [dev_name] | grep “Reserved block count”查看到(dev_name是设备名),

这里预留的空间会被df计算到已用空间中,从而导致df和du统计不一致。如果需要调整预留空间大小,

我们可以使用tune2fs -m [size] [dev_name]来进行调整.

  • 幻影文件(phantom file)

du是统计被文件系统记录到的每个文件的大小,然后进行累加得到的大小,这是通过文件系统获取到的.

而df主要是从超级块(superblock)中读入 硬盘使用信息,df获取到的是磁盘块被使用的情况.

当一个文件被删除时,如果有别的进程正在使用它(占有句柄), 这个文件将不会被du统计到,

但是这个文件被占用的磁盘空间却依然会被df统计到.

这些文件,以及正在使用这些文件的进程可以通过lsof | grep deleted查到。当进程停止或者被kill时,这些空间将被释放.

  • 未统计到的文件

如果上面两种情况都排除了,但是数据还是不一致,那是怎么回事?

这里隐藏着一种情况:当我们将一个目录挂在到 一个新的设备(硬盘)上之前,如果这个目录里面已经有数据,

那么这一部分数据不会被du感知,在文件系统中也看不到这些数据,但是这些数据又是确实占用了 磁盘空间,

是能够被df所统计到的。这时候通过du/df统计原设备的空间使用情况,就会发现df统计到的比du要多。

遇到这样的情况时,使用fuser -km [directory]杀死占用该目录的所有进程(小心操作!),

然后使用umount [directory]将该目录挂载的设备卸载,这时,目录里面原来已有的数据就会出现,我们将其删除之后,

再重新挂载设备(mount -t [type] [dev] [directory])即可.


© 著作权归作者所有

共有 人打赏支持
P
粉丝 0
博文 15
码字总数 9990
作品 0
武汉
讲述下Linux 执行 df 和 du 查看磁盘时占用结果不一致的解决办法

问题现象 1、执行 df -h 查看 ECS Linux 实例文件系统使用率,可以看到 /dev/xvdb1 磁盘占用了约27G,挂载目录为 /opt 。 2、进入到 /opt 目录执行 du -sh ,显示空间总占用量约 2.4 G,即d...

问题终结者
07/13
0
0
诡异的Linux磁盘空间被占用问题,根目录满了,df和du占用不一样【转】

新公司的测试机磁盘空间空余很小,日志很多,也很大,做个日志压缩脚本,在夜里4:30自动运行,第二天后发现磁盘空间又满了,只好删除没用的日志,清空空间,可诡异的是怎么删除没用的文件,...

Gm_ning
2017/11/06
0
0
Linux下查看文件和文件夹大小

当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。 du可以查看文件及文件夹的大...

kisshua
2013/12/19
0
0
linux 查看磁盘信息

more /proc/partitions 查看所有分区信息 more /proc/scsi 查看scsi设备(移动硬盘或U盘)信息 more /proc/diskstats 查看磁盘io信息 查看文件占用的内存: 当磁盘大小超过标准时会有报警提示...

今天来找bug
2016/03/16
9
0
Linux下查看文件和文件夹大小的df和du命令

当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。 du可以查看文件及文件夹的大...

phacks
2015/02/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

win32截屏并rgb24转yuv420

//最终f的内存布局为BGRA格式,需要保证buf长度足够(>w*h*4)void ScreenCap(void* buf, int w, int h){ HWND hDesk = GetDesktopWindow(); HDC hScreen = GetDC(hDesk); ......

styleman
今天
1
0
php输出mysql取出的中文为??的问题

解决方法: @ $db=new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_DB); $db->query("set names utf8");//添加此语句,可以解决问题...

Aomo
今天
1
2
白话SpringCloud | 第五章:服务容错保护(Hystrix)

前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用。在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如网...

oKong
今天
2
0
【解惑】领略Java内部类的“内部”

内部类有两种情况: (1) 在类中定义一个类(私有内部类,静态内部类) (2) 在方法中定义一个类(局部内部类,匿名内部类) 1、私有内部类 —— 在方法之间定义的内部类,非静态 我们首先看看类中...

偶尔诗文
今天
1
0
sqlserver 2008 r2 直接下载地址(百度云)

之前下载的sqlserver2008发现不能附加,就卸载了,重新找到了sqlserver2008R2的百度云资源 卸载sqlserver2008还是有点麻烦,不过就是需要删除注册表中的信息 自己来回卸载了3次终于重装sqlse...

dillonxiao
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部