linux rm 不释放_Linux 通过rm命令删除文件后磁盘空间没有释放问题

早上收到了服务器磁盘使用率超过阈值的报警,登陆到服务器查看。

1. 查看整体磁盘使用率

确认磁盘的使用率确实超过阈值,使用如下命令:

df -H

发现/export目录下磁盘的使用率是73%,超过了设定的报警阈值70%。

2. 进入export目录,定位具体的大文件

cd /export

du -sh *

发现Logs目录下最近有很多大的日志文件,比如,平常一天是几百兆的文件,现在一天已经4-5个G,肯定不是正常的现象。

查看了一下日志文件中的打印的内容,发现很多是无效日志,而且之前的文件是可以删除的,在这个基础上,我开始了文件删除,主要是一些大的历史日志文件。

3. 删除大的历史文件

执行如下命令:

rm -f cataout.out.xxx

删除完毕之后,我以为磁盘空间就好了,打脸的是,瞬间又收到了报警,起初以为是误报,执行第一步的 df -H命令查看磁盘空间,发现磁盘空间并没有变化,依旧是73%

经过网上查找,知道rm只是将文件链接解除,如果此时有进程打开文件,系统是不会回收文件。说白就是,你删除的文件被放入了“回收站”,但是你看不这个“回收站”,但文件还占用着磁盘空间。此时,在删除文件的目录下,执行ls命令已经看不到被删除的文件了,用du -sh命令也发现磁盘容量很少,但是执行df -h会发现磁盘使用率并没有变化。

4. 解决思路

一般情况下,有下面两种方案:

重启电脑,系统就会回收磁盘空间。

kill掉打开文件的进程。

之后如果想永久删除文件,应该这样执行rm命令,/bin/rm -f catalina.out.xxx,其效果等同于windows下shift+delete 永久删除

作为线上生产环境的服务器,重启肯定不行。所以第一条直接pass,线上服务器也千万别随随便便重启,影响很大。

第三条,是之后删除文件可以用到的,对于目前的情况不适用,所以pass。

所以只剩下第2条方案可以试一试了,在网上搜索了一下,发现lsof这个命令可以查看文件信息。通过命令lsof|grep deleted可以看到之前的日志文件都已经deleted了。

然后,有两种操作,

a. 重启进程。restart xxx

b. echo " " > catalina.out.xxx

其中,第二种方法,不但可以让磁盘空间可以马上释放,也可保障进程继续向文件写入日志,这种方法经常用于在线清理Apache、Tomcat、Nginx等Web服务产生的日志文件。

再df -h就会发现磁盘使用率已经降下来了。

当然,线上的服务涉及到docker,最后的处理有docker运维人员的参与。

你可能感兴趣的:(linux,rm,不释放)