Linux中利用extundelete恢復誤刪除的數據


利用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
可以看出,數據恢復成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM