Linux檔案恢復利器 ext3grep與extundelete

lhrbest發表於2019-08-30

Linux檔案恢復利器 ext3grep與extundelete

Linux檔案恢復利器 ext3grep與extundelete extundelete-0.2.4.tar.bz2

Linux檔案恢復利器 ext3grep與extundelete ext3grep-0.10.2.tar.gz

https://www.cnblogs.com/lazyfang/p/7699994.html


ext3grep依賴e2fsprogs-devel和e2fsprogs-lib包,因此要先安裝它們才能編譯ext3grep。

# tar zxvf ext3grep-0.10.2.tar.gz -C /usr/src/

# cd /usr/src/ext3grep-0.10.2/

# ./configure

# make

# make install


使用ext3grep檢視檔案系統

• ext3grep可以幫助我們通過檔案系統底層讀取資料。

例如,使用--ls --inode的引數組合,我們就可以查

看指定檔案或目錄的資訊了。

# ext3grep /dev/sdb1 --ls --inode 2


使用ext3grep恢復檔案

• 使用--restore-inode的引數組合,我們就可以恢復

指定的檔案。

# ext3grep /dev/sdb1 --restore-inode 57146


https://blog.csdn.net/exitgogo/article/details/41983355



介紹兩款 Linux 檔案恢復工具, ext3grep extundelete ,可能在關鍵時刻會有所幫助。 ext3grep 僅對 ext3 檔案系統有效, extundelete ext3 ext4 檔案系統都有效

 

一 實驗環境
軟體環境
vmware workstation 9.0.1
ubuntu server 12.10 
ext3grep 0.10.1
extundelete 0.2.4
 
外掛磁碟
這裡外掛 2 個磁碟來模擬需要恢復的裝置。可以通過兩種方式實現
第一種:在虛擬機器上新增 2 塊虛擬磁碟,具體方法略
第二種:通過 dd 命令用檔案模擬塊裝置
簡單介紹下第二種方式的命令:
cd /home 
dd if=/dev/zero of=sdc1 bs=1M count=100    #塊大小為1M,數量為100,也就是100M 
mkfs.ext3 /home/sdc1                     #ext3檔案系統格式化 
mount /home/sdc1 /sdc

本例項採用第一種方式新增 2 塊磁碟,新增後一塊 ext3 格式化,另一塊 ext4 格式化,然後掛載。具體操作過程省略

 

mount 檢視下 
/dev/sdb1 on /sdb type ext4 (rw) 
/dev/sdc1 on /sdc type ext3 (rw)

 

配置安裝源列表
ubuntu 配置好安裝源列表後,安裝軟體非常方便,以下是經過測試有效的安裝源列表:
root@ubuntu-test:/home# cat /etc/apt/sources.list 
deb http://ubuntu.cn99.com/ubuntu/ quantal main restricted universe multiverse deb http://ubuntu.cn99.com/ubuntu/ quantal-updates main restricted universe multiverse deb http://ubuntu.cn99.com/ubuntu/ quantal-security main restricted universe multiverse deb http://ubuntu.cn99.com/ubuntu/ quantal-backports main restricted universe multiverse deb http://ubuntu.cn99.com/ubuntu-cn/ quantal main restricted universe multiverse

 

二、 ext3grep 恢復工具
安裝 ext3grep
ubuntu 伺服器上可以使用以下命令直接安裝 ext3grep ,使用這種方式可以直接安裝相關的依賴關係包,真是太省心了。
aptitude install ext3grep
或者直接去官網下載原始碼包安裝
官網下載地址:https://code.google.com/archive/p/ext3grep/downloads
編譯安裝需要先安裝依賴
apt-get install e2fslibs-dev  # Centos上用yum install e2fsprogs-devel

如果不安裝依賴會報錯:

