LINUX运维实战案例之文件已删除但空间不释放问题的分析与解决办法

作者&投稿:冶昭 (若有异议请与网页底部的电邮联系)
~

1、错误现象

运维的监控系统发来通知,报告一台服务器空间满了,登陆服务器查看,根分区确实没有空间了,如下图所示:

这里首先说明一下服务器的一些删除策略,由于Linux没有回收站功能,我们的线上服务器所有要删除的文件都会首先移动到系统/tmp目录下,然后定期清除/tmp目录下的数据。这个策略本身没有问题,但是通过检查发现这台服务器的系统分区中并没有单独划分/tmp分区,这样/tmp下的数据其实是占用了根分区的空间。既然找到了问题,那么删除/tmp目录下一些大数据即可,执行如下命令,检查/tmp下最大的三个数据文件,如下图所示:

[root@localhost~ ]# du -s /tmp/*|sort -nr|head -3

69206016 /tmp/access_log

36 /tmp/hsperfdata_root

36 /tmp/hsperfdata_mapred

通过命令输出发现在/tmp目录下有个66G大小的文件access_log,这个文件应该是apache产生的访问日志文件,从日志大小来看,应该是很久没有清理apache日志文件了,基本判定是这个文件导致的根空间爆满,在确认此文件可以删除后,执行如下删除操作:

[root@localhost ~]#  rm  /tmp/access_log

接着查看系统根分区空间是否释放,如下图所示:

从输出可以看到,根分区空间仍然没有释放,这是怎么回事?

2、解决思路

一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等等,要理解这个问题,就需要知道Linux下文件的存储机制和存储结构。

一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后,这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除access_log文件后,空间还没释放,就是因为httpd进程还在一直向这个文件写入内容,导致虽然删除了access_log文件,但文件对应的指针部分由于进程锁定,并未从meta-data中清除,而由于指针并未被删除,那么系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放也就不足为奇了。

3、问题排查

既然有了解决问题的思路,那么接下来看看是否有进程一直在向acess.log文件中写数据,这里需要用到Linux下的lsof命令,通过这个命令可以获取一个已经被删除但仍然被应用程序占用的文件列表,命令执行如下图所示:

从输出结果可以看到,/tmp/acess.log文件被进程httpd锁定,而httpd进程还一直向这个文件写入日志数据,从第七列可知,这个日志文件大小仅70G,而系统根分区总大小才100G,由此可知,这个文件就是导致系统根分区空间耗尽的罪魁祸首,在最后一列的“deleted”状态,说明这个日志文件已经被删除,但由于进程还在一直向此文件写入数据,空间并未释放。

4、解决问题

到这里问题就基本排查清楚了,解决这一类问题的方法有很多种,最简单的方法是关闭或者重启httpd进程,当然也可以重启操作系统,不过这并不是最好的方法,对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,可以通过如下命令完成:

[root@localhost ~]# echo " " /tmp/acess.log

通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志,这种方法经常用于在线清理Apache、Tomcat、Nginx等Web服务产生的日志文件。谢谢阅读,希望能帮到大家,请继续关注脚本之家,我们会努力分享更多优秀的文章。




一个新手面试 Linux 运维工作至少需要知道哪些知识
如果希望在系统管理的角度有更好的发展,需要以操作系统为平台,了解运行在其中的更广泛的知识,比如中间件、数据库、网络,甚至是常用的计算设备和存储设备等等。总的来说,系统管理工作在IT基础架构运维工作体系中起到了承上启下的作用,不可小觑。同时,一个好的系统管理员绝对不是学出来了,而是实战...

学linux能干什么
学linux能干什么如下:1、Linux运维工程师需要牢固掌握Linux基础及常见开源软件服务集群,掌握Shell,MySQL,监控。熟练掌握阿里云为首的公有云搭建集群实战(ECS\/SLB\/RDS\/NAS\/OSS\/VPC\/CDN)。此阶段是态度为先的阶段,态度加能力突破20K也不是问题,能够独挡一面做较好的执行者和问题解决者。2、Linux高级...

想从事linux运维方面,有一点基础知识,请问还还看这什么书籍,万分感...
您好很高兴回答您的问题:- Linux核心基础知识的书籍 - Linux核心命令的书籍 - 网站集群架构的书籍 - Shell编程 - 数据库基础即可 - 云计算部分主要看看docker , k8s - 还有很多比如监控,代码上线等等.

最近想学linux运维 ,老男孩和马哥哪个好?
老男孩教育以Linux起家,深耕行业十数年。该机构课程汇集了虚拟化、云计算、安全攻防、Python开发、SRE等技术,课堂效率高、内容丰富全面,由浅入深,循序渐进,帮助学员稳扎稳打,夯实基础,在有限的时间内帮助学员高效提升,成为符合企业需求的技术型人才。Linux运维课程安排:老男孩教育Linux58期课程介绍 ...

linux要学到什么地步,才能去做运维?
第十二阶段:高性能数据库Redis和Memcached课程 第十三阶段:Linux大规模集群架构构建(200台)第十四阶段:Linux Shell编程企业案例实战 第十五阶段:企业级代码发布上线方案(SVN和Git)第十六阶段企业级Kvm虚拟化与OpenStack云计算 第十七阶段公有云阿里云8大组件构建集群实战 第十八阶段:Docker技术企业应用...

linux运维工程师推荐看什么书
运维工程师推荐看书学基础,然后找师傅带啊,书呢,就推荐两本吧,一本是经典的《鸟哥的Linux私房菜》另一本是基于现在最新的Redhat7系统为环境的《Linux就该这么学》,就该这么学这本书非常实用,如果你要快速入门的话就去看这本,想多了解点东西的话就去看鸟哥,顺便说一下,《Linux就该这么学》是...

