rm -rf刪除文件的恢復

人無完人,工作環境中,我們難免會存在誤操作(如:rm -rf)。接下來,我們來模擬一個誤刪除操作(rm -rf),然後利用ext3grep取回被誤刪的數據。

ext3grep官方網站:http://code.google.com/p/ext3grep/
這裏下載的是ext3grep-0.10.2.tar.gz

所需要的系統相關包:
[root@localhost ~]# rpm -qa | grep e2fsprogs
e2fsprogs-1.39-33.el5
e2fsprogs-libs-1.39-33.el5
e2fsprogs-libs-1.39-33.el5
e2fsprogs-devel-1.39-33.el5
系統必須安裝e2fsprogs-libs,不然後面ext3grep的安裝會出現問題。

下面進入編譯安裝階段,過程如下:
[root@localhost software]# tar xvf ext3grep-0.10.2.tar.gz 
[root@localhost software]# cd ext3grep-0.10.2
[root@localhost ext3grep-0.10.2]# ./configure 
[root@localhost ext3grep-0.10.2]# make && make install
[root@localhost ext3grep-0.10.2]# ext3grep -v
Running ext3grep version 0.10.2
ext3grep v0.10.2, Copyright (C) 2008 Carlo Wood.
ext3grep comes with ABSOLUTELY NO WARRANTY;
This program is free software; your freedom to use, change
and distribute this program is protected by the GPL.

這樣,ext3grep就安裝完成了,默認ext3grep命令放在/usr/local/bin目錄下。ext3grep的使用非常簡單,這裏就不做介紹,可以通過”ext3grep --help“ 獲取詳細的使用幫助。

數據恢復準則:
  當發現某個分區的數據被刪除以後,要做的第一件事就是立刻卸載被誤刪文件所在的分區,或者重新以只讀的方式掛載此分區。
  這麼做的原因其實很簡單:刪除一個文件,就是將文件的Inode節點中的扇區指針清除,同時,釋放這些數據對應的數據塊,而真實的文件還存在磁盤分區中。 但是這些被刪除的文件不會一直存留在磁盤中,當這些釋放的數據塊被操作系統重新分配時,那些被刪除的數據就會被覆蓋。因此,在數據被誤刪除後,馬上卸載文 件所在分區可以降低數據塊中數據被覆蓋的風險,進而提高成功恢復數據的機率。

1,模擬數據誤刪除環境:
[root@localhost /]# mkdir mydata           
[root@localhost /]# mkdir disk                #建立一個掛載點
[root@localhost mydata]# dd if=/dev/zero of=/mydata/disk1 count=102400      #模擬磁盤分區,創建一個空設備
102400+0 records in
102400+0 records out
52428800 bytes (52 MB) copied, 0.334582 seconds, 157 MB/s
[root@localhost mydata]# mkfs.ext3 /mydata/disk1                #講空設備格式化爲ext3格式
[root@localhost ~]# mount -o loop /mydata/disk1 /disk/          #掛載設備到 /disk 目錄下
[root@localhost ~]# cd /disk/
[root@localhost disk]# cp /etc/profile /disk/
[root@localhost disk]# echo "ext3grep test" > ext3grep.txt
[root@localhost disk]# mkdir ext3grep
[root@localhost disk]# cp /etc/hosts ext3grep/
[root@localhost disk]# ls -al
總計 25
drwxr-xr-x  4 root root  1024 08-29 17:02 .
drwxr-xr-x 27 root root  4096 08-29 16:58 ..
drwxr-xr-x  2 root root  1024 08-29 17:02 ext3grep
-rw-r--r--  1 root root  14 08-29 17:02 ext3grep.txt
drwx------  2 root root 12288 08-29 17:00 lost+found
-rw-r--r--  1 root root  1345 08-29 17:01 profile
[root@localhost disk]# md5sum profile > /tmp/md5.txt                #獲取文件校驗碼(和恢復後的文件檢驗碼做對比,看數據是否改變)
[root@localhost disk]# md5sum ext3grep.txt >> /tmp/md5.txt 
[root@localhost ~]# rm -rf /disk/*                #模擬誤刪數據操作

2,卸載磁盤分區
[root@localhost ~]# umount /disk/