checking for compiler with PCH support... yes
checking for special C compiler options needed for large files... no
checking for _FILE_OFFSET_BITS value needed for large files... no
Package ext2fs was not found in the pkg-config search path.
Perhaps you should add the directory containing `ext2fs.pc'
to the PKG_CONFIG_PATH environment variable
No package 'ext2fs' found
checking ext2fs/ext2_fs.h usability... no
checking ext2fs/ext2_fs.h presence... no
checking for ext2fs/ext2_fs.h... no
checking ext2fs/ext2fs.h usability... no
checking ext2fs/ext2fs.h presence... no
checking for ext2fs/ext2fs.h... noconfigure: error: Missing headers. Please install the package e2fslibs-dev from e2fsprogs, or http://e2fsprogs.sourceforge.net for the upstream tar-ball.

然後編譯安裝軟體

tar xvf ext3grep-0.10.1.tar.gz 
cd ext3grep-0.10.1./configuremake && make install
 
安裝完後,可以用以下命令驗證下:

2 ext3grep 查詢被刪除的檔案
ext3grep --ls --inode 2 /dev/sdc1

注意:這裡只能看到 /dev/sdc1  根目錄下的檔案與資料夾,不能顯示目錄下檔案
顯示目錄 vmware-tools-distrib 下的檔案,列表這個目錄節點號
ext3grep --ls --inode 8193 /dev/sdc1

以上紅線條標註的表示已經被刪除掉的檔案或目錄
如果想要顯示出所有被刪除檔案的名字,用以下命令:
ext3grep --ls --dump-names /dev/sdc1 > filename.txt      #將顯示結果放在一個檔案中

 

恢復單個檔案
恢復某個指定的檔案,命令如下:
ext3grep --restore-file VMwareTools-9.2.2-893683.tar.gz /dev/sdc1

然後在當前目錄 RESTORED_FILES 目錄下找到被恢復的檔案

如果是恢復目錄下面的指定檔案要加上相對路徑
ext3grep --restore-file vmware-tools-distrib/INSTALL.log /dev/sdc1
 
恢復整個裝置上的檔案
ext3grep --restore-all /dev/sdc1

 

恢復指定時間點之前或之後的所有檔案
ext3grep --restore-all --after 1365661200 /dev/sdc1 #恢復Apr 11 14:20 2013之後被刪檔案 
ext3grep --restore-all --before 1365661200 /dev/sdc1   #恢復Apr 11 14:20 2013之前被刪檔案

 

RHEL Ubuntu 上測試,發現 after before 這兩個引數好像沒起作用,具體啥原因沒暫時還沒有找到。
 
三、 extundelete 恢復工具
1 extundelete 軟體安裝
下載軟體
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
安裝 e2fsprogs e2fslibs
sudo apt-get install e2fsprogs
安裝 e2fslibs-dev
sudo apt-get install e2fslibs-dev
安裝 C++
sudo apt-get install build-essential
安裝 extundelete
tar -jxvf extundelete-0.2.4.tar.bz2 
cd extundelete-0.2.4 ./configure --prefix=/usr/local/extundelete 
make && make install
驗證是否安裝成功
cd /usr/local/extundelete/bin 
./extundelete -v

檢視被刪除檔案

標記為”Deleted”的檔案則是被刪除的檔案
 
恢復指定的檔案
./extundelete --restore-file aaa /dev/sdb1

 
完全恢復裝置上檔案
./extundelete --restore-all /dev/sdb1
 
恢復指定的時間點後被刪檔案
指定一個時間點
date -d "Apr 11 14:30 2013" +%s 
1365661800
恢復這個時間點後的檔案
./extundelete --restore-all --after “1365661800” /dev/sdb1

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



一個同事不小心使用 rm -rf命令誤刪了自己的程式碼,這意味著一個月的工作丟失了(一個月沒有備份過程式碼,看來他以前一定沒經歷計算機崩潰的災難)。我們知道 rm命令無法撤銷,那麼有沒有辦法恢復這個被刪除的目錄以及其中的全部檔案呢?

在網上搜尋了一下,找到一個名為ext3grep的工具,以及它的作者的一篇文章(見 參考文件)。在這個工具出現以前,恢復ext3檔案系統中被刪除的資料是不可能的。因為ext3檔案系統不同於ext2檔案系統,它在刪除一個檔案後,會把檔案inode結點中扇區指標清為0,而這讓檔案恢復看起來不太可能。不過,正如ext3grep工具作者所說的,因為ext3是一個日誌型的檔案系統,通過分析日誌資訊,有很大的可能重新解析出塊指標,從而恢復出目錄和檔案。

以下是恢復檔案所採用的步驟,希望對大家有幫助。

[ 解除安裝被誤刪除檔案所在的分割槽,或以只讀方式mount ]

當你發現你誤刪除了檔案後,要做的第一件事是馬上解除安裝被誤刪除檔案所在的分割槽,或者以只讀的方式來掛載該分割槽。原因大家都很清楚,檔案被刪除後,檔案中的資料還存在磁碟上,除非存放這些資料的資料塊又被作業系統分配出去了。我們這一步就是儘量降低資料塊中資料被覆蓋的風險,以提高恢復資料成功的比率。

如果被誤刪的檔案在根分割槽,那麼你最好重啟計算機,進入單使用者模式,以只讀的方式掛載根分割槽,然後再進行恢復。要進行單使用者模式,請看Grub中進入單使用者模式的方法。

進入單使用者模式後,根分割槽還是以讀寫方式mount的,用下面的命令,把掛載方式由讀寫(rw)改為只讀(ro):

mount -o ro,remount /

如果被刪除的檔案不是根分割槽,也可以用unmount的方式將該分割槽解除安裝。假設檔案在分割槽/dev/sda3中,該分割槽掛載到/home,那麼我們用下面的命令來解除安裝:

    umount /dev/sda3

或者命令:

    umount /home

當然,在解除安裝前要保證沒有程式在訪問該分割槽,否則解除安裝會失敗。所以,一般推薦進入單使用者模式來恢復檔案。

[ 安裝ext3grep工具 ]

恢復的第一步當然是安裝ext3grep工具。對於Debian/ Ubuntu使用者來說,安裝ext3grep工具非常簡單,只需要執行下面的命令:

aptitude install ext3grep

不過公司所使用的Linux版本是 CentOS,所以需要自己手工編譯ext3grep工具,其實這也很簡單,首先到 ext3grep主頁上下載它的原始碼,然後用下面的命令解壓/編譯/安裝這個工具。

tar zxf ext3grep-0.10.1.tar.gz
cd /home//ext3grep-0.10.1
./configure
make
make install

注:在網上搜了一下,ext3grep也有rpm包可以下載,比如,RHEL/CentOS的RPM包可以在 這裡下載。其它Linux發行版的RPM也可以在 rpmfind.net上找到。

前面說過,發現誤刪除後,要解除安裝掉該分割槽,或者進入單使用者模式。所以最好在另外一臺計算機上來編譯或安裝這個工具,然後把ext3grep這個可執行檔案拷貝到U盤中再進行恢復。這也正是所用的方法,因為同事的檔案恰好在根分割槽中。如果你也是這種情況,那麼在用RPM包安裝時,則需要把RPM包安裝到你你指定的目錄中,然後再把它拷貝到U盤中。

U盤裡只需要拷貝ext3grep一個檔案即可,它不需要動態載入庫就可以執行。接下來把U盤插到待恢復的電腦上,用下面的命令載入:

mount -t vfat /dev/sdb1 /mnt

把上面的裝置號和安裝點換成你自己的。如果你的裝置檔案還不存在的話(這也剛好是的情況),用 mknod命令建立一下吧。

現在,我們可以開始檔案恢復了。

[ 恢復檔案 ]

在開始恢復前,選擇一個目錄來存放被恢復的檔案。ext3grep程式會在當前目錄下建立一個名為 RESTORED_FILES的目錄來存放被恢復的檔案。因此在執行ext3grep命令前,先要切換到一個你可讀寫的目錄中。

對來講,因為進入了單使用者模式,並且將根分割槽設成了只讀,那麼只能把恢復出來的檔案放在U盤中了。因此,先 cd /mnt進入U盤目錄。

如果你有幸記得你誤刪除的檔名及其路徑的話,就可以直接用下面的命令進行恢復了:

    ext3grep /dev/your-device --restore-file path/to/your/file/filename

需要注意的是,上面的檔案路徑,是在該分割槽上檔案路徑。假設我們要恢復 /dev/sda3分割槽上檔案,這個分割槽原來的安裝點是 /home,現在想恢復檔案 /home//vi/tips.xml,那麼輸入的命令應該是:

    ext3grep /dev/sda3 --restore-file /vi/tips.xml

如果你忘記了檔名,或者你誤刪除的是一個目錄而你無法記全該目錄中的檔案,你可以先用下面的命令查詢一下檔名:

ext3grep /dev/sda3 --dump-names | tee filename.txt

上面的命令把ext3grep命令的輸出記錄到檔案 filename.txt中,你可以慢慢檢視,或者使用 grep命令過濾出你需要的資訊。

當你知道了目錄/檔案的資訊後,就可以用上面說的命令進行恢復了。

在ext3grep命令中有一個 –depth引數,應該是用來恢復目錄以及其中的所有子目錄和檔案的,不過 用這個引數無法恢復出任何檔案,只好採用笨辦法,寫了個指令碼,一個個檔案的恢復。

經過幾個小時的折磨(中間走了一些彎路),同事的檔案終於恢復成功了!







About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( xiaomaimiaolhr)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-08-01 06:00 ~ 2019-08-31 24:00 在西安完成

● 最新修改時間:2019-08-01 06:00 ~ 2019-08-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( xiaomaimiaolhr)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2655567/,如需轉載,請註明出處,否則將追究法律責任。

相關文章