桂哥网络和你分享了Linux是如何处理被删除的文件的,但是空间没有被释放。相信大部分人都不太了解,分享这篇文章,供大家参考。希望你看完这篇文章后收获很大。我们一起来看看。
问题产生背景
某业务系统的服务器监控系统发出了磁盘空间利用率达到90%的预警通知。然后,它降落在服务器,搜索相对较大的日志文件,全部被删除(坑埋在这里),释放了一些磁盘空间。当时也是疏忽,没有确认找到并删除的文件大小的空间是不是已经全部释放。几天后,服务器再次受到警告。我想知道木头怎么长得这么快。经过调查,发现上一次操作删除文件后,有很大的文件空间没有释放。
问题还原及解决办法
找到占用空间大的数据文件
#检查磁盘空间使用情况
$df-h
#首先查询/tmp目录中空间大的文件
$du-sh/tmp/*|sort-nr|head-3
#在查询/主目录中占据很大空间的文件
$du-sh/home/*|sort-nr|head-3
#找到文件后,删除。删除后,用df-h检查是不是已经发布。解释为啥在查找文件时,首先在/tmp/*目录中找到文件
Linux系统删除策略:Linux没有回收站功能,所以要删除的文件会先移动到system /tmp目录下,然后定期清除/tmp目录下的数据。
有许多服务器在安装系统时没有单独分区/tmp,因此/tmp目录中的数据可能会占用很大一部分空间,因此可以首先清除/tmp目录中的文件来释放空间。
这一次,删除文件并不释放空间,而是在/home目录空间中删除dubbo服务日志文件时发生。
删除文件不释放空间原因
通常情况下,删除文件后不会释放空间,但当文件被进程锁定或进程不断向文件写入数据时,仍会出现这种情况。了解Linux下文件存储机制和结构的原理,有助于我们理解这个问题。
文件存在于Linux系统中,分为指针部分和数据部分两部分。
指针部分:存在于文件系统的元数据中。在我们执行rm命令删除数据后,这个指针从元数据中清除。
数据部分:数据直接存储在磁盘上。当指针从元数据中清除时,数据部分所占据的空间可以被覆盖,并且可以写入新的内容。
之所以删除dubbo日志文件后不释放空间,是因为dubbo进程一直在往这个文件里写数据,删除文件时没有从元数据里去掉指针,所以日志文件还是占用空间。
如何找到此类文件
您可以通过lsof命令获得已删除但仍被程序占用的文件列表:
如何释放此类空间
解决这类问题,释放空间的方法有很多:重启被占用的进程,重启操作系统,传递命令。前两种方法对于非生产环境是最方便的,但是对于生产环境,尽量使用命令方法,其实命令也很简单:
Echo''/home/dubbo/log/xxx.log这样会释放占用的磁盘空间,不会影响进程继续执行。
“Linux如何处理删除的文件而不释放空间”这篇文章的内容就这么多了。感谢阅读!相信大家都有一定的了解,希望分享的内容对大家有所帮助。如果你想学习更多的知识,请关注桂哥网络!