1. 程式人生 > >恢復磁碟誤刪除的資料--extundelete工具

恢復磁碟誤刪除的資料--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

[[email protected] ~]# 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]

安裝所需要的依賴包,並編譯安裝

[[email protected] ~]# 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
[
[email protected]
~]# 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 [[email protected] ~]# cd extundelete-0.2.4 [[email protected] extundelete-0.2.4]# ./configure Configuring extundelete 0.2.4 Writing generated files to disk [[email protected] 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'

//驗證一下是否安裝成功

[[email protected] extundelete-0.2.4]# echo $?
0

3.extundelete找回資料

我們在虛擬上機先增加一塊硬碟,並掛載起來,這裡我們將新的硬碟掛載到/data目錄下面了

[[email protected] ~]# 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/目錄下面

[[email protected] ~]# cp centos-7-x86_64-minimal.tar.gz /data/
[[email protected] ~]# cp /etc/passwd /data/
[[email protected] ~]# touch /data/{a,c,b,d,e}.txt
[[email protected] ~]# 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檔案

[[email protected] ~]# rm -rf /data/*.txt
[[email protected] ~]# 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節點中的扇區指標清零,實際上檔案還存在磁碟上面
如果磁碟以讀寫方式掛載,這些刪除的資料塊可能會被系統從新分配出去,這些資料塊被覆蓋之後,這些
資料就真的丟失了,所以以只讀的方式掛載,儘可能避免資料被覆蓋。

[[email protected] ~]# umount /data
[[email protected] ~]# 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)
[[email protected] ~]# 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”參

不能恢復空檔案和空目錄

 

 

 

 

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