• 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
    

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

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

     

  • 相关阅读:
    Service Name Port Number Transport Protocol tcp udp 端口号16bit
    linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
    soft deletion Google SRE 保障数据完整性的手段
    Taylor series
    Taylor's theorem
    Moving average
    REQUEST
    Unix file types
    mysqld.sock
    Tunneling protocol
  • 原文地址:https://www.cnblogs.com/Leo-Cjh/p/13601668.html
Copyright © 2020-2023  润新知