Linux 誤刪檔案恢復命令及方法

前言


無論在哪個系統中,刪除檔案都是必須謹慎的操作。

因為如果不小心刪除了重要檔案,就會導致個人或公司出現重大的損失。

類似於windows系統誤刪了檔案,可以使用一些軟體進行恢復操作。Linux也是有幾款軟體可以做到誤刪恢復的。

注意事項:雖然有軟體可以對誤刪的資料進行恢復,但是完全恢復資料的概率並不是百分百的。

因此,使用rm命令刪除檔案的時候,一定要小心;重要的資料一定要有備份;並且恢復刪除的資料前,刪除檔案的目錄內不能往進存放新東西,否則覆蓋掉的資訊無法找回。

下面介紹的就是對Linux中誤刪檔案的恢復操作。

1、lsof


原理:

這個命令實際上並不能直接用來恢復檔案,不過它可以列出被各種程序開啟的檔案資訊。

配合其他命令,從/proc目錄下的資訊中恢復“檔案已刪除,但程序仍保持開啟該檔案的狀態”的檔案。

/proc目錄是掛載的是在記憶體中所對映的一塊區域,當我們對這些檔案進行讀取和寫入時,實際上是在從記憶體中獲取相關資訊。

因此,當我們對檔案進行讀取或寫入時(即有程序正使用檔案時),哪怕硬碟中的該檔案已刪除,還可以從記憶體中的資訊恢復檔案。

注意:

必須以 root 使用者的許可權執行, 因為lsof 需要訪問核心記憶體和各種檔案。

只能恢復“檔案已刪除,但程序仍保持開啟該檔案的狀態”的檔案。

如果誤刪了目錄,目錄中的其他檔案未被程序開啟,沒有進行使用的檔案將無法使用此方法恢復。

lsof輸出資訊的意義:

COMMAND 程序的PID(程序識別符號)

USER 程序所有者

FD 用來識別該檔案(檔案描述符)

DEVICE 指定磁碟的名稱

SIZE 檔案的大小

NODE 索引節點(檔案在磁碟上的標識)

NAME 開啟檔案的確切名稱

最常用引數:

-c 顯示某程序現在開啟的檔案

-p 顯示哪些檔案被某pid程序開啟

-g 顯示歸屬某gid的程序情況

-d 顯示目錄下被程序開啟的檔案

-d 顯示使用fd為4的程序

-i:80 顯示開啟80埠的程序

恢復檔案操作


環境:

在/mnt下有一些檔案,其中一個檔案train.less正在被檢視,然後另一個終端將其刪除

【1】lsof檢視


檢視正在使用刪除檔案的程序號

lsof /mnt

【2】恢復


切換到/proc下,刪除檔案對應的程序的pid下的檔案描述符中的目錄中;將對應的內容重定向或cp到其他檔案中

  • 重點關注:PID 與 FD

cd /proc/31284/fd/

cat 4 > /mnt/ferris_train.less

2、extundelete


原理:

使用儲存在分割槽日誌中的資訊,嘗試恢復已從ext3或ext4的分割槽中刪除的檔案

優點

相比於ext3grep只能恢復ext3檔案系統的檔案,其適用範圍更廣,恢復速度更快

extundelete官方地址(官方文件):

http://extundelete.sourceforge.net

extundelete下載地址:

http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

(最新版本的extundelete是0.2.4,於2013年1月釋出)

注意:

  • 在資料刪除之後,要解除安裝被刪除資料所在的磁碟或是分割槽
  • 如果是系統根分割槽遭到誤刪除,就要進入單使用者模式,將根分割槽以只讀的方式掛載,儘可能避免資料被覆蓋
  • 資料被覆蓋後無法找回
  • 恢復仍有一定的機率失敗,平時應對重要資料作備份,小心使用rm

安裝


1、依賴安裝

centos安裝操作

yum install e2fsprogs-devel e2fsprogs* gcc*

ubuntu安裝操作

apt-get install build-essential e2fslibs-dev e2fslibs-dev

2、編譯安裝

wget http://downloads.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

tar xf extundelete-0.2.4.tar.bz2

cd extundelete-0.2.4

./configure

make

make install

cd /root/extundelete-0.2.4/src

extundelete -v

執行make命令會在src目錄下生成extundelete可執行檔案,可在此直接執行恢復命令。

執行make install會將程式安裝在/usr/local/bin/下

恢復檔案操作

執行extundelete命令的當前目錄必須是可寫的。

1、檢視要恢復檔案的分割槽的檔案系統

df -Th

2、對要恢復檔案的分割槽解除掛載

umount /mnt

3、檢視可以恢復的資料

指定誤刪檔案的分割槽進行查詢

  • 最後一列標記為Deleted的檔案,即為刪除了的檔案

extundelete /dev/vdb1 --inode 2 (根分割槽的inode值是2)

4、恢復單個目錄

指定要恢復的目錄名

如果是空目錄,則不會恢復

extundelete /dev/vdb1 --restore-directory ferris

當執行恢復檔案的命令後,會在執行命令的當前的目錄下生成RECOVERED_FILES目錄,恢復的檔案都會放入此目錄中。如未生成目錄,即為失敗。

5、恢復單個檔案

指定要恢復的檔名

  • 如果幾k大小的小檔案,有很大機率恢復失敗

extundelete /dev/vdb1 --restore-file openssh-7.7p1.tar.gz

6、恢復全部刪除的檔案

無需指定檔名或目錄名,恢復全部刪除的資料

extundelete /dev/vdb1 --restore-all

作者:漠效

http://r6d.cn/JzNf