PostgreSQL 高级认证考试         PostgreSQL 中级认证考试(DBA 方向)         PostgreSQL 初级认证考试         EULER(欧拉)操作系统,見证RHCE的代表性!         19cOCP 9月周末班 正在授课 欢迎试听         RHCE9 9月周末班 正在授课 欢迎试学         PGCE 认证专家,周末班报名中,欢迎垂询         数据库运维工程师招聘         RHCE认证培训钜惠学习         OCP认证培训组团活动特惠中!!!         

linux系统删除文件后,但空间未释放这样处理

更新时间: 2021-03-29 16:50

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

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


既然有了解决问题的思路,那么接下来看看是否有进程一直在向被删除的文件中写数据,这里需要用到Linux下的lsof命令,通过这个命令可以获取一个仍然被应用程序占用的已删除文件列表,命令执行如下:

[root@localhost ~]# lsof | grep delete

从输出结果中可以查看到被删除的文件被哪一项进程锁定,而进程还很可能一直向这个文件写入数据。从结果的第7列可查看到文件的大小,最后一列的“deleted”状态说明这个日志文件已经被删除,但由于进程还在一直向此文件写入数据,因此空间并未释放。

到这里问题就能排查清楚了,解决这一类问题的方法有很多种,最简单的方法是kill掉或重启那项进程,当然也可以重启操作系统,不过这些并不是最好的方法,因为有些进程很可能在使用中,不能进行重启操作。对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,具体可以通过如下命令完成:

[root@localhost ~]# echo " " >文件名  这算是一个取巧的操作,直接把文件内容置空,服务也能正常使用,文件大小也可以控制下来了,并释放多余的磁盘空间。

开班信息MORE>>

课程名称 开课时间 上课类型 状态
OCP培训 12月 周末班 授课中...
RHCE培训 12月 周末班 授课中...
OCP培训 2025年1月 精英班 报名中...
PGCE 专家 12月 周末班 报名中...
OCM培训 12月 周末班 报名中...
RHCE培训 常年 周末班 报名中...
MySQL培训 常年 周末班 报名中...
<<