linux下删除文件后空间未释放怎么办?

发布时间:2019-09-19编辑:脚本学堂
本文介绍了linux下删除文件后,没有释放空间的解决方法,有需要的朋友参考下。

linux系统中,文件被删除后,空间没有被释放,怎么办?

Linux删除文件rm命令的用法中,我们介绍了rm命令的使用方法,在linux系统中删除文件多是使用该命令来完成的。

在linux中使用Linux rm命令删除文件夹时,有时会遇到数据巨大、文件容量也很大的文件与文件夹,此时会考虑如何使用Linux彻底删除文件的命令快速、批量的删除文件。

但问题总会不期而至,删除文件后,空间没有释放 怎么办呢?

原因分析:
在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。

解决方法:
首先,获得一个已经被删除但是仍然被应用程序占用的文件列表:
 

复制代码 代码示例:
$ /usr/sbin/lsof|grep deleted
ora    25575 data   33u      REG  65,65  4294983680   31014933 /oradata/DATAPRE/UNDOTBS009.dbf (deleted)

从lsof的输出中,可以发现pid为25575的进程持有着以文件描述号(fd)为33打开的文件/oradata/DATAPRE/UNDOTBS009.dbf。

在找到了这个文件之后可以通过结束进程的方式来释放被占用的空间。

通过截断proc文件系统中的文件可以强制要求系统回收分配给正在使用的的文件。
这是一项高级技术,仅到管理员确定不会对运行中的进程造成影响时使用。
应用程序对这种方式支持的并不好,当一个正在使用的文件被截断可能会引发不可预知的问题:
 

复制代码 代码示例:
$ echo > /proc/pid/fd/fd_number

例如,根据之前lsof的输出:
 

复制代码 代码示例:
$ file /proc/25575/fd/33
/proc/25575/fd/33: broken symbolic link to `/oradata/DATAPRE/UNDOTBS009.dbf (deleted)’
$ echo > /proc/25575/fd/33