zoukankan      html  css  js  c++  java
  • du 与 df 不一致,删除文件后,空间未释放

    因空间不足,在自己的虚拟机上直接删了库的目录,释放一些空间,反正是自己玩的东西,不用跑路。(这不是重点)

    查看存储,df -h, 很是明显的/home 的存储并未释放

    Linux没有回收站功能,我们的线上服务器所有要删除的文件都会首先移动到系统/tmp目录下,然后定期清除/tmp目录下的数据。 查看了一下,很明显并不是因为这个机制。(况且根目录根本的存储来看,也可以排除是这个原因)

    一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等等。Linux下文件的存储机制和存储结构:一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除文件后,空间还没释放,就是因为有进程还在一直向这个文件写入内容,导致虽然删除了文件,但文件对应的指针部分由于进程锁定,并未从meta-data中清除,而由于指针并未被删除,那么系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放也就不足为奇了。

    通过lsof|grep deleted命令获取到已经被删除但是仍然被应用程序占用的文件列表,(呕吼,够多)果然直接删除目录会有些问题。

     对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件。通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志。(但此种情况是我们已经删除,并且我不想要它了)所以使用第二种方式,直接杀死。

    lsof|grep delete|awk '{print "kill -9 "$2}'|sh
    

     查看存储,已经恢复正常。

    思考:删除后,发现有进程对日志操作,怎么操作?

     

  • 相关阅读:
    oracle表分区管理partition
    winfrom 界面编辑之疑难杂症
    resx文件引用
    mysql 数据库名含“-”
    KNN算法之图像处理二
    KNN算法之图像处理一
    DCOM初步窥探二
    dcom初步窥探一
    .net组件和com组件&托管代码和非托管代码
    c# apache服务器请求得到数据(初级)
  • 原文地址:https://www.cnblogs.com/Leo-Cjh/p/13601668.html
Copyright © 2011-2022 走看看