文章目录

  • 引言
  • df/du 原理
  • 排查思路
    • 文件系统预留空间
    • 进程占用句柄
    • 挂载覆盖

引言

核心在于执行df和du的时候发现显示的存储量完全不同,我本地系统盘有99G空间,du显示占用了45G,但是df却显示使用了99G,排查的过程本文所示。

先记录几条大多数时候有用命令,看完文章就知道为什么有时候是不管用的了hhh

  1. du -h / --exclude="data1" 2>/dev/null | grep '[0-9\.]\+G' 可以检查出目前/路径下目录的大小
  2. du -Sh ~ --max-depth=2 | sort -hr | head -10 可以递归的检查文件的大小
  3. find . -xdev -type f -size +100M 查找100M以上的文件
  4. find ~ -maxdepth 10 -type f -exec du -h {} + | sort -rh | head -10 最大文件top10

df/du 原理

从man page可以得到如下关键句:

df: df displays the amount of disk space available on the file system containing each file name argument.
du: Summarize device usage of the set of FILEs, recursively for directories.

从原理上讲,df是从super block直接读取该文件系统的元信息,简单的翻阅源码和执行下strace df -h后不难发现df实际是执行了statfs,这个系统调用用于返回已经挂载的文件系统的元信息。

而du则完全不同,其原理是调用递归遍历目录,调用newfstatat系统调用获取文件信息,这允许 可以跨越多个文件系统统计大小,但是目录中文件很多时速度很慢。

[1][2]中描述df/du原理也很详细

排查思路

了解df/du原理后我们知道有三个情况可能这两种情况显示不同

文件系统预留空间

为了预防紧急情况,linux ext文件系统会预留部分硬盘空间,具体预留的数值可以通过tune2fs -l [dev_name] | grep "Reserved block count"查看,这里预留的空间会被df计算到已用空间中,从而导致df和du统计不一致。如果需要调整预留空间大小,我们可以使用tune2fs -m [size] [dev_name]来进行调整。

进程占用句柄

当一个文件被删除时,如果有别的进程正在使用它(占有句柄), 这个文件将不会被du统计到,但是这个文件被占用的磁盘空间却依然会被df统计到。这些文件,以及正在使用这些文件的进程可以通过lsof | grep deleted查到。当进程停止或者被kill时,这些空间将被释放。 暴力的执行kill -9 $(lsof |grep -i deleted | awk '{print $2}' | sort -u) 可以删除这些进程,

挂载覆盖

当将一个目录挂在到一个新的设备(硬盘)上时,如果这个目录里面已经有数据,那么这一部分数据不会被遍历到,自然也不会被du感知,在文件系统中也看不到这些数据,但是这些数据又是确实占用了磁盘空间,是能够被df所统计到的。这时候通过du/df统计原设备的空间使用情况,就会发现df统计到的比du要多。

因为我把数据盘挂载在了根目录中,解决的方案就是unmount后删除这部分目录,我在这部分释放了15G空间。

umount的时候可以会遇到busy的情况,

  1. 因为代码都在挂载的盘中,首先关闭vscode的所有终端
  2. 其次镜像存储都在挂载的盘中,关闭minikube:minikube stop; minikube delete
  3. 关闭 docker: systemctl stop docker
  4. 再检查与挂载设备关联的进程:lsof /data1

参考:

  1. http://sysunconfig.net/aixtips/df_du_diff_out.txt
  2. https://www.quora.com/What-is-the-difference-between-DU-and-DF-in-Linux
  3. umount卸载磁盘提示target is busy. (目标忙) 的问题解决方案

