Linux弹性云服务器删除大文件后,为什么空间没有释放

问题: Linux弹性云服务器根目录空间占用率过高

发现Apache生成的access_log文件在根目录下占用了约42GB的空间。然后,您执行以下操作尝试释放空间:

  1. 删除access_logrm /tmp/access_log
  2. 检查文件系统磁盘空间使用情况。df-h

但是,输出告诉您使用率仍为 96%。

可能的原因

您删除的文件被另一个正在运行的进程锁定,该进程不断向该文件写入数据。

以下是有关 Linux 中文件存储的基础知识,可以帮助您更好地理解根本原因。

在 Linux 文件系统中,文件分为两部分:

  • 文件指针:该指针存储在文件系统元数据中。当文件被删除时,文件指针将从元数据中删除。
  • 文件数据:文件数据存储在磁盘上。

一般情况下,从元数据中删除文件指针后,文件数据占用的磁盘空间就会被标记为可用。但如果该文件被删除时仍在被另一个正在运行的进程使用,则该文件指针将无法从元数据中删除,系统将判定该文件尚未被删除,并且不会回收该文件所占用的空间。文件数据。

解决方案

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

执行lsof命令查看是否有进程持续向access_log,system.log,cron.log文件写入数据。

lsof -n |grep delete
  1. 如命令输出所示,httpd进程仍在使用access_log文件,该进程不断将日志数据写入该文件。括号中的值deleted表示该日志文件已被删除。但是空间并没有被释放,因为httpd不断向文件写入数据。
  2. 停止或重新启动httpd进程,或者重新启动系统。建议您清空access_log的内容,而不是删除该文件。运行以下命令清空access_log

执行以下命令清空access_log:

echo "">system.log
echo "">cron.log
ehco "">access_log
echo "">debug.log
echo "">exception.log

这样,磁盘空间将立即被释放,进程可以继续将日志写入文件。然后,再次运行df -h命令查看空间使用情况。

查看根目录空间使用情况

Leave a comment

您的邮箱地址不会被公开。 必填项已用 * 标注