背景

一台测试服务器,/data磁盘大小为300G,时不时就满了,通过df命令查看300G基本全用了,use 100%。但是进到/data目录中通过du 命令查看,也就用了20个G左右,怎么都对不上。如何清理都没有释放太多空间。查看如下所示:

df -lh

在这里插入图片描述

du -lh *

在这里插入图片描述

排查

出现以上问题,即df -lh 查看和du -lh 查看磁盘大小不同,排查思路:

  1. 检查是否挂载点出现问题,即没找到相应的挂载点或者是挂载点覆盖了原来的磁盘目录。
# mount 命令检查挂载点
mount  |grep '/data'

在这里插入图片描述
没看出来啥问题,这个命令执行完后,和df -lh显示的目录对应的文件系统是一致的,好像也没啥错啊。
2. 是否是有些文件删除后,没有释放导致的呢?先检查一下哪些文件被标记为已删除的文件

 lsof +L1|grep '/data'|grep -i deleted

上述命令中含义如下所示:

  • lsof 是查找,
  • +L1:列出所有连接计算小于1的文件(已被删除的文件)
  • grep ‘/data’: 只显示/data 目录下的文件
  • grep -i ‘deleted’:过滤出状态为deleted的文件
    执行此命令后,输出会包含多列,其中我们需要关注的是“PID”列(进程ID)和“FD”列(文件描述符),显示如下所示:
    在这里插入图片描述

还真有很多被标记了已删除的文件,到底有没有完全删除释放空间啊?不知道,如何撤底删除呢?(好比windows下我们删除了文件,进了回收站,实际还是会占用C盘资源一样,我们需要清空回收站)
“清空回收站”需要以下命令:

truncate -s 0 /proc/[PID]/fd/[FD_NUM]  # 通过lsof获取FD_NUM

如何查找PID、FD_NUM呢,需要了解一下lsof那一步中显示结果各列的含义了。以下补充了表头信息,我们只需找到对应的PID 和FD_NUM即可.

COMMAND   PID    USER      FD   TYPE DEVICE    SIZE/OFF         NODE         NAME                            STATUS
java     978732 appuser    1w   REG  253,4  303252014991  0   269777363 /data/js/WARN_CENTER/warn_center.log (deleted)
java     978732 appuser    2w   REG  253,4  303252014991  0   269777363 /data/js/WARN_CENTER/warn_center.log (deleted)
java     978732 appuser    4r   REG  253,4            0   0   269664611 /data/js/WARN_CENTER/warn_center.jar (deleted)
java     978732 appuser   10r   REG  253,4            0   0   269664611 /data/js/WARN_CENTER/warn_center.jar (deleted)

由此可见,PID为第二列对应的978732,FD_NUM对应的是第四列FD且只取数字即可:1W中的1;2W中的2即可,而其后面的字母代表文件模式,如w代表可写入;
下面我们执行"清空回收站"的命令吧:

truncate -s 0 /proc/978732/fd/1
truncate -s 0 /proc/978732/fd/2

在这里插入图片描述

操作完再次df -lh检查,磁盘已释放了,问题圆满解决
在这里插入图片描述

总结

df 磁盘占用100%,du占用很少时,两个命令对应不上大小时,可以试着清空“回收站”(已被删除的文件,未释放资源)

  1. 查看删除状态的文件有哪些,并找到相应的PID和FN_NUM
 lsof +L1|grep '/data'|grep -i deleted
  1. 通过truncate命令清除掉所有删除文件占用的资源
#PID参考上述命令结果中的第二列;FUN_NUM参考第四列并只取数字truncate -s 0 /proc/[PID]/fd/[FUN_NUM]

以上就是解决问题的问键了,但是还有一个问题,为啥rm -rf删除文件后,没有释放资源呢,原因就是进程并没有重启,如果进程重启后也可以释放,如没重启,空间资源就未释放了,那我们是不是也可以通过程启进程的方法替换truncate呢,答案是肯定的。当然可以。

除此,一般清理磁工作,可以通过du命令查看当前文件夹以子文件夹占用空间最大的文件,并指定排序后取前N条,参考以下命令

#du -ah --max-depth=1 |sort -rh|head -n 20
du -ah  |sort -rh|head -n 20

