Linux系统不停的报磁盘已满应该如何处理

电子说

1.3w人已加入

描述

  各位小伙伴,以下是我的一些处理方法,与大家共享。

  今天上传了一个13kb的文件,提示磁盘已满,不能上传。df -h 查了一下,如下图:

  

  磁盘慢了

  由于是开发环境,堆满了大量的日志没删,10g了,于是我删除了一些很久的日志,8g。奇怪的事情发生了,命令查看磁盘,依然是100%。linux还是跟windows区别挺大的么,windows我们删除了文件,马上就有磁盘释放了。想到的就是删除的文件并不能释放出磁盘(当时只是猜测),于是lsof | grep deleted 查了一下。

  果断地把这些进程都kill掉了,哎呦喂,奇迹发生了,df -h 查看:

  已经从100%降到了13%。问题解决了,于是找度娘查了下linux删除的机制,大致如下:

  一个文件在文件系统中的存放分为两个部分:数据部分和指针部分,指针位于文件系统的meta-data中,数据被删除后(例如我们的日志文件),这个指针就从meta-data中清除了,而数据部分存储在磁盘中,数据对应的指针从meta-data中清除后,文件数据部分占用的空间就可以被覆盖并写入新的内容,之所以出现删除log文件后,空间还没释放,就是因为httpd进程还在一直向这个文件写入内容,导致虽然删除了log文件,但文件对应的指针部分由于进程锁定,并未从meta-data中清除,而由于指针并未被删除,那么系统内核就认为文件并未被删除,因此通过df命令查询空间并未释放也就不足为奇了。一般说来不会出现删除文件后空间不释放的情况,但是也存在例外,比如文件被进程锁定,或者有进程一直在向这个文件写数据等等,要理解这个问题,就需要知道Linux下文件的存储机制和存储结构。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分