df和du显示的磁盘空间使用情况不一致的原因及处理

2023-10-30

df和du显示的磁盘空间使用情况不一致的原因及处理

在Linux下查看磁盘空间使用情况,最常使用的就是du和df了。然而两者还是有很大区别的,有时候其输出结果甚至非常悬殊。

1. 如何记忆这两个命令

du- - -Disk Usage
df- - -Disk Free

2. df 和du 的工作原理

2.1 du的工作原理

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

2.2 df的工作原理

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

3 du和df不一致情况模拟

常见的df和du不一致情况就是文件删除的问题。当一个文件被删除后,在文件系统 目录中已经不可见了,所以du就不会再统计它了。然而如果此时还有运行的进程持有这个已经被删除了的文件的句柄,那么这个文件就不会真正在磁盘中被删除, 分区超级块中的信息也就不会更改。这样df仍旧会统计这个被删除了的文件。

(1)当前分区sda1的使用情况

  1. [root@centos192 testdu]# df -h /dev/sda1
  2. 文件系统 容量 已用 可用 已用%% 挂载点
  3. /dev/sda1 49G 776M 45G 2% /var

(2)新建一个1GB的大文件

  1. [root@centos192 var]# dd if=/dev/zero of=myfile.iso bs=1024k count=1000
  2. 记录了1000+0 的读入
  3. 记录了1000+0 的写出
  4. 1048576000字节(1.0 GB)已复制,24.0954 秒,43.5 MB/秒

(3)此时的分区sda1使用情况

df结果:

  1. [root@centos192 var]# df -h /dev/sda1
  2. 文件系统 容量 已用 可用 已用%% 挂载点
  3. /dev/sda1 49G 1.8G 44G 4% /var
    du结果:
  4. [root@centos192 var]# du -sh /var/
  5. 1.6G /var/
    此时两者结果基本相同。

(4)模拟一个进程打开这个大文件,然后删除这个大文件

  1. [root@centos192 var]# tail -f myfile.iso &
  2. [1] 23277
  3. [root@centos192 var]# rm -f myfile.iso

(5)此时,再对比du和df的结果

首先确认有进程持有myfile.iso句柄。

  1. [root@centos192 var]# lsof | grep myfile.iso
  2. tail 23955 root 3r REG 8,1 1048576000 7999 /var/myfile.iso (deleted)
  1. [root@centos192 var]# du -sh /var/
  2. 596M /var/
  3. [root@centos192 var]# df -h /dev/sda1
  4. 文件系统 容量 已用 可用 已用%% 挂载点
  5. /dev/sda1 49G 1.8G 44G 4% /var

可以看出,df结果没有变化,而du则不再统计被删除了的文件myfile.iso。

(6)停止模拟进程,再对比du和df结果

首先确认没有进程持有myfile.iso句柄。

  1. [root@centos192 var]# lsof | grep myfile.iso
  2. [root@centos192 var]#
  1. [root@centos192 var]# du -sh /var/; df -h /dev/sda1
  2. 596M /var/
  3. 文件系统 容量 已用 可用 已用%% 挂载点
  4. /dev/sda1 49G 776M 45G 2% /var
    此时,myfile.iso已经没有进程占有它了,也就从磁盘上删除了,分区的超级块信息已经更改,df也就显示正常了。

4 工作中需要注意的地方

(1)当出现du和df差距很大的情况时,考虑是否是有删除文件未完成造成的,方法是lsof命令,然后停止相关进程即可。
(2)可以使用清空文件的方式来代替删除文件,方式是:echo > myfile.iso。
(3)对于经常发生删除问题的日志文件,以改名、清空、删除的顺序操作。
(4)除了rm外,有些命令会间接的删除文件,如gzip命令完成后会删除原来的文件,为了避免删除问题,压缩前先确认没有进程打开该文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

