恢复磁盘误删除的数据--extundelete工具

1.extundelete是什么

2.extundelete恢复数据

2.1 epel 仓库安装

yum install extundelete -y
.............................................................................
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : extundelete-0.2.4-6.el7.x86_64                                             1/1 
  Verifying  : extundelete-0.2.4-6.el7.x86_64                                             1/1 

Installed:
  extundelete.x86_64 0:0.2.4-6.el7                                                            

Complete!

 2.2 源码安装extundelete

下载exeundelete

[root@localhost ~]# wget  http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2
--2018-11-30 23:45:40--  http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2
Resolving zy-res.oss-cn-hangzhou.aliyuncs.com (zy-res.oss-cn-hangzhou.aliyuncs.com)... 47.110.177.95
Connecting to zy-res.oss-cn-hangzhou.aliyuncs.com (zy-res.oss-cn-hangzhou.aliyuncs.com)|47.110.177.95|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 108472 (106K) [application/octet-stream]
Saving to: ‘extundelete-0.2.4.tar.bz2’

100%[====================================================>] 108,472     --.-K/s   in 0.06s   

2018-11-30 23:45:40 (1.66 MB/s) - ‘extundelete-0.2.4.tar.bz2’ saved [108472/108472]

安装所需要的依赖包,并编译安装

[root@localhost ~]# yum -y install  bzip2  e2fsprogs-devel  e2fsprogs  gcc-c++ make
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink                                                   | 8.6 kB  00:00:00     
 * base: mirror.vpshosting.com.hk
 * epel: mirrors.aliyun.com
 * extras: mirror.vpshosting.com.hk
 * updates: mirror.vpshosting.com.hk
epel                                                                   | 3.2 kB  00:00:00     
Package bzip2-1.0.6-13.el7.x86_64 already installed and latest version
Package e2fsprogs-devel-1.42.9-12.el7_5.x86_64 already installed and latest version
Package e2fsprogs-1.42.9-12.el7_5.x86_64 already installed and latest version
Package gcc-c++-4.8.5-28.el7_5.1.x86_64 already installed and latest version
Package 1:make-3.82-23.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost ~]# tar -xvjf extundelete-0.2.4.tar.bz2
extundelete-0.2.4/
extundelete-0.2.4/acinclude.m4
extundelete-0.2.4/missing
extundelete-0.2.4/autogen.sh
extundelete-0.2.4/aclocal.m4
extundelete-0.2.4/configure
extundelete-0.2.4/LICENSE
extundelete-0.2.4/README
extundelete-0.2.4/install-sh
extundelete-0.2.4/config.h.in
extundelete-0.2.4/src/
extundelete-0.2.4/src/extundelete.cc
extundelete-0.2.4/src/block.h
extundelete-0.2.4/src/kernel-jbd.h
extundelete-0.2.4/src/insertionops.cc
extundelete-0.2.4/src/block.c
extundelete-0.2.4/src/cli.cc
extundelete-0.2.4/src/extundelete-priv.h
extundelete-0.2.4/src/extundelete.h
extundelete-0.2.4/src/jfs_compat.h
extundelete-0.2.4/src/Makefile.in
extundelete-0.2.4/src/Makefile.am
extundelete-0.2.4/configure.ac
extundelete-0.2.4/depcomp
extundelete-0.2.4/Makefile.in
extundelete-0.2.4/Makefile.am
[root@localhost ~]# cd extundelete-0.2.4
[root@localhost extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
Writing generated files to disk
[root@localhost extundelete-0.2.4]# make && make install
make -s all-recursive
Making all in src
extundelete.cc: In function ‘ext2_ino_t find_inode(ext2_filsys, ext2_filsys, ext2_inode*, std::string, int)’:
extundelete.cc:1272:29: warning: narrowing conversion of ‘search_flags’ from ‘int’ to ‘ext2_ino_t {aka unsigned int}’ inside { } [-Wnarrowing]
    buf, match_name2, priv, 0};
                             ^
Making install in src
  /usr/bin/install -c extundelete '/usr/local/bin'

//验证一下是否安装成功

[root@localhost extundelete-0.2.4]# echo $?
0

3.extundelete找回数据

我们在虚拟上机先增加一块硬盘,并挂载起来,这里我们将新的硬盘挂载到/data目录下面了

