Linux 下删除了文件,空间为何不释放?
你是否碰见过 Linux 环境下,文件已经删除,但是空间未被释放的情况?这篇小文就会介绍一下,这种问题的一个场景,以及相应的解决方案。
操作方法
- 01
我们的一台应用服务器,操作系统是 Red Hat Linux,监控报警,/opt/applog文件系统使用率超阈值,整体容量为50G,但发现实际文件容量20G,剩下的30G空间是什么?
- 02
我们知道,Linux 环境下,任何事物,都是以文件的形式存在,系统在后台,为每个应用程序,分配了一个文件描述符,他为应用程序和操作系统之间的交互操作提供了通用的接口,既然是文件,就会占用空间,此时可以使用 lsof 指令,他可以列出,当前系统正在打开的文件。 >lsof COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ... filebeat 111442 app 1r REG 253,3 209715229 1040407 /opt/applog/E.20171016.info.012.log filebeat 111442 app 2r REG 253,3 209715254 385080 /opt/applog/E.20171015.info.001.log (deleted) ...
- 03
表头各字段,含义如下: COMMAND:进程的名称PID:进程标识符USER:进程所有者FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等TYPE:文件类型,如DIR、REG等DEVICE:指定磁盘的名称SIZE:文件的大小NODE:索引节点(文件在磁盘上的标识)NAME:打开文件的确切名称
- 04
可以看出,有一些行中,NAME标识了(deleted) /opt/applog/E.20171015.info.001.log (deleted) 他的含义,就是这文件已被删除,但打开文件的句柄,并未关闭,再看 COMMAND 的名称是 filebeat,USER 进程所有者是 app,这是我们的日志采集进程,app 用户开启了 filebeat 进程。
- 05
插播一下日志采集平台 传统的开源日志平台,即 ELK,由 ElasticSearch、Logstash 和 Kiabana 三个开源工具组成,其中: Elasticsearch 是个开源分布式搜索引擎,分布式,更多内容请参考《Liпux就该这么学》!零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。 Logstash 是一个开源的采集工具,他可以对日志进行收集、过滤,并将其存储供以后使用。 Kibana 是一个开源的图形 Web 工具,可以为 Logstash 和 ElasticSearch 提供日志分析友好的 Web 界面,可以汇总、分析和搜索重要数据日志。 常见的部署图,如下所示