Linux:删除文件后不释放磁盘空间解决方法

文件已经删除,但空间未释放怎么办?
更新于: 2022-03-11 01:46:45

查找占用文件的进程

lsof | grep deleted

# 杀掉进程,或者重启
kill -9 <processId>

# 再次查看
df -h

根因分析

通常不会出现删除文件后空间不释放的情况,特殊情况是文件进程锁定,或有进程一直在向这个文件写数据。

为了分析根因,首先需要了解Linux文件的存储机制和存储结构。

一个文件在文件系统中存放分为两个部分:

指针部分:指针位于文件系统的 meta-data 中,在将数据删除后,这个指针就从meta-data中清除了。
数据部分:而数据部分存储在磁盘中。
将数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容。出现删除 access_log 文件后,空间还没有释放的原因,是因为httpd进程还在一直向这个文件写入内容,导致删除了access_log文件后,进程锁定,文件对应的指针部分并未从meta-data中清除,由于指针并未删除,系统内核就默认文件并未被删除,因此查询文件系统使用率时,显示空间并未释放。

参考

https://support.huaweicloud.com/trouble-ecs/ecs_trouble_0331.html

https://blog.51cto.com/u_13567403/3046499