情况背景:
可能大多数菜鸟都碰到过,某天,看到c盘报案删除文件后空间没释放,赶紧掏出xshell连上服务器,一顿操作猛如虎的查看到原先是某个日志文件几个G甚至几十G,日志不重要,赶紧rm -f删除了,然后关上xshell就继续玩自己的。过一会儿发觉报案又来了,还是这台还是同样问题,而且c盘可用空间仍然缩小,赶紧去百度或则讨教老师傅。
情况说明:
其实这个问题第一次遇见的时侯我也是懵逼的,简单讲解下这个问题原理。
一般说来不会出现删掉文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程仍然在向这个文件写数据等等,要理解这个问题,就须要晓得Linux下文件的储存机制和储存结构。
一个文件在文件系统中的储存分为两个部份:数据部份和表针部份,指针坐落文件系统的meta-data中,数据被删除后,这个表针就从meta-data中去除了,而数据部份储存在c盘中,数据对应的表针从meta-data中去除后,文件数据部份占用的空间就可以被覆盖并写入新的内容删除文件后空间没释放,之所以出现删掉log文件后,空间还没释放,就是由于程序进程还在仍然向这个文件写入内容,导致即使删掉了log文件,但文件对应的表针部份因为进程锁定,并未从meta-data中去除,而因为表针并未被删除,那么系统内核就觉得文件并未被删除,因此通过df命令查询空间并未释放也就不足为奇了。
问题解决:
说辣这么多,那么如何解决出现这个事情尼,其实简单
lsof |grep delete
查找当前删掉状态还在占用空间的文件,一般7列是大小,9列是文件,找到你删掉的大文件
然后执行 >9列上面的文件路径和文件名
再次查看,发现空间释放了
日常注意:
其实出现这个问题大多数是可能写脚本或则日常处理日志最常见的错事,尽量在处理日志这种时侯防止rm 来暴力删掉正在运行的程序日志