3,查詢恢復數據信息
[root@localhost ~]# ext3grep /mydata/disk1 --ls --inode 2
執行該命令後,ext3grep就開始搜索可以恢復的數據文件信息,輸出如下
..........
Inode 2 is directory "".
Directory block 433:
      .-- File type in dir_entry (r=regular file, d=directory, l=symlink)
      |      .-- D: Deleted ; R: Reallocated
Indx Next |  Inode  | Deletion time                Mode      File name
==========+==========+----------------data-from-inode------+-----------+=========
  0  1 d    2                            drwxr-xr-x  .
  1  end d    2                            drwxr-xr-x  ..
  2  3 d    11  D 1346231173 Wed Aug 29 17:06:13 2012  drwx------  lost+found
  3  end r    12  D 1346231173 Wed Aug 29 17:06:13 2012  rrw-r--r--  profile
  4  end r    13  D 1346231173 Wed Aug 29 17:06:13 2012  rrw-r--r--  ext3grep.txt
  5  end d  9161  D 1346231173 Wed Aug 29 17:06:13 2012  drwxr-xr-x  ext3grep

"ext3grep /mydata/disk1 --ls --inode 2"主要用於掃描當前文件系統下所有文件的信息,包括存在的和已經刪除的文件,其中含有 D 標識的就是已經被刪除的文件,
如果不記得被刪除的文件的名稱,可以通過這種方式來獲取要恢復的數據文件名稱。通過下面的方式可以獲取文件要恢復的路徑信息。

[root@localhost ~]# ext3grep /mydata/disk1 --dump-names
Running ext3grep version 0.10.2
Number of groups: 7
Minimum / maximum journal block: 447 / 4561
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1346230883 = Wed Aug 29 17:01:23 2012
Number of descriptors in journal: 65; min / max sequence numbers: 2 / 18
Loading disk1.ext3grep.stage2... done
ext3grep
ext3grep.txt
ext3grep/hosts
lost+found
profile

4,恢復單個文件
[root@localhost ~]# ext3grep /mydata/disk1 --restore-file ext3grep.txt
Running ext3grep version 0.10.2
Number of groups: 7
Minimum / maximum journal block: 447 / 4561
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1346230883 = Wed Aug 29 17:01:23 2012
Number of descriptors in journal: 65; min / max sequence numbers: 2 / 18
Loading disk1.ext3grep.stage2... done
Restoring ext3grep.txt

由上面的信息可知,被刪除的文件ext3grep.txt已經恢復成功。(在哪個目錄下執行ext3grep 命令,恢復的數據文件就在哪個目錄的RESTORED_FILES目錄下)

"--restore-file" 後面指定的恢復文件路徑,這個路徑應該是文件的相對路徑,這裏的相對路徑指的是相對指定設備的路徑,比如,設備 /mydata/disk1的掛載點是/disk,而ext3grep.txt文件就是在/disk目錄下,因此直接指定文件名就可以了,如果要恢復/disk/ext3grep/hosts 文件,那麼指定的參數應該是"ext3grep/hosts",如:
[root@localhost ~]# ext3grep /mydata/disk1 --restore-file ext3grep/hosts

通過 "--restore-inode" 參數,只需要指定文件對應的Inode值即可恢復文件。操作如下(其中inode值爲12的是profile文件):
[root@localhost ~]# ext3grep /mydata/disk1 --restore-inode 12

接下來可進入當前目錄的RESTORED_FILES目錄,驗證文件是否成功恢復。
恢復所有已經刪除的數據文件可用 "--restore-all" 參數,如下:
[root@localhost ~]# ext3grep /mydata/disk1 --restore-all
Running ext3grep version 0.10.2
Number of groups: 7
Minimum / maximum journal block: 447 / 4561
Loading journal descriptors... sorting... done
The oldest inode block that is still in the journal, appears to be from 1346230883 = Wed Aug 29 17:01:23 2012
Number of descriptors in journal: 65; min / max sequence numbers: 2 / 18
Loading disk1.ext3grep.stage2... done
Restoring ext3grep.txt
Restoring ext3grep/hosts
Restoring profile

"--restore-all" 參數將指定存儲設備中可以恢復的文件都恢復出來並保存到了RESTORED_FILES目錄中。"--restore-all" 參數對恢復大量數據文件是非常有用的。

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