从一到无穷大 #6 盘满排查过程相关推荐

  1. 百度网盘满速下载文件

    百度网盘满速下载文件 工具:IDM,油猴,谷歌浏览器. 1.IDM是一款多线程下载工具,可以嗅探网页资源,代替浏览器高速下载文件. IDM下载安装参照下面教程:https://www.onlinedo ...

  2. 计算机D盘已经清空了为什么显示还是满格的,d盘满到变红色了怎么清理 d盘满到变红色的清理方法...

    首先可以利用电脑内的杀毒软件来清理一下缓存文件所产生的垃圾:也可以通过重装系统,将所有的系统盘全部格式化,然后重新分区分配:或者为D盘扩容也可以,这样D盘就不会出现变红色的情况了. d盘满到变红色了怎 ...

  3. 多队列 部分队列没有包_记一次TCP全队列溢出问题排查过程

    简介:记一次TCP全队列溢出问题排查过程 1. 前言 本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家. 2. 问题描述 ...

  4. 一次堆外OOM问题的排查过程

    转载自   一次堆外OOM问题的排查过程 背景 线上服务有一台机器访问不通(一个管理平台),在公司的服务治理平台上查看服务的状况是正常的,说明进程还在.进程并没有完全crash掉.去线上查看机器日志, ...

  5. mysql 5.7 延迟同步_MySQL5.6升级5.7时出现主从延迟问题排查过程

    最近在做zabbix的数据库MySQL5.6升级5.7时,出现主从延迟问题,这个问题困扰了很久没有解决,昨天终于解决了,整理了一下整个排查过程,分享给大家. 环境说明: mysql主库为5.6的版本, ...

  6. 内存很空却频繁gc_记一次不太成功的频繁 full gc 排查过程

    上周自己负责的一个应用出现频繁full gc的问题,不得不尝试优化一下.第一次做这种事只能先看看网上的文章,然后亲自尝试怎么去完成减少full gc的频率,降低young gc的频率这一目标.虽然最终 ...

  7. mysql5.6 主从 延迟_MySQL5.6升级5.7时,出现主从延迟问题排查过程

    最近在做zabbix的数据库MySQL5.6升级5.7时,出现主从延迟问题,这个问题困扰了很久没有解决,昨天终于解决了,整理了一下整个排查过程,分享给大家. 环境说明: mysql主库为5.6的版本, ...

  8. window服务器cpu过高的排查_生产服务器CPU占用率过高排查过程

    一.问题详情 现象:API接口访问耗时过长,排查发现当前节点内存使用3.9G,CPU占用率295%. 当前节点已两周没发版,怀疑内存没有释放,可能是JVM垃圾回收的问题. 二.排查过程 1.定位问题进 ...

  9. 记录Rocketmq定时消息不消费问题的排查过程

    记录Rocketmq定时消息不消费问题的排查过程 写在前面 问题根源初步确认 问题根源再次确认. 了解rocketmq定时消息原理以及处理过程. 源码调试 结论求证 后记 写在前面 此本记录了一个项目 ...

最新文章

  1. Halcon算子盘点:Chapter 16:System
  2. Boost Asio总结(12)class basic_socket_acceptor
  3. swagger2使用步骤
  4. Maven-打包的时候丢失非.java的文件
  5. “每天AI资讯这么多!该看哪些?”推荐一份优质资料清单
  6. 微信小程序 Video API
  7. Arduino控制微小的六足3D打印机器人
  8. python分布采样_python – 从有界域zipf分布中采样
  9. allegro铜皮优先级设置
  10. 进程间通信方式有哪些?各自有哪些优缺点?
  11. apk部分手机安装失败_安卓手机安装软件失败的4种常见原因和解决办法
  12. 03【Verilog实战】UART通信协议,半双工通信方式(附源码)
  13. 如何评价 2021 考研政治题,难度如何?
  14. 软件项目外包找我(附案例)
  15. 如何做好数据治理平台
  16. mysql半同步 rpo_PostgreSQL 双节点流复制如何同时保证可用性、可靠性(rpo,rto) - (半同步,自动降级方法实践)-阿里云开发者社区...
  17. WebRTC理论入门
  18. We‘re sorry but 项目名称 doesn‘t work properly without JavaScript enabled. Please enable it to continue.
  19. java+ssh+mysql学生用电服务管理系统
  20. 【BurpSuite】插件开发学习之J2EEScan - 汇总篇(主动+被动1-76)

热门文章

  1. OA软件厂商的综合素质到底有多重要?
  2. Praat脚本-029 | 一种更有效的校对音频内容的方案
  3. 生活中的经典感人语句
  4. int a[ ]={0};
  5. 语言代码与国家地区对照表(表格)
  6. C语言每日一练——第90天:青蛙跳台阶(升级版)
  7. canvas 绘制逼真人物_绘制逼真的iPad2 – Photoshop教程
  8. 哈尔滨小学计算机上课时间,哈市中小学各校新学期作息时间调整汇总,看看有没有你的学校!...
  9. java基础知识问题导航
  10. 前端框架Layui学习五:弹出层和数据表格