《跟老男孩学Linux运维:Web集群实战》epub下载在线阅读全文,求百度网 ...
《跟老男孩学Linux运维:Web集群实战》,该书籍由老男孩教育老师撰写出版,是一套系列书籍,除了《跟老男孩学Linux运维:Web集群实战》之外,还包括:《跟老男孩学Linux运维Shell编程实战》、《跟老男孩学Linux运维核心系统命令实战》、《跟老男孩学Linux核心基础篇(上)》、《跟老男孩学Linux运维MySQL入门与...

运维工程师需要掌握什么技能?
运维工程师需要掌握的技能:1、首先是主机、网络及操作系统基本知识。在出现问题时,懂得在各个网络位置抓包,来确认故障设备或线路,会使用Linux的tcpdump抓包或者ethreal、sniffer、Wireshark等抓包软件,会在网络设备上配置镜像,将关心的流量抓出来进行分析。2、懂开发,能实现自动化运维。比如使用Shell、...

Linux运维和程序员前景
以下是对二者的分析:Linux运维未来发展:1、现在专业的运维人员很缺乏,也就是说运维有前途。2、现在服务器端Linux的份额是最大的,所以Linux运维也是最需要的。3、Linux运维所需要的技术很多。从基本的Shell命令,到底层的网络知识,再到深入的操作系统的知识,没有一定的积累是根本无法做好一个运维工程...

linux运维就业前景怎么样?
linux运维这个行业是最被应届大学毕业生误解的行业之一。通常是没有自信学成像Java开发这样的技术的学生,退而求其次选择入行运维,好像既简单容易又能领到高薪 走向人生巅峰。岂不知鱼和熊掌不能兼得。技术含量低的行业注定容易被替代,价值不高,待遇也不可能如培训机构宣扬的那样。就算一定要学,IT培训...

叠彩区18988291800: 云计算需要学习哪些课程?
并玉小儿: 云计算系统运用了编程模型、数据管理技术、数据存储技术、虚拟化等多种技术.在学习云计算时不仅要了解以上多种技术,还要学习以下多种课程:1、云计算首先需要的是学习它的系统基础.主要包括了Linux系统管理、数据库管理、KVM管理和云计算环境的建立.2、其次需要学习Linux网络管理、数据库同步、hKVM迁移与远程管理、云计算计算与镜像管理.3、最后需要学习数据库集群、KVM虚拟机嵌入、云计算存储管理以及Docker实战和云计算数据管理,另外Linux存储管理和云计算网络管理也是不可缺少的课程.

叠彩区18988291800: Linux运维知识:从命令行如何查看Linux日志 -
并玉小儿: 1.查看日志常用命令 (1)tail: -n 是显示行号;相当于nl命令;例子如下:tail -100f test.log 实时监控100行日志 tail -n 10 test.log 查询日志尾部最后10行的日志; tail -n +10 test.log 查询10行之后的所有日志;(2)head: 跟tail是相反的,tail是看...

叠彩区18988291800: 如何配置python的sublimeREPL -
并玉小儿: 1.在控制台(CTRL+`)中复制链接;import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Pack...

叠彩区18988291800: linux运维的工作内容是什么? -
并玉小儿: 本人就是做运维的,主要有以下工作1、对Linux下各种网络服务、应用系统、监控系统等进行自动化脚本开发的工作,并根据项目对系统进行性能优化;2、负责网站项目中Linux服务器的部署与维护,解决Linux系统下版本兼容性问题;3、熟练部署和维护Linux服务器以及在linux服务器上架设各种服务;4、编写shell script脚本;5、LAMP,LNMP以及Mysql,oracle数据库维护

叠彩区18988291800: 怎么学习LINUX运维?
并玉小儿: 理解linux的文件系统,比如挂载...再学习命令.基本你就能操作linux,基本会用了...然后,就和研究win一样咯,细节的,高深的,要自己动手去操作的.一台破电脑就能跑linux...《鸟哥私房菜》不错..

叠彩区18988291800: 以下关于华为云stack和华为云的描述,正确的是哪些项(). - 上学吧
并玉小儿: 所谓运维就是运作的维护,基本有服务器软件的部署,对系统资源包括CPU,内存,流量的检测,还有就是漏洞的修补等等

叠彩区18988291800: Linux云计算学习应该学些什么? -
并玉小儿: 第1阶段零基础入门第2阶段Linux系统管理&shell编程第3阶段百万级访问量集群实战第4阶段千万级访问量核心集群实战第5阶段一切核心技术的底层支持:云计算集群第6阶段大数据运维第7阶段Python自动化和指导

叠彩区18988291800: 0基础入门Linux 运维,应该首先掌握哪些知识 -
并玉小儿: 个人经验:1、了解linux的文件系统,用户、组、对应的文件权限,有个整体的概念2、了解常用的命令,cd、mv、cp、rm、ll、ls....这样你就能自由穿梭于linux各个角落3、熟练掌握vi(vim)这个编辑器,linux系统都是文件形式存在的,vi一定要会用

叠彩区18988291800: 教你怎么恢复被删除的文件 -
并玉小儿: 嘿嘿!是不是有有的朋友经常误删文件而常常又自认倒霉呢?嘿嘿今天我就让大家即使是误删也不怕嘿嘿,废话少说.看我操作. 第一:使用方法这个就是我们今天的主角可谓是三剑客1.Digital MediaRescue Pro 能够将你的数码设备上的视频数...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网