重庆思庄“清明节”放假通知         19cOCP 4月周末班,正在授课 欢迎试听         RHCE8 4月周末班 正在授课 欢迎试听         红帽RHCE8 4月周末班 正在授课,欢迎试听         OCM周末班 正在报名 ,欢迎垂询!         MySQL认证周末班 正在招生 欢迎垂询!         

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>>

课程名称 开课时间 上课类型 状态
RHCE培训 4月 周末班 授课中...
RHCE培训 4月 周末班 报名中...
OCP培训 4月 周末班 授课中...
OCP培训 4月 周末班 报名中...
OCM培训 4月 周末班 报名中...
MySQL培训 常年 周末班 报名中...
RAC实用技术 常年 周末、脱产 报名中...
<<