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

利用extundelete工具恢復磁盤誤刪除的數據node

原理:

簡單介紹下關於inode的知識。在Linux下能夠經過「ls -id」命令來查看某個文件或者目錄的inode值,例如查看根目錄的inode值,能夠輸入:python

[root@Virtual Server-100 shell]# ls -id /
2 /

在利用extundelete恢復文件時並不依賴特定文件格式,首先extundelete會經過文件系統的inode信息(根目錄的inode通常爲2)
來得到當前文件系統下全部文件的信息,包括存在的和已經刪除的文件,這些信息包括文件名和inode。
而後利用inode信息結合日誌去查詢該inode所在的block位置,包括直接塊、間接塊等信息。
最後利用dd命令將這些信息備份出來,從而恢復數據文件。shell

安裝:

官網下載地址: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
能夠看出,數據恢復成功
相關文章
相關標籤/搜索