du 和df 都是Linux下磁盘空间管理的两个核心命令,有啥区别啊?

在这里插入图片描述
概述一下两命令使用场景:df查看整个磁盘或分区的使用情况,而du分析特定目录或文件的空间占用。df 看大盘,du 查细节
两个命令后面常用到的参数说明:
-a: (all): 显示所有的文件和目录占用空间(默认仅显示目录)
-h(human-readable) 不加 −h 时输出单位为字节,可读性差。加了h是用人类能看懂的方式整式,以 K/M/G/T 等易读单位自动转换字节值(例如 1.2G 代替 1234567890)

  • 日常检查用 du−sh(只显示目录总和)
  • 深度分析用 du−ah−−max−depth=N(控制递归深度)

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分钟级长视频生成迎来“记忆革命”,7倍成本降低,2.2倍端到端生成速度提升!|斯坦福字节

论文链接:https://arxiv.org/pdf/2508.21058 项目链接:https://primecai.github.io/moc/亮点直击提出了一种自适应上下文混合(Adaptive Mixture of Contexts,MoC)框架,该框架学习将每个查询路由到视频序列中…

JavaScript 设计模式概览

1. 设计模式是什么? 设计模式是开发中解决常见问题的经典方案。设计模式并非具体代码,而是解决问题的通用解决方案,帮助开发者避免重复造轮子,提升代码的可维护性、可扩展性。 2. 设计模式的历史 设计模式起源于建筑领域,由克…

(九)Spring Cloud Alibaba 2023.x:微服务接口文档统一管理与聚合

目录 前言 准备 实践 网关服务配置 1.pom.xml 引入 webflux 版本 springboc 依赖 2.application-dev.yml 配置 springboc 多服务地址 3.application-dev.yml 配置springboc 文档路由 4.网关过滤器AuthFilter.class 中放行 springboc 访问路径 业务服务配置 1.pom.xml…

在Cursor里安装极其好用的Mysql Database Client 插件

📸 插件界面展示 图片1:插件主界面和连接配置图片2:数据编辑和查询结果展示🎯 核心优势 1. 直接编辑数据 - 像DataGrip一样强大 ✅ 点击即编辑: 直接双击数据单元格,立即进入编辑模式✅ 实时保存: 编辑完成后按 Enter …

Cursor 不香了?替代与组合实践指南(Windsurf、Trae、Copilot、MCP)

当你感觉 Cursor 的产出质量和稳定性不如从前,未必一定要“全盘换掉”。本文从“替代”与“组合”两个维度给出可落地的工具编排方案,并附带决策矩阵与常见工作流,帮助你在不同场景获得稳定、可控的产出。0. 适用读者 正在使用或评估 Cursor&…

【MFC】对话框属性:X Pos(X位置),Y Pos(Y位置)

前言 本文介绍对话框属性中的X Pos(X位置)、Y Pos(Y位置),同时给出相关示例便于理解。 目录1 位置2 详解3 示例1 位置 首先介绍一下这个属性在哪里。 在资源视图中双击对话框节点,打开该对话框; 鼠标右键工作区空白处,单击属性&am…

Java面试小册(1)

1【Q】:序列化和反序列化【A】:序列化是将Java对象转化为字节流,用于网络传输,持久化或缓存。Java提供了java.io.Serializable接口实现序列化。反序列化是将字节流转为为对象。2【Q】: Java中Exception和Error有什么区…

html获取16个随机颜色并不重复

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>16个不重复随机颜色</title><style>…

Redis 缓存穿透、击穿、雪崩:防御与解决方案大全

&#x1f6e1;️ Redis 缓存穿透、击穿、雪崩&#xff1a;防御与解决方案大全 文章目录&#x1f6e1;️ Redis 缓存穿透、击穿、雪崩&#xff1a;防御与解决方案大全&#x1f9e0; 一、缓存穿透&#xff1a;防御不存在数据的攻击&#x1f4a1; 问题本质与危害&#x1f6e1;️ 解…

量子计算机的发展对传统密码学的打击

量子计算机的发展对传统密码学的核心威胁&#xff0c;源于其能高效解决传统计算机“计算不可行”的数学问题——而这些问题正是当前主流密码算法保障安全的基石。这种影响并非“全面摧毁”&#xff0c;而是针对传统密码学的不同分支&#xff08;非对称密码、对称密码、哈希函数…

