问题描述

服务器磁盘空间使用率即将100%,使用rm -rf 日志文件名删除文件后,再使用df -h查看,发现磁盘空间未释放还是百分百

问题原因

在linux系统中,通过rm删除文件将会从文件系统的目录结构上解除链接,但此时如果文件是正在被使用,比如java服务没关你要删了他的关联日志,那么进程其实仍然可以读取该文件,只是你在列表上看不见了,磁盘空间也一直被占用,除非把占用他的服务关闭,此时写入的流关闭,文件正式被删除

解决方案

方法一(会将关联程序杀掉,需要将被杀的程序在进行重启)

当linux打开一个文件的时候,Linux内核会为每一个进程在/proc/nnnn/fd/目录(nnnn为pid进程好号),建立一个以其pid 为名的目录用来保存进程的相关信息,而其子目录fd保存的是该进程打开的所有文件的fd

说到这你就明白了没错,我的第一个方法就是直接杀那个关联进程.

# 推荐第一种,第二种的没用的数据太多

[root@localhost ~]# find /proc/*/fd -ls | grep '(deleted)'

[root@localhost ~]# lsof | grep deleted

 # kill掉相应的进程或者重启该进程,让os自动回收磁盘空间

[root@localhost ~]# kill -9 进程号              

方法二(程序很重要,不能被停止方法)

通过该进程,进入到对应的/proc/nnnn/fd/目录,仍然可以找到对应的被删除文件

找到后缀是(delete的标签)

 

[root@localhost ~]# echo " " > 文件名

或(推荐第二种)

[root@localhost ~]# echo " " > "/proc/$pid/fd/$fd"

推荐你使用下图方法,上面命令行第二种:

当然这个方法也可以用来恢复被误删除的文件数据,直接cat删除的文件名(仅限于被删除文件还被进程占用没有被完全释放)

------------------------------------------与正文内容无关------------------------------------ 如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!小弟在这拜谢了! 如果您觉得我的文章在某些地方写的不尽人意或者写的不对,从而让你对你人生观产生颠覆(概不负责),需要斧正,麻烦在评论区不吝赐教,作者看到后会根据您的提示查阅文章进行修改,还这世间一个公理一片蓝天  

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。