寫在前面的話
在開始教學之前我有必要提醒大家,使用視窗管理器(GUI)刪除檔案和使用命令列工具(CLI)刪除檔案這兩種方法之間是有區別的。
當我們使用視窗管理器來刪除檔案時,我們僅僅只是將檔案從某個目錄移動到了另一個目錄中(回收站)。在這種情況下,唯一得到更新的就是你檔案系統索引節點(inode)的元資料訊息,例如被刪除檔案的時間戳記、檔案所佔儲存區塊和擴充屬性等資料。你可以使用tune2fs(調整和查看ext2/ext3檔案系統的檔案系統參數)來查看檔案系統的索引節點信息,在命令列工具中輸入下列指令:
sudo tune2fs -l /dev/sda1 |grep -i inode
運行之後,你將會得到類似下方所給出的範例資訊:
$ sudo tune2fs -l /dev/sda1 |grep -i inode Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recoveryextent flex_bg sparse_super large_file huge_file uninit_bg dir_nlinkextra_isize Inode count: 30007296 Free inodes: 29382378 Inodes per group: 8192 Inode blocks per group: 512 First inode: 11 Inode size: 256 Journal inode: 8 First orphan inode: 21628027 Journal backup: inode blocks
檔案刪除知多少
當你使用SSH遠端存取你的電腦時,你可以在目錄「~/.local/share/Trash」中看到所有被刪除的檔案。這樣一來,我們就可以直接使用GUI視窗來還原被刪除的文件,非常的簡單。但是,當你使用「rm」指令來刪除某個檔案時,這個檔案可就不僅僅是被移動到一個隱藏目錄那麼簡單了。這時候,你需要透過更新索引節點元資料來通知作業系統,這份檔案先前所佔用的那部分磁碟空間已經可以繼續使用了,作業系統現在可以直接將其他的檔案寫入這部分儲存空間。接下來,作業系統可能會在一個小時之後就覆蓋這部分磁碟空間,但也有可能會在兩個月之後才會使用這部分儲存區域,這將取決於作業系統以及檔案系統的設定。
當你在移除(安全刪除)你的文件時,也就相當於你在讓文件系統刪除這份文件,然後再向這份文件此前所佔用的那部分存儲空間寫入隨機數據。對於「安全刪除」的情況來說,我們通常是無法恢復被刪除檔案的。所以最好的方法就是當你意識到你誤刪了某一份文件時,就立刻開始進行文件恢復工作。你等的時間越久,成功恢復誤刪檔案的可能性就越低。
如何恢復Linux平台下的誤刪文件?
目前我們有很多種方法可以恢復Linux平台上的誤刪文件,其中主流的兩個選項就是TestDisk/PhotoRec和extundelete。
PhotoRec是TestDisk套件的其中一個元件,我們可以用它來恢復單獨的檔案。當然了,TestDisk的功能更強大,它可以幫助我們恢復檔案系統分割區或磁碟啟動磁區。 TestDisk支援目前主流的檔案系統,目前主流的作業系統平台都可以使用這款工具。在這篇文章中我們主要以PhotoRec為例來進行講解。
PhotoRec-【工具下載】
PhotoRec 是一款用於恢復硬碟和光碟中遺失的影片、文件、壓縮套件等檔案的資料復原工具。除此之外,它還可以從數位相機的SD記憶卡中恢復遺失的圖片。因此,該軟體被命名為PhotoRecovery這個名字。 PhotoRec可以忽略檔案系統的類型,並直接從媒體底層復原資料。因此,在媒體的檔案系統受到嚴重破壞或被重新格式化後,它同樣能夠進行資料復原。 PhotoRec是一款開源、跨多平台的免費資料復原軟體,受GNUGeneral Public License (GPLV v2+) 的保護。
重要提示:一旦發現遺失或意外刪除了某個圖片、文件之後,請不要繼續往該儲存裝置或磁碟寫入新的文件,否則您可能會覆蓋原來的資料。這表示您在使用PhotoRec時,您千萬不要將復原的檔案寫入到原始資料所在的相同分割區。
PhotoRec支援的作業系統平台
-DOS/Win9x -Windows NT 4/2000/XP/2003/Vista -Linux -FreeBSD, NetBSD, OpenBSD -Sun Solaris -Mac OS X
PhotoRec支援的檔案系統
-FAT -NTFS -exFAT -ext2/ext3/ext4 -HFS+
一般情況下,PhotoRec的檔案復原流程如下圖所示:
,我們也可以選擇使用extundelete來完成資料復原工作。 extundelete針對的是ext3和ext4檔案系統,所以相較於TestDisk而言,extundelete的使用範圍就有一定的限制了。 通常情況下,在進行檔案復原工作的時候,我們要先將檔案系統重新掛載,然後給它分配只讀權限。完成之後,再將恢復的檔案寫入另一個檔案系統中,這樣可以避免原始資料所在的儲存區域被覆蓋。使用extundelete來恢復檔案的操作步驟非常的簡單,我們只需要選擇對應的檔案系統,然後執行下面這條指令:extundelete /dev/sda1 --restore-all總結
資料復原是一項非常複雜的工作,而且由於作業系統、檔案系統以及人為因素的干擾,我們所復原的檔案很有可能會出現資料遺失的情況。所以當你發現你誤刪了檔案時,請立刻停止使用你的電腦,並且盡快進行資料復原工作,以免你的誤刪檔案被其他的資料覆蓋掉。