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

可以看出,數據恢復成功


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章