文档章节

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

P
 PACIDC
发布于 2015/11/04 10:24
字数 822
阅读 500
收藏 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...

问题终结者
2018/07/13
0
0
第九章 Linux系统下分区、格式化磁盘,学会挂载和卸载磁盘

1. 请查资料了解这些术语:/dev/hda, /dev/hdb, /dev/sda, /dev/sdb, 他们之间有什么区别? /dev/hda, /dev/hdb 是 IDE借口硬盘的块文件。 /dev/hda 第一块IDE磁盘 ; /dev/hdb 第二块IDE磁盘...

WINWINJJ
2018/10/30
0
0
诡异的Linux磁盘空间被占用问题,根目录满了,df和du占用不一样【转】

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

Gm_ning
2017/11/06
0
0
Linux下查看文件和文件夹大小的df和du命令

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

phacks
2015/02/07
0
0
Linux下查看文件和文件夹大小

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

kisshua
2013/12/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Django进阶 1.1 ORM基础—ORM 1.2.1 增删改查之查询 1.2.2 删改增 (1) 1.2.3 删改增 (2)

ORM基础 ORM是Django操作数据库的API,Django的作者将sql语句封装在里面供我们使用。 我们前面还提到过Django提供一个模拟数据库的工具,sqlite,供我们学习测试使用。 如果我们想使用mysql...

隐匿的蚂蚁
今天
1
0
Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
3
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部