Linux文件删除后空间没有被释放的原因和解决方案

docker日志删除了 硬盘还是没有释放

在特定的场景下, 当你在删除了应用的日志文件后, 实际上是删除了文件的引用, 而并非真正释放了硬盘空间

在Linux系统中, 当一个文件被打开并写入内容时, 即使删除了这个文件, 文件的内容仍然会继续占用磁盘空间, 直到所有对该文件的引用都被释放

要解决这个问题, 我们需要找到正在占用硬盘空间的文件并释放它们

查看被删除但仍在占用硬盘空间的文件

常见的方法是使用lsof命令来查看哪些文件被打开并占用了硬盘空间

1
2
3
4
# 查看已删除但被占用的文件
lsof | grep deleted
# 查看具体进程打开的文件
lsof -p <PID>

中止进程占用

如果是进程占用的情况, 有两种解决方案

方案1:重启相关进程

systemctl restart <service>

方案2:发送SIGHUP信号

kill -HUP <PID>

手动关闭文件描述符(不终止进程)

1
2
echo > /proc/<PID>/fd/<FD>
# <FD> 是文件描述符的编号, 从 lsof 输出中可以找到

使用清空内容而不是删除

truncate -s 0 filename

其他可能的情况

  • 文件系统出现问题
  • 被删除的是软/硬链接文件