如何恢復(fù)Linux中的誤刪文件
寫在前面的話
在開始教程之前我有必要提醒大家,使用窗口管理器(GUI)刪除文件和使用命令行工具(CLI)刪除文件這兩種方法之間是有區(qū)別的。
當(dāng)我們使用窗口管理器來(lái)刪除文件時(shí),我們僅僅只是將文件從某個(gè)目錄移動(dòng)到了另一個(gè)目錄中(回收站)。在這種情況下,唯一得到更新的就是你文件系統(tǒng)索引節(jié)點(diǎn)(inode)的元數(shù)據(jù)信息,例如被刪除文件的時(shí)間戳、文件所占存儲(chǔ)區(qū)塊和擴(kuò)展屬性等數(shù)據(jù)。你可以使用tune2fs(調(diào)整和查看ext2/ext3文件系統(tǒng)的文件系統(tǒng)參數(shù))來(lái)查看文件系統(tǒng)的索引節(jié)點(diǎn)信息,在命令行工具中輸入下列指令:
- sudo tune2fs -l /dev/sda1 |grep -i inode
運(yùn)行之后,你將會(huì)得到類似下方所給出的示例信息:
- $ 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
文件刪除知多少
當(dāng)你使用SSH遠(yuǎn)程訪問(wèn)你的計(jì)算機(jī)時(shí),你可以在目錄“~/.local/share/Trash”中看到所有被刪除的文件。這樣一來(lái),我們就可以直接使用GUI窗口來(lái)還原被刪除的文件,非常的簡(jiǎn)單。但是,當(dāng)你使用“rm”命令來(lái)刪除某個(gè)文件時(shí),這個(gè)文件可就不僅僅是被移動(dòng)到一個(gè)隱藏目錄那么簡(jiǎn)單了。這個(gè)時(shí)候,你需要通過(guò)更新索引節(jié)點(diǎn)元數(shù)據(jù)來(lái)通知操作系統(tǒng),這份文件此前所占用的那部分磁盤空間已經(jīng)可以繼續(xù)使用了,操作系統(tǒng)現(xiàn)在可以直接將其他的文件寫入這部分存儲(chǔ)空間中。接下來(lái),操作系統(tǒng)可能會(huì)在一個(gè)小時(shí)之后就覆蓋這部分磁盤空間,但也有可能會(huì)在兩個(gè)月之后才會(huì)使用這部分存儲(chǔ)區(qū)域,具體將取決于操作系統(tǒng)以及文件系統(tǒng)的設(shè)置。
當(dāng)你在移除(安全刪除)你的文件時(shí),也就相當(dāng)于你在讓文件系統(tǒng)刪除這份文件,然后再向這份文件此前所占用的那部分存儲(chǔ)空間寫入隨機(jī)數(shù)據(jù)。對(duì)于“安全刪除”的情況來(lái)說(shuō),我們通常是無(wú)法恢復(fù)被刪除文件的。所以***的方法就是當(dāng)你意識(shí)到你誤刪了某一份文件時(shí),就立刻開始進(jìn)行文件恢復(fù)工作。你等的時(shí)間越久,成功恢復(fù)誤刪文件的可能性也就越低。
如何恢復(fù)Linux平臺(tái)下的誤刪文件?
目前我們有很多種方法可以恢復(fù)Linux平臺(tái)上的誤刪文件,其中主流的兩個(gè)選項(xiàng)就是TestDisk/PhotoRec和extundelete。
PhotoRec是TestDisk套件的其中一個(gè)組件,我們可以用它來(lái)恢復(fù)單獨(dú)的文件。當(dāng)然了,TestDisk的功能更加強(qiáng)大,它可以幫助我們恢復(fù)文件系統(tǒng)分區(qū)或磁盤啟動(dòng)扇區(qū)。TestDisk支持目前主流的文件系統(tǒng),而且目前主流的操作系統(tǒng)平臺(tái)都可以使用這款工具。在這篇文章中我們主要以PhotoRec為例來(lái)進(jìn)行講解。
PhotoRec-【工具下載】
PhotoRec 是一款用于恢復(fù)硬盤和光盤中丟失的視頻、文檔、壓縮包等文件的數(shù)據(jù)恢復(fù)工具。除此之外,它還可以從數(shù)碼相機(jī)的SD存儲(chǔ)卡中恢復(fù)丟失的圖片。因此,該軟件被命名為PhotoRecovery這個(gè)名字。PhotoRec可以忽略文件系統(tǒng)的類型,并直接從介質(zhì)底層恢復(fù)數(shù)據(jù)。因此,在介質(zhì)的文件系統(tǒng)受到嚴(yán)重破壞或被重新格式化后,它同樣能夠進(jìn)行數(shù)據(jù)恢復(fù)。PhotoRec是一款開源、跨多平臺(tái)的免費(fèi)數(shù)據(jù)恢復(fù)軟件,受GNUGeneral Public License (GPLV v2+) 的保護(hù)。
重要提示:一旦發(fā)現(xiàn)丟失或意外刪除了某個(gè)圖片、文件之后,請(qǐng)不要繼續(xù)往該存儲(chǔ)設(shè)備或磁盤寫入新的文件,否則您可能會(huì)覆蓋原來(lái)的數(shù)據(jù)。這意味著您在使用PhotoRec時(shí),您千萬(wàn)不要將恢復(fù)的文件寫入到原始數(shù)據(jù)所在的同一分區(qū)。
PhotoRec支持的操作系統(tǒng)平臺(tái)
- -DOS/Win9x
- -Windows NT 4/2000/XP/2003/Vista
- -Linux
- -FreeBSD, NetBSD, OpenBSD
- -Sun Solaris
- -Mac OS X
PhotoRec支持的文件系統(tǒng)
- -FAT
- -NTFS
- -exFAT
- -ext2/ext3/ext4
- -HFS+
一般情況下,PhotoRec的文件恢復(fù)過(guò)程如下圖所示:
extundelete-【工具下載】
除了PhotoRec之外,我們也可以選擇使用extundelete來(lái)完成數(shù)據(jù)恢復(fù)工作。extundelete針對(duì)的是ext3和ext4文件系統(tǒng),所以相較于TestDisk而言,extundelete的使用范圍就有一定的限制了。
通常情況下,在進(jìn)行文件恢復(fù)工作的時(shí)候,我們要先將文件系統(tǒng)重新掛載,然后給它分配只讀權(quán)限。完成之后,再將恢復(fù)的文件寫入另外一個(gè)文件系統(tǒng)中,這樣可以避免原始數(shù)據(jù)所在的存儲(chǔ)區(qū)域被覆蓋。使用extundelete來(lái)恢復(fù)文件的操作步驟非常的簡(jiǎn)單,我們只需要選擇相應(yīng)的文件系統(tǒng),然后運(yùn)行下面這條命令即可:
- extundelete /dev/sda1 --restore-all
總結(jié)
數(shù)據(jù)恢復(fù)是一項(xiàng)非常復(fù)雜的工作,而且由于操作系統(tǒng)、文件系統(tǒng)以及人為因素的干擾,我們所恢復(fù)出來(lái)的文件很有可能會(huì)出現(xiàn)數(shù)據(jù)丟失的情況。所以當(dāng)你發(fā)現(xiàn)你誤刪了文件時(shí),請(qǐng)立刻停止使用你的電腦,并且盡快進(jìn)行數(shù)據(jù)恢復(fù)工作,以免你的誤刪文件被其他的數(shù)據(jù)覆蓋掉。