原文中文,约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过滤出被删除但仍被占用的文件列表。
🏷️