运维监控系统发来通知,报告一台服务器空间满了,登陆服务器查看,根分区确实满了,这里先说一下服务器的一些删除策略,由于 linux 没有回收站功能,所以线上服务器上所有要删除的文件都会先移到系统 /tmp 目录下,然后定期清除 /tmp 目录下的数据。这个策略本身没有什么问题,但是通过检查发现这台服务器的系统分区中并没有单独划分 /tmp 分区,这样 /tmp 下的数据其实占用根分区的空间,既然找到了问题,那么删除 /tmp 目录下一些占用空间较大的数据文件即可。
# du -sh /tmp/* | sort -nr |head -3
通过命令发现在 /tmp 目录下有个 66G 大小的文件 access_log,这个文件应该是 apache 产生的访问日志文件,从日志大小来看,应该是很久没有清理的 apache 日志文件了,基本判定是这个文件导致的根空间爆满,在确认此文件可以删除后,执行如下删除命令,
# rm /tmp/access_Iog
# df -h
从输出来看,根分区空间仍然没有释放,这是怎么回事?
一般来说不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件进程锁定,或者有进程一直在向这个文件写数据,要理解这个问题,就需要知道 linux 下文件的存储机制和存储结构。
一个文件在文件系统中存放分为两个部分:数据部分和指针部分&