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 状态的文件

相关推荐
J心流3 分钟前
SSH远程连接 github/云效 的操作流程
运维·ssh·github
爱装代码的小瓶子6 分钟前
【C++与Linux进阶】详解信号的捕获:内核态和用户态的转换
linux·开发语言·c++
袁小皮皮不皮10 分钟前
【HCIA】第一章网络基础
运维·服务器·网络·网络协议·智能路由器
AI周红伟14 分钟前
周红伟:OpenClaw+ 微信+ QQ+云上OpenClaw(Clawdbot)快速接入企业微信指南
运维·服务器·网络
KKKlucifer16 分钟前
基于 UEBA 的堡垒机异常运维行为检测与告警模型
运维
数通工程师37 分钟前
搞定数通设备账号安全:登录审计、紧急踢线、故障排查与配置规范
运维·网络·网络协议·安全·网络安全
ManchiBB38 分钟前
Ubuntu 部署OpenClaw教程
linux·运维·ubuntu
桌面运维家38 分钟前
Linux网络负载均衡:Nginx实战优化Web性能
linux·网络·负载均衡
智能运维指南1 小时前
信创改造 “二次开发陷阱“:国产DevOps 平台选型的原生功能完整性评估要点
运维·devops
Zfox_1 小时前
【Docker#6】Docker 容器常用命令
linux·运维·服务器·docker·容器