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

相关推荐
乱码三千20 分钟前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei3722 分钟前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei3722 分钟前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei3722 分钟前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
judezh23 分钟前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker
GeW26 分钟前
制造业高端化,为什么必须重估Linux和数据库?
linux
GeW34 分钟前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux
春天花会开13134 分钟前
内网 HTTPS 部署实战:私有 CA + Nginx 反向代理全流程复盘
运维·nginx·https
yunwei3735 分钟前
eBPF 开发者教程: 简单的 XDP 负载均衡器
linux·后端·性能优化
yunwei3738 分钟前
超越 eBPF 的极限:在内核模块中定义自定义 kfunc
linux·后端·性能优化