《var, let, const:现代JS声明指南》

文章目录JavaScript 中 var、let、const 的差异1. 作用域&#xff08;Scope&#xff09;2. 变量提升&#xff08;Hoisting&#xff09;3. 重复声明4. 变量值是否可变对比表5. 示例代码总结JavaScript 中 var、let、const 的差异 1. 作用域&#xff08;Scope&#xff09; var 函…

在 Docker 中安装 MySQL 教程

拉取 MySQL 镜像docker pull mysql:8.0创建并启动 MySQL 容器docker run -d \--name mysql8 \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 \-v mysql_data:/var/lib/mysql \mysql:8.0命令说明&#xff1a;-d&#xff1a;后台运行容器 --name mysql8&#xff1a;给容器起个名字…

C#线程理解

目录 一.线程类 1.基础线程类&#xff08;Thread&#xff09; 2.线程池类&#xff08;Threadpool&#xff09; 3.任务并行库&#xff08;Task&#xff09; 4.并行循环&#xff08;Parallel&#xff09; 二.线程池(threadPool)和Thread/Task之间的联系 1.ThreadPool和Thr…

Java入门级教程16——JUC的安全并发包机制

目录 1.JUC的安全并发包机制 1.1 包含 1.2 Barrier(栅栏)机制——CyclicBarrier&#xff08;循环屏障&#xff09; 1.2.1 定义 1.2.2 特性 1.2.1 模拟包车 1.2.2 模拟学生到齐上课 1.2.3 计算任务总耗时 1.3 CountDownLatch(闭锁)机制 1.3.1 定义 1.3.2 特性 1.3.3…

【网络通信】全面解析MAC地址:网络设备的唯一标识

【网络通信】全面解析MAC地址&#xff1a;网络设备的唯一标识 文章目录【网络通信】全面解析MAC地址&#xff1a;网络设备的唯一标识前言一、MAC 地址的定义&#xff1a;设备的 “网络身份证”​二、MAC 地址的格式与组成&#xff1a;48 位的 “数字编码”​三、MAC 地址的工作…

Perforce Klocwork 2025.2版本更新:默认启用现代分析引擎、支持 MISRA C:2025 新规、CI构建性能提升等

Perforce Klocwork 现已更新至2025.2版本&#xff01;该版本增强了对 C/C的分析能力&#xff0c;提升了现代 C 分析的准确性&#xff0c;并改进了对源文件编码的支持。该版本还为 MISRA C:2025 标准引入了新的分类体系&#xff0c;并增强了 Visual Studio Code 插件的可用性。 …

机器人驭风而行:低空经济如何开启智能新纪元【科普类】

新晋码农一枚&#xff0c;小编会定期整理一些写的比较好的代码和知识点&#xff0c;作为自己的学习笔记&#xff0c;试着做一下批注和补充&#xff0c;转载或者参考他人文献会标明出处&#xff0c;非商用&#xff0c;如有侵权会删改&#xff01;欢迎大家斧正和讨论&#xff01;…

Java学习笔记四(继承)

1 继承继承的实现&#xff1a;public class 子类 extends 父类 {… }注释&#xff1a;子类可直接使用&#xff0c;父类&#xff08;保护&#xff0c;公开&#xff09;的属性和方法优点&#xff1a;减少重复代码&#xff0c;缺点&#xff1a;只能单继承// 父类 public class Tes…

NAT技术:SNAT与DNAT区别详解

1. 什么是NAT&#xff1f; 定义&#xff1a;NAT 是一种网络技术&#xff0c;用于在私有网络&#xff08;如家庭或企业局域网&#xff09; 与 公共网络&#xff08;如互联网&#xff09; 之间转换IP地址。它允许使用私有IP地址的设备通过一个&#xff08;或多个&#xff09;公共…

java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割

java语言中&#xff0c;list<String 转成字符串&#xff0c;逗号分割 在 Java 中&#xff0c;将 List<String> 转成逗号分割的字符串有多种方法&#xff1a; 使用 String.join 方法 String.join 是 Java 8 引入的一个静态方法&#xff0c;它可以方便地将集合中的元素用…