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

简介: 在管理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免费资源专区,持续发布中...

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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
SQL 关系型数据库 MySQL
Docker 部署离线版 Nginx 镜像容器,Tomcat 镜像容器,Mariadb 镜像容器
Docker 部署离线版 Nginx 镜像容器,Tomcat 镜像容器,Mariadb 镜像容器
3739 0
Docker 部署离线版 Nginx 镜像容器,Tomcat 镜像容器,Mariadb 镜像容器
|
12月前
|
存储 Linux
Linux环境下删除大文件后磁盘空间未释放问题诊断流程。
以上诊断流程涉及Linux底层机制与高级管理技能结合之处,并需要管理员根据实际环境灵活调整诊断策略与解决方案。
820 8
|
存储 缓存 人工智能
重构高端存储新范式-RDMA+NVMe-oF
`sendfile` 是 Linux 系统中用于高效传输数据的系统调用,支持文件到网络套接字的零拷贝传输,减少 CPU 和内存的开销。它通过建立两个文件描述符之间的传输通道,避免了传统 `read/write` 或 `mmap/write` 方式中的多次数据拷贝和上下文切换。文章探讨了 `sendfile` 的实现原理、性能优势及其在不同存储设备(如 SSD 和 NVMe)下的应用挑战,同时分析了 DMA 技术在数据传输中的作用及限制。此外,还介绍了 NVMe 和 RDMA 等新技术对网络存储架构的影响,展示了现代高性能存储与网络的深度融合趋势。
501 0
|
编解码 UED
Qt侧边栏的动态切换:隐藏与显示技术详解
在现代用户界面设计中,侧边栏(Sidebar)是一个常见的组件,它为用户提供了导航和工具面板的功能。在某些应用场景下,我们可能需要动态地隐藏或显示侧边栏,以优化界面布局或提供更灵活的用户体验。本文将分享如何在Qt框架下实现侧边栏的隐藏与呈现,包括技术细节和代码示例。
1529 3
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
1339 1
|
消息中间件 存储 运维
从 Kafka 2.x 到 Kafka 3.x:升级之旅
从 Kafka 2.x 到 Kafka 3.x:升级之旅
3278 2
|
算法 Linux 调度
理解CPU负载与使用率
**CPU使用率与负载简介** - **CPU使用率**:指CPU被占用的时间占总时间的比例,单核为直接比例,多核为各核心平均值。高使用率(如80%-90%)表示CPU繁忙,可能导致系统变慢;低使用率(如10%-20%)则表示系统运行流畅。 - **CPU负载**:指等待CPU处理的任务数量,通常显示1分钟、5分钟和15分钟的平均值。高负载意味着任务排队多,可能造成系统卡顿;正常负载下系统运行顺畅。负载反映任务量,使用率反映实际占用时间,两者可不同步。
2469 5
|
传感器 人工智能 监控
《数据流驱动:C++构建 AI 模型持续学习新范式》
本文探讨了如何利用C++开发基于数据流的人工智能模型持续学习系统,覆盖了从数据接入、预处理、模型训练与更新、评估监控到输出应用的全流程。文章强调了C++在处理实时数据流、确保系统实时性和效率方面的独特优势,并讨论了其在物联网、金融、工业自动化等领域的应用前景,以及未来技术发展趋势。
745 9
|
缓存 关系型数据库 MySQL
服务器磁盘爆满?别慌,教你轻松清理!
服务器磁盘空间告急?别慌!本文将教你如何快速识别并清理占用大量磁盘空间的文件和目录,优化日志文件,释放磁盘空间,恢复系统正常运行。适合服务器管理员和网站运营者。
2343 0
 服务器磁盘爆满?别慌,教你轻松清理!
|
存储 监控 安全