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