本文檔主要以CentOS7作業系統為例,介紹如何使用開源工具Extundelete快速恢複被誤刪除掉的資料。

簡介

在日常使用中有時難免會出現資料被誤刪除的情況,在這個時候該如何快速、有效地恢複資料呢?在阿里雲上恢複資料有多種方式,例如:

在Linux下,基於開源的資料恢複工具有很多,常見的有debugfs、R-Linux、ext3grep、extundelete等,比較常用的有ext3grep和extundelete,這兩個工具的恢複原理基本一樣,只是extundelete功能更加強大。

Extundelete是基於linux的開來源資料恢複軟體。在使用阿里雲的雲端服務器時,如果您不小心誤刪除資料,並且Linux系統也沒有與Windows系統下資源回收筒類似的功能,您可以方便快速安裝此工具。

Extundelete能夠利用inode資訊結合日誌去查詢該inode所在的block位置,以次來尋找和恢複所需的資料,該工具最給力的一點就是支援ext3/ext4雙格式分區恢複,基於整個磁碟的恢複功能較為強大。

在資料被誤刪除後,第一時間要做的是卸載被刪除資料所在的磁碟或磁碟分割。因為將檔案刪除後,僅僅是將檔案的inode結點中的扇區指標清零,實際檔案還儲存在磁碟上,如果磁碟以讀寫入模式掛載,這些已刪除的檔案的資料區塊就可能被作業系統重新分配出去,在這些資料區塊被新的資料覆蓋後,這些資料就真的丟失了,恢複工具也回力無天。所以,以唯讀模式掛載磁碟可以盡量降低資料區塊中資料被覆蓋的風險,以提高恢複資料成功的幾率。
说明 在實際線上恢複過程中,切勿將extundelete安裝到您誤刪的檔案所在硬碟,這樣會有一定幾率將需要恢複的資料徹底覆蓋,切記操作前做好快照備份。

適用對象

  • 磁碟中檔案誤刪除的使用者,且未對磁碟進行過寫入等操作
  • 網站訪問量小、少量 ECS 執行個體的使用者

使用方法

需安裝的軟體及版本:e2fsprogs-devel e2fsprogs gcc-c++ make(編譯器等)Extundelete-0.2.4。
说明 extundelete需要libext2fs版本1.39或更高版本來運行,但是對於ext4支援,請確保您有e2fsprogs版本1.41或更新版本(可以通過運行命令“dumpe2fs”並記錄其輸出的版本)。

以上版本是寫文檔時的軟體版本。您下載的版本可能與此不同。

  • 部署extundelete工具

    wget  http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2
    yum -y install  bzip2  e2fsprogs-devel  e2fsprogs  gcc-c++  make    #安裝相關依賴和庫
    tar -xvjf extundelete-0.2.4.tar.bz2
    cd extundelete-0.2.4                                #進入程式目錄
    ./configure                                         #如下圖表示安裝成功


    make && make install

    這個時候會出現src目錄,下面有個extundelete可執行檔以及相應路徑,如下圖,其實預設檔案安裝在usr/local/bin下面,下面示範就在usr/local/bin目錄下。

  • 使用extundelete,類比資料誤刪除然後恢複的過程

    1. 檢查ECS現有的磁碟和可用分區,並對/dev/vdb進行分區,格式化,此處不在介紹磁碟分割格式化方式,如果不會的話可以點擊此文檔查看操作方式格式化和掛載資料盤
      fdisk -l


    2. 將分區後的磁碟掛載到/zhuyun目錄下,然後在/zhuyun下面建立測試檔案hello,寫入test。
      mkdir /zhuyun                                #建立zhuyun目錄
      mount /dev/vdb1 /zhuyun                      #將磁碟掛載到zhuyun目錄下
      echo test > hello                            #寫入測試檔案
    3. 記錄檔案MD5值,md5sum命令用於產生和校正刪除前和恢複後倆個檔案的md5值。
      md5sum hello


    4. 類比刪除hello檔案。
      rm -rf hello
      cd ~
      fuser -k /zhuyun                     #結束使用某分區的進程樹(確認沒有資源佔用的話,可以跳過此步)
    5. 卸載資料盤。
      umount /dev/vdb1                     #任何的檔案恢複工具,在使用前,均要將要恢複的分區卸載或掛載為唯讀,防止資料被覆蓋使用
    6. 使用Extundelete工具恢複檔案。
      extundelete --inode 2 /dev/vdb1       #為尋找某i節點中的內容,使用2則說明為整個分區搜尋,如果需要進入目錄搜尋,只須要指定目錄I節點即可。這是可以看到刪除的檔案名稱和inode


      /usr/local/bin/extundelete  --restore-inode 12  /dev/vdb1    #恢複刪除的檔案

      這個時候會在執行命令的同級目錄下出現RECOVERED_FILES目錄,查看是否恢複。



      通過md5值查看,前後倆個檔案,一樣說明恢複成功。

      --restore-inode 12                  # --restore-inode 按指定的I節點恢複
      --extundelete --restore-all         # --restore-all   全部恢複