ubuntu環境下數據誤刪除恢復--extundelete的恢復原理


1、 數據恢復軟件extundelete介紹

  作為一名運維人員,保證數據的安全是根本職責,所以在維護系統的時候,要慎之又慎,但是有時難免會出現數據被誤刪除的情況,在這個時候該如何快速、有效地恢復數據呢?本節我們就來介紹一下Linux系統下常用的幾個數據恢復工具。

2、 如何使用“rm -rf”命令

  在Linux系統下,通過命令“rm -rf”可以將任何數據直接從硬盤刪除,並且沒有任何提示,同時Linux下也沒有與Windows下回收站類似的功能,也就意味着,數據在刪除后通過常 規的手段是無法恢復的,因此使用這個命令要非常慎重。在使用rm命令的時候,比較穩妥的方法是把命令參數放到后面,這樣有一個提醒的作用。其實還有一個方 法,那就是將要刪除的東西通過mv命令移動到系統下的/tmp目錄下,然后寫個腳本定期執行清除操作,這樣做可以在一定程度上降低誤刪除數據的危險性。

  其實保證數據安全最好的方法是做好備份,雖然備份不是萬能的,但是沒有備份是萬萬不行的。任何數據恢復工具都有一定局限性,都不能保證完整地恢復出所有數據,因此,把備份作為核心,把數據恢復工具作為輔助是運維人員必須堅持的一個准則。

3、 extundelete與ext3grep的異同

  在Linux下,基於開源的數據恢復工具有很多,常見的有debugfs、R-Linux、ext3grep、extundelete等,比較常用 的有ext3grep和extundelete,這兩個工具的恢復原理基本一樣,只是extundelete功能更加強大,本節重點介紹 extundelete的使用方式。

  extundelete是基於Linux的一個數據恢復工具,它通過分析文件系統的日志,解析出所有文件的inode信息,從而可以恢復Linux 下主流的ext3、ext4文件系統下被誤刪除的文件。而ext3grep僅支持ext3文件系統的恢復。在恢復速度上,extundelete要快很 多,因為extundelete的恢復機制是掃描inode和恢復數據同時進行,並且支持單個文件恢復、單個目錄恢復、inode恢復、block恢復、 完整磁盤恢復等,而ext3grep就略顯笨拙了,它需要首先掃描完要恢復數據的所有inode信息,然后才能開始數據恢復,所以在恢復速度上相對較慢, 並且在功能上也不支持目錄恢復、時間段恢復等。

4、 extundelete的恢復原理

  在介紹使用extundelete進行恢復數據之前,簡單介紹下關於inode的知識。在Linux下可以通過“ls -id”命令來查看某個文件或者目錄的inode值,例如查看根目錄的inode值,可以輸入:
 

  [root@cloud1 ~]# ls -id  /  

  2 / 

 

  由此可知,根目錄的inode值為2。

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

5、 安裝extundelete

  extundelete的官方網站是http://extundelete.sourceforge.net/ ,其目前的穩定版本是extundelete-0.2.4。在安裝extundelete之前需要安裝e2fsprogs和e2fsprogs-libs兩個依賴包。

  e2fsprogs和e2fsprogs-libs安裝非常簡單,這里不做介紹。但是對ubuntu系統而言需要安裝的依賴包是

sudo apt-get install e2fslibs-dev

  下面是extundelete的編譯安裝過程:

  [root@cloud1 app]# tar jxvf  extundelete-0.2.4.tar.bz2  
[root@cloud1 app]# cd extundelete-0.2.4  
[root@cloud1 extundelete-0.2.4]# ./configure
[root@cloud1 extundelete-0.2.4]# make  
 [root@cloud1 extundelete-0.2.4]# make install 

  成功安裝extundelete后,會在系統中生成一個extundelete可執行文件。extundelete的使用非常簡單,可以通過“extundelete  --help”獲得此軟件的使用方法。

6、 extundelete用法詳解

