Linux下数据恢复
一、 将磁盘分区挂载为只读

这一步很重要,并且在误删除文件后应尽快将磁盘挂载为只读。越早进行,恢复的成功机率就越大。

否则其他daemons(进程) 都来读写,神仙都恢复不了了。磁盘规划时一定要做功能分区。否则,误删了想恢复也很困难。比如linux安装时不分区整个装/下面,就很麻烦。
/data挂在/dev/sdb1上

[root@localhost ~]# mount
/dev/sda2 on /home type ext4 (rw)
/home on /home type none (rw)


[root@localhost ~]# mount -r -n -o remount /home
 mount: /home is busy
这需看看有哪些进程在用:
[root@localhost ~]# fuser -v -m /home
可以看到有很多java和hadoop进程在使用,杀之。
[root@localhost ~]# mount -r -n -o remount /home
成功。
 再到/data里touch文件,报错。

[root@localhost ~]# touch a
 touch: cannot touch `a’: Read-only file system
 
一下就放轻松了很多。因为改为只读挂载后,可以慢慢恢复,再也不用担心我的文件被覆盖。

1. 上传恢复工具extundelete并解压

tar jxvf extundelete - 0 . 2 . 4 .tar.bz2
2.  编译

(1) configure

[root@localhost  extundelete-0.2.4]# ./configure

configure时报错,看了下config.log,确定是本机没编译环境 。

yum -y install gcc+ gcc-c++

等待,有一点慢。

安装完成后,再次config,依然报错

Configuring extundelete 0.2.4
configure: error: Can’t find ext2fs library

这是因为extundelete依赖e2fsprogs。

安装e2fsprogs后再次configure,成功。

[root@localhost  extundelete-0.2.4]# yum install e2fsprogs-devel
[root@localhost  extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
Writing generated files to disk

 

(2) make & make install
[root@localhost  extundelete-0.2.4]#make & make install

 如果没有异常信息,基本说明安装成功.

 

(3) 可以到src目录验证下.

[root@localhost  extundelete-0.2.4]# cd src
[root@localhost  src]# ./extundelete
No action specified; implying --superblock.
./extundelete: Missing device name.
Usage: ./extundelete [options] [--] device-file
.............

 

[root@localhost  src]# ./extundelete -v

extundelete version 0.2.4

libext2fs version 1.41.12

Processor is little endian.

如上信息,证明安装成功。

 

2.  查看被删除文件
# extundelete /dev/sdb1 --inode 2
File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
lost+found                                        11
xguest                                            131073
testml                                            131081         Deleted

[root@localhost src]# extundelete  /dev/sda2  --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 32 groups loaded.
Loading journal descriptors ... 44 descriptors loaded.
Searching for recoverable inodes in directory / ...
2 recoverable inodes found.
Looking through the directory structure for deleted files ...
0 recoverable inodes still lost.

这时可以看到恢复的文件 (默认会在当前目录生成一个RECOVERED_FILES)
[root@localhost src]# ls
block.c  extundelete          extundelete-cli.o          extundelete-insertionops.o  jfs_compat.h  Makefile.am
block.h  extundelete-block.o  extundelete-extundelete.o  extundelete-priv.h          kernel-jbd.h  Makefile.in
cli.cc   extundelete.cc       extundelete.h              insertionops.cc             Makefile      RECOVERED_FILES
[root@localhost src]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ls
testml
[root@localhost RECOVERED_FILES]#

指定恢复某个文件
extundelete   /dev/sda? (? 表示磁盘号)    --restore-file + '文件名'

恢复完成后,将文件系统重新mount 就可重新使用。
或 先umount再mount;   或者 mount -o rw,remount + /mnt/data (要重新挂载的路径 如/home)