删除文件后 df 查看磁盘空间并没有释放

删除文件后 df 查看磁盘空间并没有释放

💡 原文中文,约1000字,阅读约需3分钟。
📝

内容提要

在Linux中,删除文件后磁盘空间未释放可能是因为进程仍在使用该文件。可以使用`lsof`命令查找被删除但仍被占用的文件,解决方法是终止相关进程或重启服务,以释放被锁定的空间。

🔎

延伸解读

为何删除文件后空间不释放

Linux 中文件由数据部分和指针部分组成,指针位于文件系统元数据中。删除文件时,指针从元数据清除,但数据部分仍占用磁盘空间。若有进程仍持有该文件的句柄,内核会认为文件未被删除,因此 df 显示的空间不会释放。这解释了删除大文件后磁盘空间未回收的现象。

如何定位被占用的已删除文件

使用 lsof | grep deleted 命令可以列出所有已删除但仍被进程占用的文件。在文章案例中,通过该命令发现大量刚删除的文件仍被进程占用,这些进程可能持续向已删除文件写入数据,导致空间无法释放。定位这些进程是解决问题的关键步骤。

释放空间的可行操作

找到占用已删除文件的进程后,可以终止相关进程或重启服务,使文件句柄被释放,内核随即清除元数据中的指针,磁盘空间得以回收。文章案例中,kill 掉进程后问题解决。操作前需评估进程重要性,避免影响业务。

❓

Q&A

为什么在Linux中删除文件后磁盘空间没有释放?

因为进程仍在使用被删除的文件,导致空间未被释放。

如何查找被删除但仍被占用的文件?

可以使用lsof命令来查找被删除但仍被占用的文件。

如何解决删除文件后磁盘空间未释放的问题?

可以通过终止相关进程或重启服务来释放被锁定的空间。

Linux中文件的存储机制是怎样的?

文件在文件系统中分为数据部分和指针部分,删除时指针从meta-data中清除,但数据部分仍然存在。

为什么删除access_log文件后空间仍未释放?

因为httpd进程仍在向该文件写入内容,导致文件指针未从meta-data中清除。

使用lsof命令的基本方法是什么?

执行lsof命令后,可以通过grep过滤出被删除但仍被占用的文件列表。

🏷️

标签

➡️

继续阅读