df和du显示的磁盘空间使用情况不一致的原因及处理 的相关文章

  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 如何使用 Cloud Init 挂载未格式化的 EBS 卷

    Context 我正在使用https wiki jenkins io display JENKINS Amazon EC2 Plugin https wiki jenkins io display JENKINS Amazon EC2 Pl
  • 在centos中安装sqlite3 dev和其他包

    我正在尝试使用 cpanel 在 centos 机器上安装 sqlite dev 和其他库 以便能够编译应用程序 我对 debian 比 centos 更熟悉 我知道我需要的库是 libsqlite3 dev libkrb5 dev lib
  • 就分页分段内存而言的程序寿命

    我对 x86 Linux 机器中的分段和分页过程有一个令人困惑的概念 如果有人能澄清从开始到结束所涉及的所有步骤 我们将很高兴 x86 使用分页分段内存技术进行内存管理 任何人都可以解释一下从可执行的 elf 格式文件从硬盘加载到主内存到它
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 使用 MAX_ORDER / 包含 mmzone.h

    根据https www kernel org doc Documentation networking packet mmap txt https www kernel org doc Documentation networking pa
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 绕过 dev/urandom|random 进行测试

    我想编写一个功能测试用例 用已知的随机数值来测试程序 我已经在单元测试期间用模拟对其进行了测试 但我也希望用于功能测试 当然不是全部 最简单的方法是什么 dev urandom仅覆盖一个进程 有没有办法做类似的事情chroot对于单个文件并
  • 这种文件锁定方法可以接受吗?

    我们有 10 个 Linux 机器 每周必须运行 100 个不同的任务 这些计算机主要在我们晚上在家时执行这些任务 我的一位同事正在开发一个项目 通过使用 Python 自动启动任务来优化运行时间 他的程序将读取任务列表 抓取一个打开的任务
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • express.js api 应用程序中的内存泄漏

    我正在运行一个express js应用程序 它用作REST API 一个端点启动 puppeteer 并使用多个过程测试我的网站 启动应用程序并持续消耗端点后 我的 docker 容器每小时都会耗尽内存 如下所示 首先 我认为我的 pupp
  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • 从核心转储中获取堆栈跟踪

    如何从核心转储文件中获取堆栈跟踪 该文件大约 14 mb 是在我的应用程序退出并显示 分段错误 后生成的 我使用的是红帽 5 5 gdb usr bin myapp binary corefile 然后 使用以下之一 gdb bt gdb
  • 跨 CPU 内核的 rdtsc 精度

    我从一个线程发送网络数据包 并在运行于不同 CPU 核心上的第二个线程上接收回复 我的流程测量每个数据包发送和接收之间的时间 类似于 ping 我使用 rdtsc 来获得高分辨率 低开销的计时 这是我的实现所需要的 所有测量结果看起来都很可
  • 从另一个 python 脚本获取返回信息

    我在 Linux 上 我有一个 python 脚本 我想从另一个 python 脚本调用它 我不想将其作为模块导入 为了一层安全性 现在为了学术练习 因为我想弄清楚这一点 我实际上想让一个脚本使用 os system 或另一个类似的函数 并

