释放磁盘空间:解决文件删除但空间未释放的困扰

本文涉及的产品
性能测试 PTS,5000VUM额度
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: 在管理Linux系统的日常中,最令人头疼的时刻之一就是发现尽管已删除了巨大的文件,但是磁盘空间的占用率仍然没有任何下降。这种情况不仅让我怀疑自己的操作是否正确,同时也给操作系统的运行带来了隐患。究竟问题出在哪,又该如何解决?本次记录,将演示释放磁盘空间:解决文件删除但空间未释放的困扰。

磁盘.jpg

释放磁盘空间:解决文件删除但空间未释放的困扰


引言:当看到磁盘空间的红线警告

在管理Linux系统的日常中,最令人头疼的时刻之一就是发现尽管已删除了巨大的文件,但是磁盘空间的占用率仍然没有任何下降。这种情况不仅让我怀疑自己的操作是否正确,同时也给操作系统的运行带来了隐患

究竟问题出在哪,又该如何解决?本次记录,将演示释放磁盘空间:解决文件删除但空间未释放的困扰


问题描述:庞大的日志文件与不降的空间占用率

例如,根据下图显示,根目录的空间占用率达到了96%。

经查,系统中存在一个约42G大小的文件access_log,这是由apache产生的访问日志文件。从日志的大小来看,这个日志文件似乎已经很久没有被清理了。

通过执行以下命令,先行删除access_log文件。

rm /tmp/access_log

然后,执行以下命令查看文件系统的使用率。

df -h

即使删除了该文件,使用df查看的文件系统使用率仍然为96%。


原因分析:删除不等于立即释放

在Linux系统中,仅仅删除文件并不意味着磁盘空间会立即得到释放。通常,只有当文件不再被任何进程使用时,空间才会真正被释放。

文件在文件系统中的存储分为两部分:

  • 指针部分:位于文件系统的元数据中,当数据被删除后,相应的指针会从元数据中移除。
  • 数据部分:存储在磁盘上。

当数据对应的指针从元数据中移除后,文件的数据部分占用的空间就可以被覆盖并写入新的内容。因此,如果删除了access_log文件后,空间仍未释放,可能是因为httpd进程还在持续向此文件写入内容,导致文件被锁定,相应的指针并未从元数据中移除。由于指针未被删除,系统内核默认文件未被删除,因此在查询文件系统使用率时,空间显示为未释放。


解决步骤:找到并关闭消耗空间的真凶

使用lsof命令查看是否有进程持续向access_log文件写入数据。

lsof -n | grep delete

如返回的信息所示,/tmp/access_log文件被httpd进程锁定,而httpd进程还在持续向此文件写入日志数据。最后一列的“deleted”状态说明这个日志文件已被删除,但由于进程还在向此文件写入数据,因此空间未释放。

可以选择关闭或重启httpd进程,或者重启操作系统。这里我推荐的是清空access_log

执行以下命令清空access_log。

echo ""> /access_log

通过这种方式,不仅可以立即释放磁盘空间,还能确保进程继续向文件写入日志。再次执行df -h查看,根分区的空间已得到释放。


最后:预防问题建议

通过上述操作,解决了当前的空间不释放问题,还总结到如何避免将来类似的情况。

后续要定期检查日志文件的大小和访问情况,以及设置合理的日志转储策略,是保证系统稳定的关键。此外,理解文件系统的工作方式也有助于更有效地管理系统资源。



最后~欢迎关注我! @Linux学习的那些事儿

我的个人资源整理,满满都是干货: 无任何套路,有需要可以访问领取

200T免费资源专区,持续发布中...

如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
存储 缓存 固态存储
怎么清理磁盘空间
随着我们频繁使用电脑进行工作、学习和娱乐,积累的文件和数据往往会占据大量的硬盘空间。这不仅会导致磁盘空间逐渐减少,还会减慢电脑的运行速度,甚至还会影响工作效率。幸运的是,通过一些简单的步骤,就可以有效地清理磁盘空间并提升电脑的性能。本文将为你提供几个简单实用的方法,帮你清理磁盘空间。
怎么清理磁盘空间
|
7月前
|
存储 缓存 Windows
释放C盘空间:WinSXS文件夹真实性大小判断及释放占用空间
WinSXS文件夹存储了不同版本的系统组件和动态链接库(DLL),包括各个Windows更新、Service Pack和功能更新安装后保留的旧版文件。即使新版本已经安装并投入使用,旧版本文件仍被保存以确保与依赖旧版本的应用程序兼容。
270 0
释放C盘空间:WinSXS文件夹真实性大小判断及释放占用空间
|
存储 Unix 应用服务中间件
服务器删除文件后磁盘空间没有立刻释放问题
服务器删除文件后磁盘空间没有立刻释放问题 服务器删除文件后磁盘空间没有立刻释放问题🔊业务场景📖一、现象描述🖥️二、原因分析🔖 三、解决办法📌四、删除原理🧣五、最后的话
293 0
|
SQL 安全 关系型数据库
正确、安全的手动删除历史binlog,尽情释放磁盘空间。
正确、安全的手动删除历史binlog,尽情释放磁盘空间。
1343 0
|
存储 监控 应用服务中间件
为什么文件删除了但磁盘空间没有释放?
为什么文件删除了但磁盘空间没有释放?
C盘不够用了怎么办,看我4年未重做系统如何清理出25G的temp磁盘空间?
C盘不够用了怎么办,看我4年未重做系统如何清理出25G的temp磁盘空间?
176 0
C盘不够用了怎么办,看我4年未重做系统如何清理出25G的temp磁盘空间?
|
算法 Linux Windows
如何找到系统里的重复文件,快速释放磁盘空间?
不管是 Windows 电脑还是 Linux 电脑,在使用的过程中,或多或少都会留下很多重复的文件。这些文件不仅会占用我们的磁盘,还会拖累我们的系统,所以,很有必要干掉这些重复的文件。
371 0
如何找到系统里的重复文件,快速释放磁盘空间?
C++函数中,两个自动释放内存的动态内存申请类
C++函数中,两个自动释放内存的动态内存申请类最近做一个事情,实现一个流程交互,其中主交互流程函数中,涉及较多的内存申请, 而健康的函数,都是在函数退出前将手动申请不再需要的内存释放掉, 使用很多方法,都避免不了较多的出错分支时,一堆的if free/delete,代码长而且不好管理 因此,利用C...
1269 0