[root@android-55aba78065642f3d ~]# df 
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3       18802688 5120528  13682160  28% /
devtmpfs          487984       0    487984   0% /dev
tmpfs             498976       0    498976   0% /dev/shm
tmpfs             498976    7756    491220   2% /run
tmpfs             498976       0    498976   0% /sys/fs/cgroup
/dev/sda1         201380  103968     97412  52% /boot
tmpfs              99796       0     99796   0% /run/user/0
/dev/sdb1        5028480   20472   4729532   1% /data

拷贝一些测试数据到/data/目录下面

[root@android-55aba78065642f3d ~]# cp centos-7-x86_64-minimal.tar.gz /data/
[root@android-55aba78065642f3d ~]# cp /etc/passwd /data/
[root@android-55aba78065642f3d ~]# touch /data/{a,c,b,d,e}.txt
[root@android-55aba78065642f3d ~]# ls /data/
1.txt  a.txt  b.txt  centos-7-x86_64-minimal.tar.gz  c.txt  d.txt  e.txt  lost+found  passwd

删除/data/目录下面几个.txt文件

[root@android-55aba78065642f3d ~]# rm -rf /data/*.txt
[root@android-55aba78065642f3d ~]# ls /data/
centos-7-x86_64-minimal.tar.gz  lost+found  passwd

下面我们开始恢复数据

extundelete相关参数:

其中,参数(options)有:

--version, -[vV],显示软件版本号。

--help,显示软件帮助信息。

--superblock,显示超级块信息。

--journal,显示日志信息。

--after dtime,时间参数,表示在某段时间之后被删的文件或目录。

--before dtime,时间参数,表示在某段时间之前被删的文件或目录。

动作(action)有:

--inode ino,显示节点“ino”的信息。

--block blk,显示数据块“blk”的信息。

--restore-inode ino[,ino,...],恢复命令参数,表示恢复节点“ino”的文件,恢复的文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号作为扩展名。

--restore-file 'path',恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的RECOVERED_FILES目录中。

--restore-files 'path',恢复命令参数,表示将恢复在路径中已列出的所有文件。

--restore-all,恢复命令参数,表示将尝试恢复所有目录和文件。

-j journal,表示从已经命名的文件中读取扩展日志。

-b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。

-B blocksize,通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件。

在数据删除之后,首先要卸载被删除数据所在的磁盘或是分区,如果是系统根分区遭到误删除,
就需要进入单用户模式下,将根分区以只读的方式挂载。

原因:因为文件删除之后,仅仅是将文件的inode节点中的扇区指针清零,实际上文件还存在磁盘上面
如果磁盘以读写方式挂载,这些删除的数据块可能会被系统从新分配出去,这些数据块被覆盖之后,这些
数据就真的丢失了,所以以只读的方式挂载,尽可能避免数据被覆盖。

[root@android-55aba78065642f3d ~]# umount /data
[root@android-55aba78065642f3d ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3       18802688 5120700  13681988  28% /
devtmpfs          487984       0    487984   0% /dev
tmpfs             498976       0    498976   0% /dev/shm
tmpfs             498976    7756    491220   2% /run
tmpfs             498976       0    498976   0% /sys/fs/cgroup
/dev/sda1         201380  103968     97412  52% /boot
tmpfs              99796       0     99796   0% /run/user/0

查看能恢复的数据可以看到我们删除的几个.txt文件全部是deleted

(因为根分区的inode值是2)
[root@android-55aba78065642f3d ~]# extundelete /dev/sdb1 --inode 2  
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 40 groups loaded.
..............................................................................
File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
lost+found                                        11
centos-7-x86_64-minimal.tar.gz                    12
passwd                                            13
1.txt                                             14             Deleted
a.txt                                             15             Deleted
c.txt                                             16             Deleted
b.txt                                             17             Deleted
d.txt                                             18             Deleted
e.txt                                             19             Deleted

4种方法恢复

方法1:通过inode恢复
查看删除文件在哪个分区上

extundelete  /dev/sda4   --restore-inode  8001  文件号

方法2:通过文件名称进行恢复
extundelete  /dev/sdb1 --restore-file passwd
会在当前目录下生成一个RECOVERED_FILES目录,里面保存已经恢复的文件

方法3:通过目录名称进行恢复
extundelete  /dev/sdb1 --restore-directory  /mongodb


方法4:恢复所有误删文件:
extundelete  /dev/sdb1 --restore-all
extundelete还可以实现恢复某个时间段的数据。可以通过“--after”和“--before”参

不能恢复空文件和空目录

未完。。。。。。。。。。。。。。

猜你喜欢

转载自blog.csdn.net/a1779078902/article/details/84657816