利用extundelete工具恢復磁盤誤刪除的數據
原理:
簡單介紹下關於inode的知識。在Linux下可以通過“ls -id”命令來查看某個文件或者目錄的inode值,例如查看根目錄的inode值,可以輸入:
[root@Virtual Server-100 shell]# ls -id /
2 /
在利用extundelete恢復文件時並不依賴特定文件格式,首先extundelete會通過文件系統的inode信息(根目錄的inode一般為2)
來獲得當前文件系統下所有文件的信息,包括存在的和已經刪除的文件,這些信息包括文件名和inode。
然后利用inode信息結合日志去查詢該inode所在的block位置,包括直接塊、間接塊等信息。
最后利用dd命令將這些信息備份出來,從而恢復數據文件。
安裝:
官網下載地址:https://sourceforge.net/projects/extundelete/files/latest/download?source=top3_dlp_t5
[root@Virtual Server-100 src]# yum -y install e2fsprogs-libs e2fsprogs e2fsprogs-devel
[root@Virtual Server-100 src]# rpm -q e2fsprogs-libs e2fsprogs e2fsprogs-devel
[root@Virtual Server-100 src]# tar jxvf extundelete-0.2.4.tar.bz2
[root@Virtual Server-100 src]# cd extundelete-0.2.4
[root@Virtual Server-100 src]#extundelete-0.2.4]# ./configure && make && make install
安裝完成之后生成一個可執行文件
使用:##
[root@Virtual Server-100 src]# extundelete --help
其中,參數(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節點中的扇區指針清零,實際上文件還存在磁盤上面
如果磁盤以讀寫方式掛載,這些刪除的數據塊可能會被系統從新分配出去,這些數據塊被覆蓋之后,這些
數據就真的丟失了,所以以只讀的方式掛載,盡可能避免數據被覆蓋。
實驗:
下面的實驗我是將磁盤格式化為ext4文件系統,當然在ext3文件系統下面也是同樣的方法進行恢復
首先掛載一個新的分區
[root@Virtual Server-100 src]# mkfs.ext4 /dev/sdb1
[root@Virtual Server-100 src]# pwd
/usr/local/src/
[root@Virtual Server-100 src]# mkdir test
[root@Virtual Server-100 src]# mount /dev/sdb1 test/
[root@Virtual Server-100 src]# cp /etc/passwd test/
[root@Virtual Server-100 src]# cp -r shell/ test/
[root@Virtual Server-100 src]# mkdir test/yhl
[root@Virtual Server-100 src]# echo "Welcome to test" > test/yhl/1.txt
[root@Virtual Server-100 src]# cd test/
[root@Virtual Server-100 test]# md5sum passwd
b182c9886c816aa0b4fc77ca6585d42e passwd
[root@Virtual Server-100 test]# md5sum yhl/1.txt
eb39646285ff90dd31f24bd9f0a34257 yhl/1.txt
[root@Virtual Server-100 test]# ls shell/ yhl/
shell/:
6.sh check_system.sh hanyi.sh if2.sh if4.sh new.sh.bak p_s1.sh root.sh yanse.sh yuhulin.sh yunsuan.sh
case.sh chengji.sh if1.sh if3.sh new.sh ppp python.sh test youxi.sh yunsuan-1.sh
yhl/:
1.txt
[root@Virtual Server-100 test]# rm -rf *
恢復:
1,卸載刪除文件的分區
[root@Virtual Server-100 test]# umount /usr/local/src/test/
umount: /usr/local/src/test: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
提示設備忙,用下面方法卸載就可以卸載
[root@Virtual Server-100 test]# fuser -m -v -i -k /usr/local/src/test/
[root@Virtual Server-100 ~]# umount /usr/local/src/test/
查看能恢復的數據
[root@Virtual Server-100 ~]# extundelete /dev/sdb1 --inode 2 (因為根分區的inode值是2)
File name | Inode number | Deleted status
. 2
.. 2
shell 130305 Deleted
passwd 12 Deleted
yhl 1042433 Deleted
首先測試恢復單個文件
[root@Virtual Server-100 ~]# extundelete /dev/sdb1 --restore-file passwd //restore-file表示恢復文件
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 153 groups loaded.
Loading journal descriptors ... 79 descriptors loaded.
Successfully restored file passwd
[root@Virtual Server-100 ~]# cd RECOVERED_FILES/ //恢復成功之后默認會創建這個文件,恢復的文件在這個目錄下面
[root@Virtual Server-100 RECOVERED_FILES]# ls
passwd
[root@Virtual Server-100 RECOVERED_FILES]# md5sum passwd //進行MD5校驗,和刪除之前對比是一樣的,說明恢復成功
b182c9886c816aa0b4fc77ca6585d42e passwd
測試恢復目錄
[root@Virtual Server-100 RECOVERED_FILES]# extundelete /dev/sdb1 --restore-directory /shell
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 153 groups loaded.
Loading journal descriptors ... 79 descriptors loaded.
Searching for recoverable inodes in directory /shell ...
26 recoverable inodes found.
Looking through the directory structure for deleted files ...
5 recoverable inodes still lost.
[root@Virtual Server-100 RECOVERED_FILES]# ls
passwd RECOVERED_FILES
[root@Virtual Server-100 RECOVERED_FILES]# cd RECOVERED_FILES/
[root@Virtual Server-100 RECOVERED_FILES]# ls
shell
可以看見這個目錄,但是有一個問題是恢復回來的文件權限和之前的發生了變化,需要你重新修改權限(我測試的時候是這樣的)
恢復所有數據
[root@Virtual Server-100 shell]# extundelete /dev/sdb1 --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 153 groups loaded.
Loading journal descriptors ... 79 descriptors loaded.
Searching for recoverable inodes in directory / ...
26 recoverable inodes found.
Looking through the directory structure for deleted files ...
1 recoverable inodes still lost.
[root@Virtual Server-100 shell]# cd RECOVERED_FILES/
[root@Virtual Server-100 RECOVERED_FILES]# ls
passwd shell yhl
[root@Virtual Server-100 yhl]# ls
1.txt
[root@Virtual Server-100 yhl]# cat 1.txt
Welcome to test
[root@Virtual Server-100 yhl]# md5sum 1.txt
eb39646285ff90dd31f24bd9f0a34257 1.txt
[root@Virtual Server-100 shell]# du -sh RECOVERED_FILES/*
4.0K RECOVERED_FILES/passwd
96K RECOVERED_FILES/shell
8.0K RECOVERED_FILES/yhl
可以看出,數據恢復成功