Linux:df与du查看磁盘占用空间数据不一致的原因及解决方法

目录

一、原因分析

二、解决方法

三、其它问题


使用du -sh 和df -h 查看某一个目录占用的磁盘空间,有时会发现结果相差非常大,下面我们对这个问题详细说明一下。

一、原因分析

导致出现这种情况的主要原因是一部分进程访问的文件被删除了。

首先,需要先了解一下rm删除文件的原理:

使用rm命令删除文件时,只有当该文件不存在任何link才会真正被删除,当有进程访问这个文件时,虽然通过命令查不到这个文件了,但这个文件的实际占用空间并没有被释放。

du和df的区别如下:

du:根据文件名进行的空间统计,使用rm时该文件对系统来说已经不可见,所以不会统计这个文件。

df:是磁盘实际占用的数量

二、解决方法

首先,查看已删除但是未释放空间的文件:

lsof | grep deleted

通过查询结果的前2列,可以看到访问这些文件进程名和进程编号

然后,重启这些进程,或kill掉这些进程,这些文件占用的磁盘空间就真正释放了。

三、其它问题

但也存在暂时不能停止这些进程的情况。比如,这些进程由于业务需要7*24不间断对外提供服务。

此时,如果磁盘空间已经满了,可以考虑先把这些文件清空

1、先查找出这些文件的句柄编号

ls -l /proc/<pid>/fd/* | grep <文件名>

2、使用句柄编号清空文件

echo > /proc/<pid>/fd/<FD_NUM>

FD_NUM为上一步查找出的文件句柄编号,一般为数字

以上只是临时解决方案,实际最终还是需要将进程重启一下。

参考文档

linux 查找被删除但是未被释放空间的文件并释放资源
Linux不杀进程清理 lsof中deleted 状态的文件

相关推荐
物联网软硬件开发-轨物科技1 分钟前
【轨物交流】轨物科技亮相2025高校科技成果交易会
运维·科技·物联网
uoscn5 分钟前
Ubuntu24.04无操作卡死,无法唤醒问题以及内核版本切换记录
linux·ubuntu
云和数据.ChenGuang13 分钟前
F5 Big-IP 和 LVS负载均衡.运维免费技术教程
运维·负载均衡·lvs·运维工程师·运维技术·数据库运维工程师·运维教程
facaixxx202413 分钟前
雨云服务器动态计费的CPU电量费用价格说明,举例说明
运维·服务器
乾元17 分钟前
网络遥测(Telemetry/gNMI)的结构化建模与特征化体系—— 从“采集指标”到“可被 AI 推理的状态向量”
运维·服务器·网络·人工智能·网络协议·华为·ansible
一个写python的菜鸟17 分钟前
华为服务器安装Todesk
linux·运维·服务器
小曾同学.com19 分钟前
认识Linux 的shebang行,一个特殊的注释行
linux·解释器·shebang·/usr/bin/env
有谁看见我的剑了?21 分钟前
Vmware vSphereClient为虚机安装vmtools
运维·云计算
Thexhy24 分钟前
CentOS7安装Redis全攻略
linux·经验分享·redis·学习
数字冰雹25 分钟前
从“被动响应”到“主动洞察”:数字孪生如何重塑数据中心运维
运维