王曉東 山東信息職業(yè)技術(shù)學(xué)院電子與通信系 楊梅 濰坊中學(xué)
隨著信息技術(shù)的應(yīng)用,數(shù)據(jù)的安全性問題越來越凸顯?,F(xiàn)代人在使用計(jì)算機(jī)時(shí)用得最多的操作系統(tǒng)是Windows,該系統(tǒng)有FAT32和NTFS兩種文件系統(tǒng)。通常我們在對數(shù)據(jù)誤刪除后,使用數(shù)據(jù)恢復(fù)軟件恢復(fù)后的效果不好,原因是這些數(shù)據(jù)文件是以碎片的形式存儲(chǔ)的。只有找到文件的碎片并重組碎片,才能真正恢復(fù)文件。
文件在存儲(chǔ)時(shí)如果占用的簇空間是連續(xù)的,就不會(huì)有碎片。反之,如果占用的簇空間是離散的,簇之間插入了其他的文件內(nèi)容,該文件的存儲(chǔ)就是碎片文件。
文件碎片的產(chǎn)生與操作系統(tǒng)采用的分配策略有關(guān),Windows操作系統(tǒng)采用三種分配策略。
(1)第一可用分配策略
如果一個(gè)文件占用多個(gè)簇空間,當(dāng)為它分配完一個(gè)可用簇繼續(xù)分配時(shí),操作系統(tǒng)會(huì)回到整個(gè)數(shù)據(jù)區(qū)的開始處為文件匹配可用簇,這種策略比較容易出現(xiàn)文件碎片。
例如一個(gè)文件要占用3個(gè)簇空間,假設(shè)數(shù)據(jù)區(qū)前16個(gè)簇中1-10、13號(hào)簇已經(jīng)被占用,14號(hào)簇開始往后都空閑,系統(tǒng)給文件的分配策略為:系統(tǒng)從數(shù)據(jù)區(qū)的第一個(gè)簇開始搜索空閑簇,找到11號(hào)空閑簇分配給文件,系統(tǒng)又回到1號(hào)簇開始搜索空閑簇,正好此時(shí)8號(hào)簇的內(nèi)容被刪除,系統(tǒng)就會(huì)把8號(hào)簇作為第一個(gè)未使用的簇分配給文件。
圖1 第一可用分配策略
(2)下一分配策略
為文件分配了11號(hào)簇后,操作系統(tǒng)不會(huì)回到數(shù)據(jù)區(qū)的開始處搜索,而是繼續(xù)向后搜索空閑簇。對于上面的例子,該策略分配后的結(jié)果是11、12、14。
(3)最佳分配策略
操作系統(tǒng)在搜索簇時(shí),盡可能找到一整塊連續(xù)的簇來存儲(chǔ)文件,這樣不容易產(chǎn)生文件碎片,如果沒有連續(xù)的簇可分配,再使用其他分配策略,該策略分配后的結(jié)果是14、15、16。
(1)文件分配時(shí)產(chǎn)生
無論采用哪種文件分配策略,文件在存儲(chǔ)時(shí)都會(huì)產(chǎn)生碎片。尤其是前兩種分配策略最容易產(chǎn)生,當(dāng)前常用的Windows7、Windows10操作系統(tǒng)都是采用第二種分配策略。
(2)文件被編輯時(shí)產(chǎn)生
文件本身在最初創(chuàng)建好后是連續(xù)存放的,但是隨著使用,需要經(jīng)常對它進(jìn)行編輯,也就意味著要反復(fù)的給它分配和釋放空閑簇,不斷的存刪的過程很容易產(chǎn)生文件碎片。
文件被刪除后,文件的目錄項(xiàng)被標(biāo)記為未使用狀態(tài),仍然可以從目錄項(xiàng)中找到文件的起始簇號(hào)以及文件的大小。體現(xiàn)文件存儲(chǔ)情況的FAT表簇鏈也會(huì)被清空,這樣就無法獲取除首簇外其它簇所占用的情況。
恢復(fù)文件思路:如果文件存儲(chǔ)時(shí)有碎片,提取出來的文件會(huì)不正確,要恢復(fù)文件還需知道簇的占用情況,但此時(shí)簇鏈已經(jīng)被清空。考慮到文件被刪除后,雖然文件占用的FAT表項(xiàng)被清空,但該文件周圍其他文件的占用的表項(xiàng)號(hào)沒有清空,根據(jù)FAT文件系統(tǒng)數(shù)據(jù)區(qū)是由FAT表來管理的,F(xiàn)AT表中每一個(gè)表項(xiàng)號(hào)都對應(yīng)于一個(gè)簇號(hào),我們可以得到恢復(fù)思路,就是從該文件占用的第一簇簇號(hào)對用的FAT表項(xiàng)號(hào)開始,搜索未分配狀態(tài)的FAT表項(xiàng)號(hào),根據(jù)文件大小計(jì)算出要搜索的表項(xiàng)號(hào)數(shù)量,然后到數(shù)據(jù)區(qū)找到對應(yīng)的簇號(hào),從而正確提取出文件。
舉例說明恢復(fù)方法。文件“zhongguo.doc”是一個(gè)有碎片的文件,現(xiàn)被徹底刪除,文件有三個(gè)碎片?;謴?fù)的操作如下:打開winhex軟件(Windows系統(tǒng)下十六進(jìn)制查看器),根據(jù)文件名zhongguo定位到文件的目錄項(xiàng),從目錄項(xiàng)中的讀出文件的起始簇號(hào)39,讀出文件的大小算出占用的簇?cái)?shù)是11。因?yàn)槲募粍h除后FAT表簇鏈被清空,從39號(hào)表項(xiàng)開始搜索11個(gè)空白表項(xiàng)。文件的存儲(chǔ)單元是簇,實(shí)際存儲(chǔ)最小單位為扇區(qū),提取文件內(nèi)容時(shí)還要轉(zhuǎn)化為扇區(qū)操作,公式為:簇起始扇區(qū)號(hào)=保留扇區(qū)+FAT表大小扇區(qū)*FAT表個(gè)數(shù)+(該簇號(hào)-2)*該簇扇區(qū)數(shù)。最后根據(jù)提取的碎片內(nèi)容重組文件。
文件被刪除后,文件的的MFT記錄中標(biāo)志位改變?yōu)槲词褂脿顟B(tài)00(偏移16、17處),目錄中文件的索引項(xiàng)被清除。但是最關(guān)鍵的是,存放該文件的文件名的30屬性和存放文件起始簇號(hào)、大小的80屬性沒有被清空。
恢復(fù)文件的思路:如果文件有碎片,得出文件名字的十六進(jìn)制形式(NTFS文件系統(tǒng)使用的是UNIDODE碼),根據(jù)此值,定位到文件的MFT記錄,分析80屬性的數(shù)據(jù)運(yùn)行,計(jì)算出每塊碎片文件的起始LCN號(hào)及大小,計(jì)算時(shí)注意,從第二塊碎片文件開始,它的起始LCN號(hào)是相對于前一塊碎片文件的起始LCN號(hào)的偏移量進(jìn)行計(jì)算的,最后將提取出的碎片文件重組。
舉例說明恢復(fù)方法。文件“gongyuan.jpg”是一個(gè)有碎片的文件,現(xiàn)被徹底刪除?;謴?fù)的操作如下:使用winhex先得出文件名的unicode碼67006F006E0067007900750061006E00,依據(jù)該碼搜索到文件的MFT記錄,在文件的MFT記錄中定位到80屬性,該屬性是非常駐屬性,它的數(shù)據(jù)運(yùn)行中存儲(chǔ)的是文件在數(shù)據(jù)區(qū)中簇的占用情況,數(shù)據(jù)運(yùn)行為316A70FD01 2154AAD2 3101602B01(見圖2)。根據(jù)數(shù)據(jù)運(yùn)行計(jì)算三塊碎片文件的起始簇號(hào)和塊大小。注意碎片文件的起始簇號(hào)是相對于前一塊碎片的起始簇號(hào)而言的。
表1 碎片文件的存儲(chǔ)分布
圖2 文件的MFT記錄
本文針對windows系統(tǒng)下具有碎片的文件被刪除,分別給出了在FAT32和NTFS文件系統(tǒng)下的恢復(fù)的方法,在實(shí)踐中具有良好效果。