问题: Linux弹性云服务器根目录空间占用率过高
发现Apache生成的access_log文件在根目录下占用了约42GB的空间。然后,您执行以下操作尝试释放空间:
但是,输出告诉您使用率仍为 96%。
可能的原因
您删除的文件被另一个正在运行的进程锁定,该进程不断向该文件写入数据。
以下是有关 Linux 中文件存储的基础知识,可以帮助您更好地理解根本原因。
在 Linux 文件系统中,文件分为两部分:
- 文件指针:该指针存储在文件系统元数据中。当文件被删除时,文件指针将从元数据中删除。
- 文件数据:文件数据存储在磁盘上。
一般情况下,从元数据中删除文件指针后,文件数据占用的磁盘空间就会被标记为可用。但如果该文件被删除时仍在被另一个正在运行的进程使用,则该文件指针将无法从元数据中删除,系统将判定该文件尚未被删除,并且不会回收该文件所占用的空间。文件数据。
解决方案
执行lsof命令查看是否有进程持续向access_log文件写入数据
执行lsof命令查看是否有进程持续向access_log,system.log,cron.log文件写入数据。
lsof -n |grep delete
- 如命令输出所示,httpd进程仍在使用access_log文件,该进程不断将日志数据写入该文件。括号中的值deleted表示该日志文件已被删除。但是空间并没有被释放,因为httpd不断向文件写入数据。
- 停止或重新启动httpd进程,或者重新启动系统。建议您清空access_log的内容,而不是删除该文件。运行以下命令清空access_log:
执行以下命令清空access_log:
echo "">system.log
echo "">cron.log
ehco "">access_log
echo "">debug.log
echo "">exception.log
这样,磁盘空间将立即被释放,进程可以继续将日志写入文件。然后,再次运行df -h命令查看空间使用情况。