1. 程式人生 > >Linux命令列刪除檔案恢復(Ubuntu)

Linux命令列刪除檔案恢復(Ubuntu)

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

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


1、extundelete的恢復原理

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

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

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

2、安裝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-0.2.4的依賴包,還需在官網中下載extundelete-0.2.4.tar.bz2  。

然後安裝extundelete-0.2.4,如下:

# tar jxvf extundelete-0.2.4.tar.bz2 

# cd extundelete-0.2.4 

# ./configure

# make 

# make install

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

下面就是找回被刪除檔案usb_camera.c的過程:

a、檢視檔案系統型別和分割槽

我的檔案系統型別為ext4,extundelete支援的型別為ext3/ext4 ,而ext3grep僅支援ext3檔案系統的恢復。使用者檔案系統在/dev/sdal根檔案系統中,被rm的檔案也在這裡。
b、執行:#  extundelete --inode 2 /dev/sda1
其中,--inode 2為查詢當前目錄下的檔案和被rm掉的檔案。先從根目錄查起。
被我刪除的檔案放在/win7files目錄下。
c、# extundelete --inode 1438977 /etv/sda1

win7files的節點號為1438977,--inode1438977就是檢視/win7file目錄下的檔案及被刪除的檔案。依次下去,直到找到usb_camera.c的節點號。執行程式碼如下:

#extundelete --inode 2 /dev/sda1(上一步已經執行過該命令)

# extundelete --inode 1438977 /etv/sda1

# extundelete --inode 1438977 /dev/sda1

# extundelete --inode 1453508 /dev/sda1

# extundelete --inode 1455584 /dev/sda1

 d、# extundelete --restore-inode 1455587 /dev/sda1

setup.sh的節點號為1455587,--restore-inode1455587就是恢復這個節點檔案。

e、檢視恢復結果

在根目錄下產生了一個RECOVERED_FILES目錄,恢復的檔案就在該目錄中。file.1455587主是要恢復的usb_camera.c。我將同一檔案恢復了兩次,所在這時有個file.1455587與file.1455587.v1。