Linux下使用extundelete恢复误删文件

时间:2021-11-18 09:34:47

extundelete是一套免費開源的工具軟體,在Linux系統下不小心誤刪檔案的話,如果是使用ext3或是ext4日誌式檔案系統,可以試試看這套工具來將誤刪的檔案快速救回來。

在操作電腦時,很難確保自己能在所有時候都保持腦袋清醒的狀態,有時可能一個恍神,不小心下錯什麼指令或是點到什麼不該點的按鈕,下一秒就發生悲劇了。誤刪檔案,是很多人都會在迷迷糊胡中犯下的錯誤,如果真的不幸誤刪了什麼重要的檔案,千萬不要慌張,應該避免繼續寫入資料到該檔案所在的分割區下,保持檔案還有救回來的可能。如果誤刪的檔案位於ext3或是ext4檔案系統中,立即使用extundelete來救回檔案的成功機率其實還算是蠻大的。

下載與安裝extundelete

建議在需要進行檔案救援前就先裝好這套工具,避免安裝這套工具時剛好將要救援的檔案內容覆蓋掉了。基於UbuntuLinux發行版可以使用apt-get直接下載安裝,指令如下:

sudo apt-get install extundelete

Linux下使用extundelete恢复误删文件

extundelete的使用方法

以下將分為救援單一檔案以及一個目錄來實地操作。

救援單一檔案

假設我們要救回被刪除的「/home/magiclen/Music/magiclen.org_Oracion.mp3」,首先需知道「magiclen.org_Oracion.mp3」檔案所在目錄的inode,可用以下指令查看:

ls -id /home/magiclen/Music/

Linux下使用extundelete恢复误删文件

查出「/home/magiclen/Music/」目錄的inode是262204後,接著還要找出這個目錄位在哪個dev裝置路徑下,可用以下兩個指令來查看:

df /home/magiclen/Music/

lsblk

Linux下使用extundelete恢复误删文件

從上圖可以看到「/home/magiclen/Music/」目錄的掛載根目錄是在「/」,對應的dev裝置路徑是「/dev/sda1」。接著使用以下指令,透過extundelete來檢查在「/dev/sda1」裝置下,inode號碼為262204的目錄中的檔案狀態,會列出哪些檔案目錄已被刪除。要救援的檔案或是目錄名稱,必須在清單上才有可能成功救援。

sudo extundelete /dev/sda1 --inode 262204

由於「/dev/sda1」還是掛載(Mount)的狀態,因此extundelete會出現一些警告訊息,如果有辦法將「/dev/sda1」卸載(Unmount),還是先卸載一下再用extundelete比較好。

Linux下使用extundelete恢复误删文件

清單列出後,將成功找到「magiclen.org_Oracion.mp3」,並看到其「Deleted Status」為「Deleted」。

Linux下使用extundelete恢复误删文件

再來就可以開始救援「magiclen.org_Oracion.mp3」檔案了。這裡要注意到extundelete會將救援回來的檔案放在目前終端機工作目錄下的「RECOVERD_FILES」目錄中,因為有寫入檔案的動作,因此最好不要將工作目錄設置在被救援檔案所在的裝置上,也就是「/dev/sda1」,避免使用到與被救援檔案同樣的inode,造成檔案救援失敗,若「/dev/sda1」已是卸載的狀態則無須擔心這個問題。使用以下指令,即可救援「magiclen.org_Oracion.mp3」。

sudo extundelete /dev/sda1 --restore-file /home/magiclen/Music/magiclen.org_Oracion.mp3

這串指令要注意到的是,「--resotre-file」之後接的要救援的檔案路徑是從裝置掛載點開始算起的,而不是檔案的絕對路徑。如果「/dev/sda1」的掛載是在「/home/magiclen/」,那麼「--resotre-file」之後接的路徑便是「/Music/magiclen.org_Oracion.mp3」。

Linux下使用extundelete恢复误删文件

使用extundelete成功救援檔案後,會將救出來的檔案放在目前終端機工作目錄下的「RECOVERD_FILES」目錄中。

Linux下使用extundelete恢复误删文件

File Verifier X檢查救援前和救援後的檔案,確實完全一致。

Linux下使用extundelete恢复误删文件

Linux下使用extundelete恢复误删文件

救援整個目錄

使用extundelete救援整個目錄的方式類與以上救援單一檔案的方式雷同,僅僅只是將救援時的指令「--resotre-file」參數改為「--resotre-director」。

假設我們要救回被刪除的「/mydata/myfolder」目錄,首先需知道「myfolder」目錄之上層目錄的inode,可用以下指令查看:

ls -id /mydata

Linux下使用extundelete恢复误删文件

查出「/mydata」目錄的inode是2後,接著還要找出這個目錄位在哪個dev裝置路徑下,可用以下兩個指令來查看:

df /mydata

lsblk

Linux下使用extundelete恢复误删文件

從上圖可以看到「/mydata」目錄的掛載根目錄 即是在「/mydata」,對應的dev裝置路徑是「/dev/sdb」。接著使用以下指令,透過extundelete來檢查在「/dev/sdb」裝置下,inode號碼為2的目錄中的檔案狀態,會列出哪些檔案目錄已被刪除。要救援的檔案或是目錄名稱,必須在清單上才有可能成功救援。

sudo extundelete /dev/sdb --inode 2

Linux下使用extundelete恢复误删文件

清單列出後,將成功找到「myfolder」,並看到其「Deleted Status」為「Deleted」。

Linux下使用extundelete恢复误删文件

再來就可以開始救援「myfolder」檔案了,輸入以下指令:

sudo extundelete /dev/sdb --resotre-director /myfolder

Linux下使用extundelete恢复误删文件

Linux下使用extundelete恢复误删文件

救援出來的檔案會放置在工作目錄下的「RECOVERD_FILES」目錄中。由於要救援的目錄可能包含多個檔案,因此在救援目錄時很可能會發現有些inode已經無法再被還原回來了,也就是不能完整地把所有檔案都給救回來。extundelete雖然可以快速地救援檔案,但它並不能確保檔案一定都能救得回來,因此定期備份重要檔案還是最應該要做的!