目录
一、原因分析
二、解决方法
三、其它问题
使用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为上一步查找出的文件句柄编号,一般为数字
以上只是临时解决方案,实际最终还是需要将进程重启一下。
参考文档文章来源:https://www.toymoban.com/news/detail-841666.html
linux 查找被删除但是未被释放空间的文件并释放资源
Linux不杀进程清理 lsof中deleted 状态的文件文章来源地址https://www.toymoban.com/news/detail-841666.html
到了这里,关于Linux:df与du查看磁盘占用空间数据不一致的原因及解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!