Linux如何恢复rm -f 误删的文件
【问题描述】
当文件被误删除后,第一时间查看对应的文件进程是否存在:
lsof | grep delete | grep test被删除的文件名

若是没有 lsof 软件,使用 yum install -y lsof 进行安装
1)若删除文件以后,查询进程存在被删除的文件信息
这种情形一般是因为存在活动的进程持续标准输入或输出到该文件(比如:日志输出文件),当该文件被删除后,进程PID仍然存在
一些常见的直接删除日志文件但是发现磁盘空间并没有被释放,通常在服务器上删除一些文件以后,但是发现df -h磁盘不释放,也有可能是这个原因导致的
2)若是删除文件以后,查询进程找不到被删除的文件信息
借助恢复工具来进行恢复,参考先前内容:
《Linux文件系统ext3时,误删除文件(rm -rf)用ext3grep工具恢复操作》
《Linux误删文件,恢复工具extundelete的使用操作》
【示例演示】
1)先在第1个终端中,打开1个测试文件,目的是为了让进程一直占用 test 这个文件。当文件处于一直占用时,该文件删除后,其占用进程仍然存在
tail -f /test/test

2)在第2个终端上,模拟有人误删文件 test
rm -rf /test/test

3)查找被删除的test文件对应的进程,使用lsof查看被删除文件进程是否存在
lsof | grep deleted
lsof | grep deleted | grep test

进程PID是 2210 ,当前文件状态为已删除(deleted),这个是被删除文件test占用的进程
4)根据进程PID查找定位到被删除文件
进入进程操作的文件描述符目录
cd /proc/2210/fd
ll

5)恢复被删除的文件
cp 3 /test/test
ll /test/test
cat /test/test

至此,被误删的文件就被恢复了
【恢复原理】
Linux下文件的存储机制和存储结构的原理
文件存在Linux系统中分为两部分:指针部分和数据部分。
指针部分:存在文件系统的meta-data中,执行rm命令将数据删除后,这个指针就从meta-data中被清除掉了
数据部分:数据就是直接存储在磁盘上了,当指针被从meta-data中清除后,数据部分占用的空间就可以被覆盖并写入新的内容
之所以出现删除程序日志文件后,df -h空间还不释放,就是由于程序进程还在一直往这个文件里面写数据,在删除文件的时候,指针并没有被从meta-data中清除掉,所以被文件还是占用着空间,此时可以根据被删除文件的进程找到完整的一份文件数据
浙公网安备 33010602011771号