Linux删除文件之后磁盘空间没有被释放

Linux删除文件之后磁盘空间没有被释放,第1张

原因是因为已经删除文件仍然被某个进程占用,所以导致磁盘空间得不到释放,必须要kill进程之后,空间才会被释放

注意:删除正在写的文件一般用 cat /dev/null >file,而不是直接rm(直接rm会造成文件删除空间不释放的问题)

如果此时磁盘空间已被占满,无法安装

一般来说不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等,要理解这个问题,就需要知道Linux下文件的存储机制和存储结构。

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,在将数据删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中。在将数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以在出现删除access_log文件后,空间还没释放,就是因为httpd进程还在一直向这个文件写入内容,导致虽然删除了access_log文件,但是由于进程锁定,文件对应的指针部分并未从meta-data中清除,而由于指针并未删除,系统内核就认为文件并未删除,因此通过df命令查询空间并未释放也就不足为奇了。

通过这个命令可以获取一个仍然被应用程序占用的已删除文件列表 ,命令执行如下:

[root@localhost ~]# lsof | grep delete

最好的方法是在线清空这个文件,具体可以通过如下命令完成:

[root@localhost ~]# echo " " >/tmp/acess.log


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8730334.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-20
下一篇2023-04-20

发表评论

登录后才能评论

评论列表(0条)

    保存