linux extundelete 刪除檔案恢複

來源:互聯網
上載者:User

標籤:jpg   journal   2.4   enforce   etc   定時   環境變數   ext4   lan   

  • extundelete是基於Linux的一個資料恢複工具,它通過分析檔案系統的日誌,解析出所有檔案的inode資訊,從而可以恢複Linux下主流的ext3,ext4檔案系統下被誤刪除的檔案。
  • [問題案例]最近看到群裡提到如何恢複LINUX下ext4誤刪的檔案,之前聽說過ext3分區恢複工具ext3grep,但是恢複ext4一直沒有概念,而且目前線上的系統磁碟分割格式都是ext4,SO網上找到了一款叫extundelete的檔案恢複工具,該工具最給力的一點就是支援ext3/ext4雙格式分區恢複,對我們營運攻城獅算是一款神器層級的軟體,這裡整理了如下文檔,供大家參考。
  • 在安裝extundelete之前需要安裝e2fsprogs,e2fsprogs-libs,e2fsprogs-devel。

    這裡用:yum install e2fsprogs e2fsprogs-libs e2fsprogs-devel 來完成安裝。

     

     

    注意事項
    • 恢複檔案的時候一定要卸載磁碟分割

     

  •  

    虛擬機器:        vmware workstation 9.0.2

    作業系統:      CentOS6.3 x64

    extundelete:   extundelete-0.2.4

     

    一.實驗環境

    1.首先關閉SELINUX

    # setenforce 0

    # vi /etc/sysconfig/selinux

    ---------------

    SELINUX=disabled

    ---------------

     

    2.在虛擬機器上建立一個2G的磁碟

     

    3.進入系統,建立一個2G的主要磁碟分割

    # fdisk /dev/sdb

    ---------------------

    n+p+1+斷行符號+斷行符號+w

    ---------------------

     

    4.使分區無需重啟就能生效

    # partx -a /dev/sdb

     

    5.格式化為ext4分區並掛載

    # mkfs.ext4 /dev/sdb1

    # mkdir /data

    # mount /dev/sdb1 /data

    注: 在實際線上恢複過程中,切勿將extundelete安裝到你誤刪的檔案所在硬碟,這樣會有一定幾率將需要恢複的資料徹底覆蓋。

    建議加裝一塊硬碟將extundelete安裝到此硬碟,再做以下操作。

     

    二.extundelete安裝

    1.安裝依賴包

    # yum install e2fsprogs* -y

     

    2.下載並安裝extundelete

    # wget http://nchc.dl.sourceforge.NET/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

    # tar -jxvf extundelete-0.2.4.tar.bz2

    # cd extundelete-0.2.4

    # ./configure --prefix=/usr/local/extundelete

    # make && make install

     

    3.驗證是否安裝成功

    # cd /usr/local/extundelete/bin

    # ./extundelete -v

    ---------------------

    extundelete version 0.2.4

    libext2fs version 1.41.12

    Processor is little endian.

    ---------------------

     

    4.設定環境變數

    # echo "PATH=/usr/local/extundelete/bin:$PATH" >> /etc/profile

    # echo "export PATH" >> /etc/profile

    # source /etc/profile

     

    5.上傳一些圖片,安裝包等檔案到/data目錄

    # cd /data

    # yum install lrzsz -y

    # rz

    -------------

    本地檔案.....

    -------------

    # ls

    ------------------

    lost+found  MySQL-5.6.10.tar.gz  nginx.conf  pic.jpg

    ------------------

     

    6.全部刪除

    # rm -rf *

     

    7.查看被刪除檔案

    1).查看前需卸載該磁碟分割

    # cd ~

    # umount /dev/sdb1

     

    2).查看檔案

    注:一般一個分區掛載到一個目錄下時,這個”根”目錄的inode值為2

    我們為了查看根目錄所有檔案,所以查看分區inode為2的這個部分

    # extundelete /dev/sdb1 --inode 2

    --------------------------------

    .....

     

    File name                                       | Inode number | Deleted status

    .                                                 2

    ..                                                2

    lost+found                                        11             Deleted

    mysql-5.6.10.tar.gz                               12             Deleted

    nginx.conf                                        13             Deleted

    pic.jpg                                           14             Deleted

    --------------------------------

    注:標記為”Deleted”的檔案則是被刪除的檔案

     

    8.恢複指定的檔案

    注: 預設被刪檔案會恢複到目前的目錄下的RECOVERED_FILES目錄中去

    # extundelete --restore-file pic.jpg /dev/sdb1  

    # cd RECOVERED_FILES/

    # ll

    ----------------

    -rw-r--r-- 1 root root 52592 8月  13 07:18 pic.jpg

    ----------------

     

    9.完全恢複裝置上檔案

    # extundelete --restore-all /dev/sdb1

    # ll

    -----------------------------------

    總用量 34464

    -rw-r--r-- 1 root root 35174149 8月  13 07:24 mysql-5.6.10.tar.gz

    -rw-r--r-- 1 root root     4551 8月  13 07:24 nginx.conf

    -rw-r--r-- 1 root root    52592 8月  13 07:18 pic.jpg

    -rw-r--r-- 1 root root    52592 8月  13 07:24 pic.jpg.v1

    -----------------------------------

    注:這裡完全恢複並不會把之前恢複的pic.jpg檔案覆蓋掉,而是重新命名為pic.jpg.v1

     

    10.恢複指定的時間點後被刪檔案

    1).指定一個時間點

    # date -d "Sep 4 03:09:13 2013" +%s

    ------------------

    1378235353

    ------------------

    2).恢複這個時間點後的檔案

    # extundelete --restore-all --after “1378235353” /dev/sdb1

    --------------------

    ..........

    --------------------

    注:如果要恢之前的就用before參數。extundelete命令與after結合使用,在進行恢複時非常有用,可以過濾掉那太舊的檔案,減小恢複壓力。

     

    11.檢驗是否恢複成功

    # md5sum RECOVERED_FILES/mysql-5.6.10.tar.gz

    ------------------------------------

    9dcee911fb4bc7e977a6b63f4d3ffa63  RECOVERED_FILES/mysql-5.6.10.tar.gz

    ------------------------------------

    上傳剛才誤刪的mysql安裝包

    # rz

    ...

    # md5sum mysql-5.6.10.tar.gz

    ---------------------------------

    9dcee911fb4bc7e977a6b63f4d3ffa63  mysql-5.6.10.tar.gz

    ---------------------------------

    MD5值相同,恢複成功。。。

     

    -----------大功告成-------------

     

    extundelete反刪除總結

    一、介紹extundelete

             1.extundelete的檔案恢複工具,該工具最給力的一點就是支援ext3/ext4雙格式分區恢複。

             2. 在實際線上恢複過程中,切勿將extundelete安裝到你誤刪的檔案所在硬碟,這樣會有一定幾率將需要恢複的資料徹底覆蓋。

             3. extundelete還是有很大的不完整性,基於整個磁碟的恢複功能較為強大,基於目錄和檔案的恢複還不夠強大。

             4. extundelete執行完畢後在目前的目錄生產一個RECOVERED_FILES目錄,裡面即是恢複出來的檔案,還包括檔案夾。

             5.任何的檔案恢複工具,在使用前,均要將要恢複的分區卸載或掛載為唯讀,防止資料被覆蓋使用。

                       umount /dev/partition 

                       mount -o remount,ro /dev/partition

             6.保持良好的習慣,絕對比恢複資料要更簡單。

    二、安裝

             0.yum install e2fsprogs* e2fslibs* -y

             1.wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

             2.tar -axf extundelete-0.2.4.tar.bz2 -C /usr/local/src

             3.cd /usr/local/src/extundelete-0.2.4

             4../configure --prefix=/usr/local/extundelete

             5.make

       6.make install

             7.ln -s /usr/local/extundelete/bin/* /usr/local/bin/

     

    三、使用及命令    1. umount或者read only 分區

                       umount /dev/partition 

                       mount -o remount,ro /dev/partition

     

        2.切換到儲存恢複檔案的目錄

                       cd $dir

            

        3.命令

    Usage: extundelete [options] [--] device-file

    Options:

      --superblock           列印指定分區的超級塊資訊。如不加任何的參數,

    此選項是預設的.     

    extundelete --superblock /dev/sda3 <---> extundelete /dev/sda1

                           

      --journal              顯示塊的日誌資訊,同--superblock。

    extundelete --journal /dev/sda1

     

      --after dtime          只恢複指定時間【dtime】(時間戳記)之後,被刪除的資料

     

    假如刪除的時間大概是2011-7-26 14:30

    date -d "Jul 26 14:30" +%s

    得出秒數 1234567890

    恢複此時間後刪除的所有檔案

    extundelete /dev/sdb1 --after 1234567890 --restore-all

     

      --before dtime         只恢複指定時間【dtime】(時間戳記)之前,被刪除的資料

     

    Actions:

      --inode ino                顯示某分區inode為x的資訊,一般是查看該分區下所有的檔案.

    extundelete --inode 2 /dev/sda1

     

      --block blk              顯示某分區block為x的資訊.

     

      --restore-inode ino[,ino,...] 恢複一個或多個指定inode號的檔案,該恢複的檔案,

    儲存在目前的目錄下的RECOVERED_FILES裡,檔案名稱為【file.$inode】

    extundelete /dev/sda1 --restore-inode 13,14

     

      --restore-file ‘filename‘        恢複指定的檔案(被刪除的),檔案位於目前的目錄下

    的RECOVERED_FILES/$filename,檔案名稱還是原來的              

    extundelete /dev/sda1 --restore-file initramfs-2.6.32-358.el6.x86_64.img

     

      --restore-files ‘read_filename‘  恢複指定的檔案(真實存在的)中的內容,

    檔案位於目前的目錄下的RECOVERED_FILES/$filename,檔案名稱還是原來的

                                                            vi test_restore.txt(結尾不可有多餘的空格)

                                                                     System.map-2.6.32-358.el6.x86_64

                                                                     config-2.6.32-358.el6.x86_64

                                                                     symvers-2.6.32-358.el6.x86_64.gz

                                                                     vmlinuz-2.6.32-358.el6.x86_64

                                                                     initramfs-2.6.32-358.el6.x86_64.img

             extundelete /dev/sda1  --restore-files test_restore.txt

     

     

      --restore-directory ‘dir-name‘      恢複指定的目錄,檔案位於目前的目錄下的

    RECOVERED_FILES/$dir-name,檔案名稱還是原來的

                                                                      extundelete /dev/sda1  --restore-files grub

     

      --restore-all                          恢複某分區裡所有被刪除的資料,檔案名稱還是原來的

                                                                     extundelete /dev/sda1   --restore-all

       4.例    ①--superblock

          ②--journal

     

          ③--after dtime

    假如刪除的時間大概是2011-7-26 14:30

    date -d "Jul 26 14:30" +%s

    得出秒數 1234567890

    恢複此時間後刪除的所有檔案

    /usr/local/bin/extundelete /dev/sdb1 --after 1234567890 --restore-all

        ④--before dtime

          ⑤--inode

          ⑥--restore-inode ino[,ino,...]

          ⑦--restore-file ‘filename‘

        ⑧--restore-files ‘read_filename‘

          ⑨--restore-directory ‘dir-name‘

          ⑩--restore-all

    恢複單個目錄:

    extundelete  /dev/sdb1 --restore-directory  /MongoDB

    恢複所有誤刪檔案:

    extundelete  /dev/sdb1 --restore-all

     

    extundelete還可以實現恢複某個時間段的資料。可以通過“--after”和“--before”參數實現!

    【原理】extundelete恢複資料的過程:

    在資料被誤刪除後,第一時間要做的就是卸載被刪除資料所在的分區,如果是根分區的資料遭到誤刪,就需要將系統進入單一使用者模式,並且將根分區以唯讀模式掛載。這樣做的原因很簡單,因為將檔案刪除後,僅僅是將檔案的inode節點中的扇區指標清零,實際檔案還儲存在磁碟上,如果磁碟繼續以讀寫入模式掛載,這些已刪除的檔案的資料區塊就可能被作業系統重新分配出去,在這些資料庫被新的資料覆蓋後,這些資料就真的丟失了,恢複工具也無力回天。所以!以唯讀模式掛載磁碟可以盡量降低資料庫中資料被覆蓋的風險,以提高恢複資料成功的比例。

linux extundelete 刪除檔案恢複

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.