上班后发现某个日志文件cmq.log超过70G,想起前两天用来抓包后忘了关闭。
于是直接执行了删除操作, rm cmq.log
文件删除成功,但磁盘空间未恢复,/home/目录原本只有63G,现在还有145G。
1、通过lsof 命令查看,已经删除但是未被关闭的文件lsof |grep deleted
发现了几个在两周前打开的日志文件,都是由某个常驻服务打开的。
于是,重启该服务。在用 lsof命令查看,没有了。
此时,/home 释放了9个G,还剩136G。
前面删除的70G 仍然未恢复。
2、想到是tcmpdump抓包产生的日志,通过ps查看进程:
抓包命令是 tcpdump -i any -Xnnpls0 tcp and dst port 8000
kill tcpdump进程,再查看磁盘占用
空间已释放。
总结:
1、文件直接使用rm命令删除磁盘未清空,因为存在如下的情况:
- 删除后仍然有进程在使用(打开后一直未退出)
- 或:有进程一直在往文件写入数据:
- 文件并未真正的删除,可以简单理解为文件指针(引用)还存在,OS判定文件未被删除,不会回收空间
上述两种情况,分别可以用lsof结合ps 重启/kill进程处理
2、大文件建议先使用 echo " " > xx.log
或者 truncate
减小文件大小,查看实际的磁盘占用清空,然后再执行删除。
3、针对log文件大小/磁盘占用清空 增加监控,及时告警处理
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。