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