Linux 通过rm命令删除文件后磁盘空间没有释放问题

早上收到了服务器磁盘使用率超过阈值的报警,登陆到服务器查看。

1. 查看整体磁盘使用率

确认磁盘的使用率确实超过阈值,使用如下命令:
df -H

发现/export目录下磁盘的使用率是73%,超过了设定的报警阈值70%。

2. 进入export目录,定位具体的大文件

cd /export
du -sh *

发现Logs目录下最近有很多大的日志文件,比如,平常一天是几百兆的文件,现在一天已经4-5个G,肯定不是正常的现象。

查看了一下日志文件中的打印的内容,发现很多是无效日志,而且之前的文件是可以删除的,在这个基础上,我开始了文件删除,主要是一些大的历史日志文件。

3. 删除大的历史文件

执行如下命令:
rm -f cataout.out.xxx

删除完毕之后,我以为磁盘空间就好了,打脸的是,瞬间又收到了报警,起初以为是误报,执行第一步的 df -H命令查看磁盘空间,发现磁盘空间并没有变化,依旧是73%

经过网上查找,知道rm只是将文件链接解除,如果此时有进程打开文件,系统是不会回收文件。说白就是,你删除的文件被放入了“回收站”,但是你看不这个“回收站”,但文件还占用着磁盘空间。此时,在删除文件的目录下,执行ls命令已经看不到被删除的文件了,用du -sh命令也发现磁盘容量很少,但是执行df -h会发现磁盘使用率并没有变化。

4. 解决思路

一般情况下,有下面两种方案:

  1. 重启电脑,系统就会回收磁盘空间。
  2. kill掉打开文件的进程。
  3. 之后如果想永久删除文件,应该这样执行rm命令,/bin/rm -f catalina.out.xxx,其效果等同于windows下shift+delete 永久删除

作为线上生产环境的服务器,重启肯定不行。所以第一条直接pass,线上服务器也千万别随随便便重启,影响很大。

第三条,是之后删除文件可以用到的,对于目前的情况不适用,所以pass。

所以只剩下第2条方案可以试一试了,在网上搜索了一下,发现lsof这个命令可以查看文件信息。通过命令lsof|grep deleted可以看到之前的日志文件都已经deleted了。

然后,有两种操作,
a. 重启进程。restart xxx
b. echo " " > catalina.out.xxx
其中,第二种方法,不但可以让磁盘空间可以马上释放,也可保障进程继续向文件写入日志,这种方法经常用于在线清理Apache、Tomcat、Nginx等Web服务产生的日志文件。

再df -h就会发现磁盘使用率已经降下来了。

当然,线上的服务涉及到docker,最后的处理有docker运维人员的参与。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 系统管理与维护命令 date date(选项)(参数) | 选项 | 说明 | | :-------- | ...
    蓓蓓的万能男友阅读 9,486评论 0 5
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,358评论 2 33
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 10,968评论 0 9
  • 昨晚和女儿又开启了聊天模式,不知不觉间自己也基本学会了倾听女儿的心声和感受她的情绪,在某些方面也发表了自己的建议,...
    早茶月光C阅读 3,523评论 6 6
  • 关于你工作的事,还是以你自己的意愿为主,我会表达看法意见,但不想左右你的选择,到底是不是要换工作,要换一个什么样的...
    俏村姑阅读 1,540评论 0 0

友情链接更多精彩内容