从一到无穷大 #6 盘满排查过程

news2025/2/24 9:58:10

文章目录

  • 引言
  • 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. (目标忙) 的问题解决方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络协议与攻击模拟-03-ARP协议

ARP 协议(地址解析协议) 一、 ARP 协议 将一个已知的 IP 地址解析为 MAC 地址,从而进行二层数据交互 是一个三层的协议,但是工作在二层,是一个2.5层协议 二、工作流程 1、两个阶段 ARP 请求 ARP 相应 2、 ARP 协议…

TinyML:使用 ChatGPT 和合成数据进行婴儿哭声检测

故事 TinyML 是机器学习的一个领域,专注于将人工智能的力量带给低功耗设备。该技术对于需要实时处理的应用程序特别有用。在机器学习领域,目前在定位和收集数据集方面存在挑战。然而,使用合成数据可以以一种既具有成本效益又具有适应性的方式训练 ML 模型,从而消除了对大量…

链表,栈,队列,递归行为,哈希表,有序表

文章目录 链表1.单链表/双链表的反转2.删除链表中指定的值 队列1.数组循环队列的实现2. 双向链表实现双端队列 栈1.用数组实现栈 栈和队列的面试题1. 实现最小栈2. 两个栈实现一个队列3.两个队列实现一个栈4.用栈实现图的广度优先遍历5.用队列实现图的深度优先遍历 递归Master公…

Spring Boot 3.0.x 自动配置文件加载原理

我们知道 Spring Boot 开启自动配置使用的是 EnableAutoConfiguration 注解,一般使用组合了它的 SpringBootApplication 主注解即可。那么 Spring Boot 是如何加载包含了各种需要自动配置的类的配置文件的呢?本文我们基于 Spring Boot 3.0.6 一起看看 Sp…

ChatGLM实战 - 文本信息抽取

1. ChatGLM介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存&…

微服务之事务处理

Informal Essay By English Hi guys、happy labor day. Everyone should have a good time to relax during the Labor Day holiday. But don’t forget to improve yourself during the holiday period 参考书籍: “凤凰架构” “微服务架构设计模式” 引言 …

K8S[Kubernetes]快速安装组件(Kubectl Kubeadam Kubeinit)

文章目录 配置K8S主从集群前置准备操作一:主节点操作 查看主机域名->编辑域名1.1 编辑HOST 从节点也做相应操作1.2 从节点操作 查看从节点102域名->编辑域名1.3 从节点操作 查看从节点103域名->编辑域名 二:安装自动填充,虚拟机默认…

汇编语言学习笔记四

字符 字符是以ASCII码的形式存储的,一个字符对应着8为二进制数,2位16进制数。 所以可以得到对应的字符地址。 assume ds:data data segmentdb hellodb world data endsand or指令 根据ASCII码,字符的大写和小写相差一个0010 0000&#xff…

Java的锁事

乐观锁和悲观锁 悲观锁 认为自己在使用数据的使用一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改 synchronized关键字和Lock的实现都是悲观锁 适合写操作多的场景,先加锁可以保证写操作时数据正确 …

SpringcloudAlibaba详解

目录 微服务架构概念 服务治理 服务调用 服务网关 服务容错 链路追踪 SpringcloudAlibaba组件 Nacos 负载均衡 Ribbon Fegin Sentinel 高并发测试 容错方案 Sentinel入门 Feign整合Sentinel 微服务架构概念 服务治理 服务治理就是进行服务的自动化管理&#xf…

解决使用git命令查看的某次提交时间与git log中显示的不一致的问题

文章目录 问题描述缘由解决办法参考资料 问题描述 笔者的使用环境: Git 2.37.0.windows.1 TortoiseGit 2.11.0.0 IntelliJ IDEA 2022.3.1 (Ultimate Edition) 笔者遇到一个问题,需要查看 Git 某个提交(commit)的时间&#xff0…

女朋友说总是记不住Git命令,怎么办?安排!

如果你也和我女朋友一样总是忘记Git命令,觉得记忆Git命令是很枯燥和麻烦的事情。我写了一个包含了40 条常用Git命令的清单。你一定要收藏起来,当你忘记Git命令的时候,就可以打开来查看啦!!! 1.初始化本地仓…

程序员实习和就业选择应该怎么做?分享4个重要的影响因素

近期后台很多人都有问到找实习、找工作相关的问题,今天就展开聊聊。首先,理个时间点给大家提个醒,暑期实习的简历投递时间集中在3月-5月,秋招简历投递时间集中在6月-10月。所以,今年想找实习、想投秋招的学生一定要注意…

MySQL的概念,编译及安装

一.数据库的基本概念 1、数据(Data) • 描述事物的符号记录 • 包括数字,文字,图形,图像,声音,档案记录等 • 以“记录”形式按统一的格式进行存储 2、表 • 将不同的记录组织在一起 • …

WiFi也能检测人体3D动作?误差低至2.4厘米

佛罗里达州立大学和罗格斯大学的科研人员开发了一种基于Wi-Fi传感的3D网格技术:Wi-Mesh,该方案宣称可识别并创建可靠的3D人体网格,可辅助计算机视觉、AR/VR定位等应用。 简单来讲,Wi-Mesh通过分析多个Wi-Fi天线接收的反射信号&…

ubuntu20安装electron并用electron-packager打包

起因是想复现港科大的无人机集群GUI界面:https://github.com/HKUST-Aerial-Robotics/swarm_gcs 这是一个用javascript写的,基于electron和nodejs的可以用浏览器打开的gui界面,其中3d显示的部分用的是Three.js。electron有一个好处是可以跨平台…

【MySQL学习】MySQL数据类型

文章目录 前言一、数据类型分类二、数值类型2.1 TINYINT类型2.2 BIT类型2.3 小数类型2.3.1 float类型2.3.2 decimal类型 三、字符串类型3.1 CHAR类型3.2 VARCHAR类型3.3 CHAR和VARCHAR比较 四、日期和时间类型五、ENUM和SET类型 前言 MySQL 数据类型定义了列中可以存储什么数据…

串口信息打印规范(含打印技巧)

1.串口信息打印规范 学习一下串口打印信息的格式(清楚明了,调试过程中很重要) 日志级别:info(初始化)、debug(运行过程)、error(报错) [日志级别] 文件名 …

二十一、SQL 数据分析基础与进阶:窗口函数

文章目录 一、什么是窗口函数二、聚合函数OVER()函数三、PARTITION BY 子句四、排序函数4.1 ROW_NUMBER() 函数4.2 演示 RANK()、DENSE_RANK()、ROW_NUMBER() 函数的异同4.3 NTILE() 函数4.4 LAG() 和 LEAD() 函数4.5 FIRST_VALUE() 和 LAST_VALUE() 函数 五、Window Frames 自…

S5CL:通过分层对比学习统一全监督、自监督和半监督学习

文章目录 S5CL: Unifying Fully-Supervised,Self-supervised, and Semi-supervised Learning Through Hierarchical Contrastive Learning摘要本文方法损失函数 实验结果消融实验 S5CL: Unifying Fully-Supervised,Self-supervised, and Semi-supervised Learning Through Hier…