美文网首页LINUX
Linux 通过rm命令删除文件后磁盘空间没有释放问题

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

作者: 秋慕云 | 来源:发表于2018-11-29 14:44 被阅读0次

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

    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. 解决思路

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

    1. 重启电脑,系统就会回收磁盘空间。
    2. kill掉打开文件的进程。
    3. 之后如果想永久删除文件,应该这样执行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命令删除文件后磁盘空间没有释放问题

        本文链接:https://www.haomeiwen.com/subject/ptbxcqtx.html