昨天一个同事不小心删除了写了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的有代表性的库文件巴拉巴拉~~~
啦啦啦,饿了吃饭去。