在linux下有时会遇到一种情况,某个文件删除了,但是磁盘空间并没有释放。这是因为仍然有进程在使用此文件,其文件句柄没有被释放。
下面介绍两种方式来解决此问题。
重启服务,释放文件句柄
使用
lsof
找到还在使用此文件的进程。1$ lsof | fgrep "deleted"根据上面得到的pid,进行进程重启或直接kill掉此进程,此时空间会被释放。
不重启进程的方法
使用
lsof
找到还在使用此文件的进程。1$ lsof | fgrep "deleted"找到文件描述符所在地
1ls -l /proc/${pid}/fd/ | fgrep "deleted"直接截断文件描述符
1234# 清空fd> /proc/${pid}/fd/${id}# 或直接调用truncate命令truncate -s 0 /proc/${pid}/fd/${id}
还可以进行恢复
使用
lsof
找到还在使用此文件的进程。1$ lsof | fgrep "deleted"找到文件描述符所在地
1ls -l /proc/${pid}/fd/ | fgrep "deleted"进行恢复
1cat /proc/${pid}/fd/${id} > /tmp/${file}