随机推荐

  • 深度图拼接

    度量变换 图像拼接 检测深度图 国科大图像处理实验 度量变换 图像拼接 检测深度图 国科大图像处理实验 Root dobby的博客 CSDN博客 问题描述 目录hw3下有立体视觉对应的两幅图像view1 png和view5 png 图像来源
  • 家用电脑可以用做服务器吗

    家用电脑的结构与服务器的结构是相同的 家用电脑是可以用来搭建服务器使用 但使用家用电脑做服务器在稳定性会比服务器差很多 1 家用电脑没有公网IP 网络运营商分配的IP重启路由之后是会变化 不固定 服务器运行是需要有固定IP让人连接访问 使用
  • Ngui 五种点击事件实现方式

    ngui作为unity界面插件之一中 无疑是最好用 使用最多的了从自学unity到现在界面一直使用它 由于它的持续更新 我在此不得不说 确实很为开发者作想 为什么这么讲呢 大概在去年吧 当时用的那个版本已经不记得了 反正就是有个需求 要实现
  • HTC相关开发所需SDK等工具都在这里了

    HTC相关开发所需SDK等工具都在这里了 转 OpenVR SDKhttps github com ValveSoftware openvr OpenVR SDK是由原本的SteamWorks SDK更新而来 新增对HTC VIVE开发者版
  • 时间格式转换LongToString

    import java util Calendar import java util Date import org apache commons lang3 StringUtils import org apache commons la
  • 3.Qt消息机制和事件

    9 Qt消息机制和事件 好文来自https www cnblogs com weizhixiang p 5824345 html 一 事件 鼠标 敲下键盘 或者是窗口需要重新绘制的时候 都会发出一个相应的事件 Qt 程序需要在main 函数
  • 人工智能在游戏开发中的应用:你目前所需的 6 大 AI 工具

    游戏体量越大 质量越高 所要求的标准就越严格 尤其是在 AAA 级游戏市场 任何失误都可能导致你陷入极其棘手的境地 影响玩家体验 进而招致恶评 随着对游戏的需求和预期不断攀升 游戏开发人员比以往任何时候都需要更多帮助 那么 他们如何才能紧跟
  • Consumer位移管理-Kafka从入门到精通(十一)

    上篇文章说了 sesstion time out max poll interval ms max poll records和auto offset reset等参数 KafkaConsumer Kafka从入门到精通 十 https bl
  • eclipse如何创建多层包(多级包)

    包是Java中一个非常重要的概念 实质上包就是一个文件夹 我们在每次创建工程之前 要将不同的类放在不同的包里 以方便管理和避免类名重复所带来的麻烦 以后在使用其他包的类时 只需要使用 import 关键字进行包含就可以了 那么 在eclip
  • HTTPS 证书认证具体流程

  • Appium自动化框架从0到1之 日志文件配置(log.conf)

    在config文件中 我们先把log的输出格式 输出路径等参数抽离出来作为一个配置表 这个写法 在selenium自动化框架中 是没有分离的 所以 我们有get到一个新方法 代码如下 log conf loggers keys root i
  • C#中Console.WriteLine()的用法

    C 中Console WriteLine 的用法 以前用Console WriteLine 的时候就只会用它直接输出string字符串 但后来发现它还有其它在有些场合下会十分方便的输出方法 这篇就记录一下这些方法的使用吧 代码格式我就不写了
  • 向HashSet中添加元素的过程:

    向HashSet中添加元素的过程 1 当向 HashSet 集合中存入一个元素时 HashSet 会调用该对象的 hashCode 方法来得到该对象的 hashCode 值 然后根据 hashCode 值 通过某种散列函数决定该对象在 Ha
  • 微信小程序实战八:优惠券页面的实现

    文章目录 1 效果预览 2 wxml布局 3 js逻辑 4 样式设置 1 效果预览 2 wxml布局 顶部tab切换
  • cucumber ,运行feature一直提示 Undefined step: Given login baidu

    Undefined step Given login baidu You can implement missing steps with the snippets below Given login baidu public void l
  • 软件测试员必知!压力测试总共需要几个步骤?思路总结篇

    在运维工作中 压力测试是一项很重要的工作 比如在一个网站上线之前 能承受多大访问量 在大访问量情况下性能怎样 这些数据指标好坏将会直接影响用户体验 今天我们就来深入了解下压力测试 首先 什么是压力测试 软件压力测试是一种基本的质量保证行为
  • Python 实现 RAS 加解密(ras模块,pycrypto模块)

    一 pycrypto pycryptodome模块 1 模块安装说明 crypto这个模块的安装有点小坑 需要注意 crypto pycrypto pycryptodome的功能是一样的 crypto与pycrypto已经没有维护了 所以
  • uni-app开发微信小程序,textarea组件宽度设置,解决超出父级div

    问题描述 当我们使用textarea组件时 会出现设置宽度100 但其超出了父级Div 如下图 解决方案 添加box sizing border box 属性 即可完美解决 属性定义及使用说明 box sizing 属性定义如何计算一个元素
  • 【Python】高级变量类型

    目录 列表 List 编辑列表定义与结构 编辑列表的操作 元组 Tuple 编辑元组的定义 编辑元组的操作 编辑元组与格式化字符串 编辑元组和列表的转换 字典 dictionary 编辑字典的定义 编辑字典的操作 字符串 string 编辑
  • df和du显示的磁盘空间使用情况不一致的原因及处理

    df和du显示的磁盘空间使用情况不一致的原因及处理 在Linux下查看磁盘空间使用情况 最常使用的就是du和df了 然而两者还是有很大区别的 有时候其输出结果甚至非常悬殊 1 如何记忆这两个命令 du Disk Usage df Disk