恢復磁碟誤刪除的資料--extundelete工具
阿新 • • 發佈:2018-12-01
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”參
不能恢復空檔案和空目錄
未完。。。。。。。。。。。。。。