日期:2014-05-16  浏览次数:20850 次

解决linux下删除文件磁盘空间不释放问题

最近通过crontab 定时任务,制定FTP备份服务器附件到备份机。

由于某些原因,备份文件不正确,果然采用rm删除已经备份的部分文件(当时定时任务仍然在执行 )。

于是问题就来了, rm后的文件并没有释放磁盘空间。

寻求解决办法:

1、查询锁定的文件

这里就需要提到lsof命令了。

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。

在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

?

lsod |grep deleted

?

2、中止文件open

kill -9 2606 3367 .......

?

另外补充学习下当文件被意外删除后,如何找回。

?

假如由于误操作将/var/log/messages文件删除掉了,那么这时要将/var/log/messages文件恢复的方法如下:

首先使用lsof来查看当前是否有进程打开/var/logmessages文件,如下:

?

?

从上面的信息可以看到 PID 1283(syslogd)打开文件的文件描述符为 2。同时还可以看到/var/log/messages已经标记被删除了。因此我们可以在 /proc/1283/fd/2 (fd下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:

# head -n 10 /proc/1283/fd/2

?

如果可以通过文件描述符查看相应的数据,那么就可以使用 I/O 重定向将其复制到文件中,如:

cat /proc/1283/fd/2 > /var/log/messages