extundelete --help

  安裝完成后,就可以執行數據恢復操作了,本節詳細介紹extundelete每個參數的含義。extundelete用法如下:

  extundelete [options] [action] device-file 

  其中,參數(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,通過指定數據塊大小來打開文件系統,一般用於查看已經知道大小的文件。

7、 實戰:extundelete恢復數據的過程

  在數據被誤刪除后,第一時間要做的是卸載被刪除數據所在的磁盤或磁盤分區,如果是系統根分區的數據遭到誤刪除,就需要將系統進入單用戶,並且將根分 區以只讀模式掛載。這樣做的原因很簡單,因為將文件刪除后,僅僅是將文件的inode結點中的扇區指針清零,實際文件還存儲在磁盤上,如果磁盤以讀寫模式 掛載,這些已刪除的文件的數據塊就可能被操作系統重新分配出去,在這些數據塊被新的數據覆蓋后,這些數據就真的丟失了,恢復工具也無力回天。所以,以只讀 模式掛載磁盤可以盡量降低數據塊中數據被覆蓋的風險,以提高恢復數據成功的比率。

8、通過extundelete恢復單個文件

8.1. 模擬數據誤刪除環境

在演示通過extundelete恢復數據之前,我們首先要模擬一個數據誤刪除環境,這里我們以ext3文件系統為例,在ext4文件系統下的恢復方式與此完全一樣。簡單的模擬操作過程如下:
  

    [root@cloud1 ~]# mkdir /data  
    [root@cloud1 ~]# mkfs.ext3 /dev/sdc1  
    [root@cloud1  mount /dev/sdc1  /data  
    [root@cloud1 ~]# cp /etc/passwd  /data  
    [root@cloud1 ~]# cp -r /app/ganglia-3.4.0  /data  
    [root@cloud1 ~]# mkdir /data/test  
    [root@cloud1 ~]# echo "extundelete test" > /data/test/mytest.txt  
    [root@cloud1 ~]# cd /data  
    [root@cloud1 data]# md5sum  passwd  
    0715baf8f17a6c51be63b1c5c0fbe8c5  passwd  
    [root@cloud1 data]# md5sum  test/mytest.txt  
    eb42e4b3f953ce00e78e11bf50652a80  test/mytest.txt  
    [root@cloud1 data]# rm -rf /data/* 

8.2. 卸載磁盤分區

在將數據誤刪除后,立刻需要做的就是卸載這塊磁盤分區:

    [root@cloud1 data]# cd /mnt  
    [root@cloud1 mnt]# umount /data 

8.3. 查詢可恢復的數據信息

  通過extundelete命令可以查詢/dev/sdc1分區可恢復的數據信息:

    [root@cloud1 /]# extundelete  /dev/sdc1  --inode 2  
    ......  
    File name                                       | Inode number | Deleted status  
    .                                                 2  
    ..                                                2  
    lost+found                                        11             Deleted  
    passwd                                            49153          Deleted  
    test                                              425985         Deleted  
    ganglia-3.4.0                                     245761         Deleted 

  根據上面的輸出,標記為Deleted狀態的是已經刪除的文件或目錄。同時還可以看到每個已刪除文件的inode值,接下來就可以恢復文件了。

8.4. 恢復單個文件

  執行如下命令開始恢復文件:

    [root@cloud1 /]# extundelete  /dev/sdc1  --restore-file passwd  
    Loading filesystem metadata ... 40 groups loaded.  
    Loading journal descriptors ... 54 descriptors loaded.  
    Successfully restored file passwd  
    [root@cloud1 /]# cd RECOVERED_FILES/  
    [root@cloud1 RECOVERED_FILES]# ls  
    passwd  
    [root@cloud1 RECOVERED_FILES]# md5sum  passwd  
    0715baf8f17a6c51be63b1c5c0fbe8c5  passwd 

  extundelete恢復單個文件的參數是“--restore-file”,這里需要注意的是,“--restore-file”后面指定的是 恢復文件路徑,這個路徑是文件的相對路徑。相對路徑是相對於原來文件的存儲路徑而言的,比如,原來文件的存儲路徑是/data/passwd,那么在參數 后面直接指定passwd文件即可,如果原來文件的存儲路徑是/data/test/mytest.txt,那么在參數后面通過“test /mytest.txt”指定即可。

  在文件恢復成功后,extundelete命令默認會在執行命令的當前目錄下創建一個RECOVERED_FILES目錄,此目錄用於存放恢復的文件,所以執行extundelete命令的當前目錄必須是可寫的。

  根據上面的輸出,通過md5sum命令校驗,校驗碼與之前的完全一致,表明文件恢復成功。

9、 通過extundelete恢復單個目錄

  extundelete除了支持恢復單個文件,也支持恢復單個目錄,在需要恢復目錄時,通過“--restore-directory”選項即可恢復指定目錄的所有數據。

  繼續在上面模擬的誤刪除數據環境下操作,現在要恢復/data目錄下的ganglia-3.4.0文件夾,操作如下:

    [root@cloud1 mnt]# extundelete  /dev/sdc1  --restore-directory /ganglia-3.4.0  
    Loading filesystem metadata ... 40 groups loaded.  
    Loading journal descriptors ... 247 descriptors loaded.  
    Searching for recoverable inodes in directory /ganglia-3.4.0 ...  
    781 recoverable inodes found.  
    Looking through the directory structure for deleted files ...  
    4 recoverable inodes still lost.  
    [root@cloud1 mnt]# ls  
    RECOVERED_FILES  
    [root@cloud1 mnt]# cd RECOVERED_FILES/  
    [root@cloud1 RECOVERED_FILES]# ls  
    ganglia-3.4.0 

  可以看到之前刪除的目錄ganglia-3.4.0已經成功恢復了,進入這個目錄檢查發現:所有文件內容和大小都正常。

轉載參考:http://book.51cto.com/art/201409/452478.htm


免責聲明!

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



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