呂秀鑒
摘要:我們在操作電腦時,常常會碰到前一秒鐘徹底刪除了一個文件,下一秒鐘又意識到這個文件很重要,非要把文件找回來的情況,假如這個文件恰巧存儲在一個FAT文件系統(tǒng)組織管理的磁盤分區(qū)下,事情恐怕就沒有那么簡單了。本文針對在FAT文件系統(tǒng)下被刪除文件的恢復(fù)方法進行了可行性研究。
關(guān)鍵詞:FAT文件系統(tǒng) 數(shù)據(jù)恢復(fù) 文件目錄表 文件分配表
中圖分類號:TP393 文獻標識碼:A 文章編號:1007-9416(2016)12-0102-01
FAT文件系統(tǒng)最早于上世紀70年代隨著MS-DOS操作系統(tǒng)問世,它廣泛應(yīng)用于微軟所有非NT內(nèi)核的操作系統(tǒng)之上。最終版本為FAT32文件系統(tǒng),目前仍大量存在于老式家用機平臺或者U盤等小容量移動存儲設(shè)備上。相對于NTFS文件系統(tǒng),F(xiàn)AT文件系統(tǒng)在數(shù)據(jù)安全性、系統(tǒng)健壯性和容錯等方面都沒有相應(yīng)的措施,自身設(shè)計存在局限性。例如誤刪除、誤格式化這樣的操作,對于FAT文件系統(tǒng)下存放的文件來說都是致命和難以完全恢復(fù)的。
在FAT文件系統(tǒng)下準確地定位一個文件,需要讀取兩個位置的參數(shù),一個是根目錄或子目錄下的FDT文件目錄表中的文件目錄項,一個是FAT文件分配表中的FAT記錄項。其中FDT記錄了文件的文件名,文件長度,文件起始簇號,文件創(chuàng)建時日期和時間,文件最近修改日期和時間,文件最后訪問日期等基本信息;FAT記錄了文件在存儲時占用的簇號鏈信息,也就是文件從開始簇到最后一個簇的占用情況。
文件系統(tǒng)在定位一個正常文件時,首先讀取根目錄或子目錄下的FDT文件目錄項,獲得文件的入口,即文件起始簇號,隨后跳轉(zhuǎn)至FAT表,定位到起始簇號的FAT記錄項,查看文件的簇號鏈信息,根據(jù)簇號鏈信息順序讀出文件占用的所有簇的內(nèi)容,即可得到完整的文件內(nèi)容。
我們以FAT32文件系統(tǒng)為例,分析一下文件被徹底刪除后,文件系統(tǒng)對被刪除文件所做的操作。首先,可以確定的是,文件數(shù)據(jù)區(qū)域在刪除操作中并沒有被清零或覆蓋,只是文件所占存儲空間被釋放了,也就是說隨后的使用中磁盤可以向文件數(shù)據(jù)所在區(qū)域?qū)懭胄碌膬?nèi)容。其次,我們發(fā)現(xiàn)存儲于FDT文件目錄項中的幾個定位文件的重要參數(shù)被修改了,包括文件名的第一個字符被改寫成“E5”,長度為32位的文件起始簇號的高16位被清零。第三,存儲于FAT表的簇號鏈中被刪除文件的所有簇號記錄全部被清零,也就是說文件在磁盤空間上的存儲占用情況完全被抹掉。經(jīng)過這兩個關(guān)鍵位置的處理后,即便文件數(shù)據(jù)本身沒有被覆蓋,我們想要完整地恢復(fù)出數(shù)據(jù)也絕非易事。
這也就是為什么我們遇到FAT文件系統(tǒng)數(shù)據(jù)丟失后,即便采取措施進行數(shù)據(jù)搶救,也往往無法得到滿意恢復(fù)效果的原因所在。對于我們從事數(shù)據(jù)恢復(fù)行業(yè)的技術(shù)人員來講,縱然恢復(fù)希望渺茫,我們也應(yīng)本著萬事萬物間總有聯(lián)系的思想,嘗試幾種相對可行的方法來挽救那寶貴的文件數(shù)據(jù)。
通過剛才對正常文件和被刪除文件的存儲狀態(tài)分析,我們可以得出一個結(jié)論:若要恢復(fù)一個被徹底刪除的文件,必須具備兩個條件,一是確定文件的入口參數(shù)文件起始簇號,二是搞清楚文件的簇號鏈在FAT表中的分布情況。具備這兩個條件,就可以把文件完完整整地恢復(fù)出來了。接下來,我們依次分析上述兩個參數(shù)的恢復(fù)方法:
1 文件起始簇號的恢復(fù)方法
由于FAT文件系統(tǒng)在徹底刪除文件時,已經(jīng)將文件FDT目錄項中記錄的文件起始簇號高16位清零了,我們只能讀出沒有被修改的低16位參數(shù),如果直接以這低16位參數(shù)來作為文件的入口參數(shù)去定位文件的話,十有八九是會出現(xiàn)偏差的。所以我們必須想辦法嘗試找出被清除的文件起始簇號的高16位信息,與低16位信息結(jié)合,得出完整的文件入口參數(shù)。那么我們?nèi)绾位謴?fù)這被清除的高16位信息呢?方法有兩種,一種是依據(jù)文件目錄項中保留的文件創(chuàng)建時日期和時間,嘗試在FDT表中找出與被刪文件同一時期拷入硬盤分區(qū)的臨近文件,觀察分析這些文件的FDT目錄項中記錄的文件起始簇號,以此簇號的高16位來猜測被刪文件的入口,嘗試讀出文件的起始簇號內(nèi)容,如果恰巧是一個文件頭的話,那么這個文件很有可能就是我們要恢復(fù)的文件。第二種方法是窮舉法,由于文件入口參數(shù)的高16位被清零,從數(shù)學(xué)的角度來看,16位二進制數(shù)組成的參數(shù)一共有65536種可能的取值,我們把這65536種可能的取值與低16位參數(shù)結(jié)合,嘗試讀取每一種可能的文件入口參數(shù)位置的數(shù)據(jù),對數(shù)據(jù)依次進行判斷,看是不是一個完整的文件頭部信息,排除掉沒有意義的樣本,直到找出匹配的結(jié)果,此種方法耗費時間會比較長,不太適合人工查找。
2 在FAT表中文件簇號鏈的恢復(fù)方法
我們利用上一步恢復(fù)出來的文件入口參數(shù),找到了文件起始位置,但仍然無法將文件完整取出,因為在徹底刪除文件的操作中,F(xiàn)AT表中文件簇號鏈已經(jīng)被全部清空了,我們無從得知文件簇的具體排列情況,這時要根據(jù)不同情況進行分析。第一,如果文件是連續(xù)存儲的話,即文件簇鏈從文件起始簇號開始連續(xù)排列直到文件尾部,中間沒有分段的話,我們可以利用FDT目錄項中記錄的文件長度換算成文件占用的簇數(shù),結(jié)合文件起始簇號,找到文件尾部簇號,即可將文件完整取出;第二,如果文件是不連續(xù)存儲,即文件在中間分段了,那么我們只能找到文件的第一個片段,之后的分段很難再找到了,這種情況下,只能恢復(fù)出部分文件碎片。這也就是我們用恢復(fù)工具恢復(fù)出的文件經(jīng)常無法正常打開的原因,而且越是數(shù)據(jù)量大的文件,如視頻文件,分段存儲的可能性就越大,完整恢復(fù)的可能性就越小,恢復(fù)效果也就越差。當然,如果用戶會定期對FAT文件系統(tǒng)下的分區(qū)進行磁盤碎片整理的話,恢復(fù)效果會大大改善。
綜上所述,由于FAT文件系統(tǒng)設(shè)計上的局限性,給此系統(tǒng)下徹底刪除的文件的恢復(fù)造成了諸多困難,文件恢復(fù)的效果依賴于恢復(fù)方法上的精心選擇,此外,用戶日常的使用習(xí)慣也異常重要。
最后,“再好的恢復(fù)工具和方法,也不如及時正確的數(shù)據(jù)備份”,此句與讀者共勉。
參考文獻
[1]趙振州.《數(shù)據(jù)恢復(fù)技術(shù)案例教程》.機械工業(yè)出版社,2013,11(1).