linux 系统下 恢复被误删文件

时间:2022-03-01 09:36:31

昨天一个同事不小心删除了写了2天的代码,在入库前。

 

在另一个同学的指导下~~帮助其找到了丢失的三对 .h/.cpp文件,还蛮有成就感,简述下过程,说不定以后用得着。

 

如果误删了文件,最好尽快用此方法,拖得越久,磁盘中的数据越有可能被覆盖掉,真的覆盖掉了。。。恐怕再想恢复就不那么简单了,所以一旦发现了误删文件需要做的第一件事,关闭这个磁盘上有写操作的程序或者干脆unmount~

 

好吧,开始恢复。

1. 需要root权限,获得root权限是第一步

2. 进入root权限后,确定被误删文件坐在的磁盘

#df -h 

Filesystem Size Used Avail Use% Mounted on
/dev/hda1 9.9G 2.9G 6.5G 31% /
/dev/xvda 896G 795G 56G 94% /home

这里,我们的文件应该是在/home目录下

3. 执行

#echo "lsdel" | debugfs /dev/xvda > inodes.list

打开inodes.list会看到如下格式的文件

debugfs: lsdel

inode Owner Mode Size BLocks Time deleted

xxx xxx xxx xxx xxx xxx

...

x deleted inodes found.

debugfs:

注意这里边的第一列inode,Size,Time deleted这三列很重要

Size和Time deleted可以大致过滤出可以的inode,因为你丢失的文件大小和删除时间,你是知道的,做一个简单的过滤,【用awk,具体我就不写了】,然后我们拿到一个 inode的list,格式是这样 a.list 然后执行

 

xxxxxxxx

xxxxxxx

xxxxxx

xxxx

 

4. #将inodedump到文件中

for inode in `cat a.list`

do

  echo "dump <${inode}> /home/uname/path/to/tmp/${inode}" | debugfs /dev/xvda

done

 

5. 之后,检查/home/uname/path/to/tmp/ 目录,里边应该会有一堆 inode号为文件名的恢复出来的文件,但是原来的文件名和目录层次是已经完全丢失了的,,剩下的大家自己就知道怎么做了,,grep一下,如果是cpp的,grep一下被include的有代表性的库文件巴拉巴拉~~~

 

啦啦啦,饿了吃饭去。