Linux如何恢复rm -f 误删的文件

【问题描述】

当文件被误删除后,第一时间查看对应的文件进程是否存在:

lsof | grep delete | grep  test被删除的文件名

image-20230812175455362

若是没有 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

image-20230812175542156

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

rm -rf /test/test

image-20230812175607978

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

lsof | grep deleted

lsof | grep deleted | grep test

image-20230812175634833

进程PID是 2210 ,当前文件状态为已删除(deleted),这个是被删除文件test占用的进程

4)根据进程PID查找定位到被删除文件

进入进程操作的文件描述符目录

cd  /proc/2210/fd

ll

image-20230812175700275

5)恢复被删除的文件

cp 3 /test/test

ll  /test/test

cat /test/test

image-20230812175725245

至此,被误删的文件就被恢复了

【恢复原理】

Linux下文件的存储机制和存储结构的原理

文件存在Linux系统中分为两部分:指针部分和数据部分。

指针部分:存在文件系统的meta-data中,执行rm命令将数据删除后,这个指针就从meta-data中被清除掉了

数据部分:数据就是直接存储在磁盘上了,当指针被从meta-data中清除后,数据部分占用的空间就可以被覆盖并写入新的内容

之所以出现删除程序日志文件后,df -h空间还不释放,就是由于程序进程还在一直往这个文件里面写数据,在删除文件的时候,指针并没有被从meta-data中清除掉,所以被文件还是占用着空间,此时可以根据被删除文件的进程找到完整的一份文件数据

posted @ 2023-08-12 17:58  寻梦99  阅读(2843)  评论(0)    收藏  举报