Linux系统下处理已删除文件继续占用磁盘空间的问题

      前些天,我们系统装有mysql服务器的那台机器磁盘使用率达到了92% ,顿时感觉很奇怪,我们那台服务器的磁盘大小为500G,其实我们的数据内容大小怎么的也不会超过20G,为什么会占用这么大的磁盘空间呢?  

      最后,一层一层的查找,发现是我们没有关闭mysql的general_log,也就是这个文件会记录所有的SQL记录,导致这个文件越来越大。然后,我也没有多想,就直接用rm -rf 命令将这个general_log.csv文件删除了。之后用df -hl文件发现磁盘空间使用率竟然还是92% ,百思不得其解。最后,找到了原因。

   

在Linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间,最后造成磁盘空间占用100%,整个系统无法正常运行。这种情况下,通过df和du命令查找的磁盘空间,两者是无法匹配的,可能df显示磁盘100%,而du查找目录的磁盘容量占用却很小。

遇到这种情况,基本可以断定是某些大文件被某些程序占用了,并且这些大文件已经被删除了,但是对应的文件句柄没有被某些程序关闭,造成内核无法收回这些文件占用的空间。

那么,如何查找那些文件被某些程序占用呢:

使用lsof -n | grep deleted命令可以查找出那些已经删除但是继续占用内存空间的文件。

之后,关掉或者重启占用这些文件的应用程序就可以释放磁盘空间了。


你可能感兴趣的:(Linux系统下处理已删除文件继续占用磁盘空间的问题)