陳培德,王麗清,吳建平
(1.云南大學 信息學院,云南 昆明 650223;2.云南省高校數(shù)字媒體技術重點實驗室,云南 昆明 650223)
格式化是指對磁盤或磁盤中的分區(qū)進行初始化的一種操作,這種操作通常會導致現(xiàn)有的磁盤或分區(qū)中所有的文件被清除。格式化通常分為低級格式化和高級格式化[1]。如果沒有特別指明,對硬盤的格式化通常是指高級格式化。
外存儲器在生產(chǎn)出來后,一般要經(jīng)過低級格式化、分區(qū)和高級格式操作后,才能用來存儲數(shù)據(jù)[1]。低級格式化針對的是整個硬盤,一般由外存儲器生產(chǎn)廠商來完成;而對外存儲器的分區(qū)和高級格式化一般由銷售商或者用戶來完成,高級格式化針對的是某個分區(qū)。
對邏輯盤進行高級格式化后數(shù)據(jù)能否恢復,取決于格式化操作對原來文件系統(tǒng)中數(shù)據(jù)的破壞程度[2]。而快速格式化則是高級格式化的一種特殊形式。文中對NTFS文件系統(tǒng)的邏輯盤被快速格式化成NTFS文件系統(tǒng)后的數(shù)據(jù)恢復進行了大量實驗。結果表明,在Windows 7平臺下,NTFS的邏輯盤被快速格式化成NTFS后,除被元文件$MFT覆蓋后的記錄無法恢復外,其他未被覆蓋的記錄均可全部恢復。
從整體結構上講,NTFS文件系統(tǒng)由元文件、用戶文件以及數(shù)據(jù)等組成。NTFS文件系統(tǒng)在創(chuàng)建時,會將一些重要的系統(tǒng)信息以文件的形式分散地存儲在NTFS卷中[3],存儲這些重要系統(tǒng)信息所對應的文件就是元文件[4],它是NTFS文件系統(tǒng)最重要的組成部分。除根目錄外,元文件的名稱均以“$”符號開頭[5];元文件是隱藏的系統(tǒng)文件[6],用戶不能直接對元文件進行訪問,在資源管理器中也查看不到元文件。
在NTFS文件系統(tǒng)中,最重要的元文件就是$MFT[7-8],它是NTFS文件系統(tǒng)中所有文件和文件夾(目錄)的集合[9]。它記錄著NTFS文件系統(tǒng)中所有文件和文件夾的基本情況[10],包括卷的信息、引導記錄、元文件$MFT本身等的重要信息,以及文件名(或文件夾名)、文件安全屬性、文件大小、數(shù)據(jù)運行列表等等[11]。元文件$MFT由許許多多記錄組成[12],每條記錄的大小固定為1 024字節(jié)[13],一般情況下,每個文件或文件夾在元文件$MFT中只占用一條記錄[14]。每條記錄以“FILE”作為開始標記,一般以第1個“FF FF FF FF 00 00 00 00”或者“FF FF FF FF 82 79 47 11”(存儲形式)為結束標志[15]。元文件$MFT的結構大致如圖1所示[15]。
圖1 元文件$MFT結構示意圖
(注:假設元文件$MFT的0號記錄B0H屬性值存放在元文件$MFT記錄之前)
(1)操作系統(tǒng):Windows 7;
(2)邏輯盤容量:5.99 GB;
(3)分區(qū)形式:MBR;
(4)數(shù)據(jù)恢復工具:WinHex 15.08。
制作實驗素材步驟如下:
(1)在Windows 7操作系統(tǒng)下,使用計算機管理功能中的磁盤管理功能建立一個虛擬磁盤文件,文件名為abcd.vhd,文件大小為6.0 GB,將該虛擬磁盤文件abcd.vhd附加成虛擬盤;
(2)將虛擬盤初始化,分區(qū)形式選擇MBR,分區(qū)大小為5.99 GB,假設對應的盤符為G盤;
(3)將G盤格式化,文件系統(tǒng)選擇NTFS,每個簇的扇區(qū)數(shù)選擇“默認配置大小”;
(4)格式化完成后,復制125 000多個文件(夾)到G盤中,復制完成后;G盤的基本情況如下:
文件系統(tǒng):NTFS;
總容量:6 439 301 120字節(jié)(5.99 GB);
已用空間:1 552 965 632字節(jié)(1.44 GB);
可用空間:4 886 335 488字節(jié)(4.54 GB);
每個簇的扇區(qū)數(shù):8;
元文件$MFT記錄范圍:0~125 183。
(5)快速格式化前,NTFS主要元文件在G盤分布情況如表1所示。
表1 NTFS主要元文件在G盤分布情況(快速格式化前)
(6)將G盤進行快速格式化,文件系統(tǒng)選擇NTFS,每個簇的扇區(qū)數(shù)選擇“默認配置大小”;快速格式化后,G盤的基本情況如下:
文件系統(tǒng):NTFS;
總容量:6 439 301 120字節(jié)(5.99 GB);
已用空間:61 476 864字節(jié)(58.60 MB);
可用空間:6 377 824 256字節(jié)(5.93 GB);
每個簇的扇區(qū)數(shù):8;
元文件$MFT記錄范圍:0~255。
(7)快速格式化后,NTFS主要元文件在G盤分布情況如表2所示。
表2 NTFS主要元文件在G盤分布情況(快速格式化后)
至此,在Windows 7平臺下,G盤由NTFS文件系統(tǒng)被快速格式化NTFS文件系統(tǒng)實驗素材已制作完成。
從快速格式化前、后,G盤NTFS主要元文件分布對比情況來看,G盤NTFS主要元文件變化情況如下:
(1)元文件$MFT所占簇數(shù)由31 296個縮小為64個,元文件$MFT的記錄號范圍由0~125 183縮小為0~255,而快速格式化前元文件$MFT的256~125 183號記錄均完好保存;由于快速格式化后元文件$MFT的記錄號范圍為0~255,所以,快速格式化前元文件$MFT的256~125 183號記錄已不再起作用。
(2)快速格式化前,元文件$MFT的0號記錄B0H屬性值記錄了125 184條記錄(記錄號范圍為0~125 183)的使用情況,而快速格式化后,只記錄了256條記錄的使用情況,其中35~255號記錄為空記錄。
(3)元文件$MFTMirr所占簇數(shù)和位置未發(fā)生變化,但是,元文件$MFTMirr的0號記錄已被快速格式化后元文件$MFTMirr的0號記錄所取代。
(4)元文件$Bitmap所占簇數(shù)和位置未發(fā)生變化,但是,元文件$Bitmap的內(nèi)容已被快速格式化后元文件$Bitmap的內(nèi)容所取代,即快速格式化前用戶文件和文件夾所占據(jù)的位圖已被全部釋放。
而G盤MBR分區(qū)表、元文件$Boot、$LogFile、$Attrdef、$UpCase和元文件$MFT的開始簇號等均未發(fā)生任何變化。
從快速格式化操作對NTFS元文件$MFT的影響可知,恢復數(shù)據(jù)的關鍵在于重建快速格式化前G盤的NTFS元文件$MFT,即將快速格式化后元文件$MFT的記錄號范圍由0~255恢復為快速格式化前的0~125 183。
要實現(xiàn)這一目標,只需要修改元文件$MFT的0號記錄80H屬性中的如下值:
(1)元文件$MFT所占簇數(shù);
(2)元文件$MFT結束VCN;
(3)系統(tǒng)分配給元文件$MFT的空間;
(4)元文件$MFT實際占用空間;
(5)元文件$MFT初始化空間。
將上述屬性值修改完成并存盤。
回到DOS提示符下,使用CHKDSK命令[13]以元文件$MFT中的記錄作為依據(jù)對G盤受損的NTFS文件系統(tǒng)進行自動修復;修復完成后,便恢復出快速格式化前G盤中的大部分數(shù)據(jù)?;謴涂焖俑袷角暗臄?shù)據(jù)流程如圖2所示。
圖2 恢復快速格式化前數(shù)據(jù)流程
計算元文件$MFT所占簇數(shù)、元文件$MFT結束VCN和系統(tǒng)分配給元文件$MFT的空間等的具體方法如下:
(1)元文件$MFT所占簇數(shù)=(元文件$MFT結束扇區(qū)號-元文件$MFT開始扇區(qū)號+1)/每個簇的扇區(qū)數(shù);
(2)元文件$MFT結束VCN=元文件$MFT所占簇數(shù)-1;
(3)系統(tǒng)分配給元文件$MFT的空間=元文件$MFT所占簇數(shù)×每個簇的扇區(qū)數(shù)×512字節(jié);
(4)元文件$MFT實際占用空間=元文件$MFT所占簇數(shù)×每個簇的扇區(qū)數(shù)×512字節(jié);
(5)元文件$MFT初始化空間=元文件$MFT記錄所占簇數(shù)×每個簇的扇區(qū)數(shù)×512字節(jié)。
每個簇的扇區(qū)數(shù)從NTFS_DBR中獲得。
將以上5個值轉換成在元文件$MFT的0號記錄80H屬性中的存儲形式,并替換快速格式化后元文件$MFT的0號記錄80H屬性中的這5個值,從而達到恢復快速格式化前元文件$MFT的目的。
計算快速格式化前,元文件$MFT的0號記錄80H屬性值步驟如下:
1.計算快速格式化前,元文件$MFT所占簇數(shù)。
操作步驟如下:
(1)啟動WinHex軟件。
(2)工具→邏輯硬盤→選擇G盤,將光標移動到24號扇區(qū)(注:16~23號扇區(qū)被元文件$MFTMirr所占據(jù),共計8個扇區(qū))。
(3)搜索→查找文本→在查找文本窗口的文本框中輸入元文件$MFT記錄的特征值“FILE”,扇區(qū)偏移地址為“0”,查找方向選擇“向下”;在2 097 152號扇區(qū)找到,經(jīng)確認為元文件$MFT的0號記錄所在扇區(qū)。
(4)將光標移動到邏輯盤的最后一個扇區(qū);搜索→查找文本→在查找文本窗口的文本框中輸入元文件$MFT記錄的特征值“FILE”,扇區(qū)偏移地址為“0”,查找方向選擇“向上”;在2 347 518號扇區(qū)找到,經(jīng)確認為元文件$MFT最后一條記錄的開始扇區(qū)號;所以,元文件$MFT結束扇區(qū)號為2 347 519。
(5)從NTFS_DBR中獲得每個簇的扇區(qū)數(shù)為8。
元文件$MFT所占簇數(shù)=(元文件$MFT結束扇區(qū)號-元文件$MFT開始扇區(qū)號+1)/每個簇的扇區(qū)數(shù)=(2 347 519-2 097 152+1)/8=31 296(即0X7A40)
2.計算元文件$MFT結束VCN。
元文件$MFT結束VCN=元文件$MFT所占簇數(shù)-1=31 296-1=31 295(即0X7A3F)
3.計算系統(tǒng)分配給元文件$MFT的空間。
系統(tǒng)分配給元文件$MFT記錄空間=元文件$MFT所占簇數(shù)×每個簇的扇區(qū)數(shù)×512字節(jié)=31 296×8×512字節(jié)=128 188 416(即0X7A40000) 字節(jié)
4.計算元文件$MFT實際占用空間。
元文件$MFT實際占用空間=元文件$MFT所占簇數(shù)×每個簇的扇區(qū)數(shù)×512字節(jié)=31 296×8×512字節(jié)=128 188 416(即0X7A40000) 字節(jié)
5.計算元文件$MFT初始化空間。
元文件$MFT初始化空間=元文件$MFT所占簇數(shù)×每個簇的扇區(qū)數(shù)×512字節(jié)=31 296×8×512字節(jié)=128 188 416(即0X7A40000) 字節(jié)
將元文件$MFT所占簇數(shù)、元文件$MFT結束VCN、系統(tǒng)分配給元文件$MFT的空間、元文件$MFT實際占用空間和元文件$MFT初始化空間轉換為在元文件$MFT的0號記錄80H屬性中的存儲形式,如下所示:
(1)元文件$MFT所占簇數(shù):40 7A;
(2)元文件$MFT結束VCN: 3F7A00000000 0000;
(3)系統(tǒng)分配給元文件$MFT空間:00 00 A4 07 00 00 00 00;
(4)元文件$MFT實際占用空間: 00 00 A4 07 00 00 00 00;
(5)元文件$MFT初始化空間:00 00 A4 07 00 00 00 00。
恢復快速格式化前元文件$MFT的0號記錄80H屬性中元文件$MFT所占簇數(shù)、元文件$MFT結束VCN等5個值,操作步驟如下:
1.啟動WinHex軟件。
2.工具→邏輯硬盤→選擇G盤,將光標移動到2 097 152號扇區(qū),即快速格式化后,元文件$MFT的0號記錄80H屬性處,如圖3所示。
3.修改元文件的0號記錄80H屬性中的以下5個值。
(1)將元文件$MFT的0號記錄80H屬性中的數(shù)據(jù)運行列表由“31 40 00 00 04 00 FF FF”修改為“32 40 7A 00 00 04 00 FF”,即元文件$MFT所占簇數(shù)由0X40修改為0X7A40,也就是將元文件$MFT的記錄號范圍由0~255恢復為快速格式化前元文件$MFT的記錄號范圍0~125 183;
(2)將元文件$MFT結束VCN由0X3F修改為“0X7A3F”,即將快速格式化后元文件$MFT的虛擬簇號范圍由0~63修改為快速格式化前的0~31 295;
(3)將系統(tǒng)分配給元文件$MFT的空間由“0X040000”修改為“0X07A40000”;即將快速格式化后系統(tǒng)分配給元文件$MFT的空間由262 144字節(jié)修改為快速格式化前的128 188 416字節(jié);
(4)將元文件$MFT實際占用空間由“0X040000”修改為“0X07A40000”;即將快速格式化后元文件$MFT實際占用空間由262 144字節(jié)修改為快速格式化前的128 188 416字節(jié);
(5)將元文件$MFT初始化空間由“0X040000”修改為“0X07A40000”;即將快速格式化后元文件$MFT初始化空間由262 144字節(jié)修改為快速格式化前的128 188 416字節(jié)。
4.修改完成后,元文件$MFT的0號記錄80H屬性的值如圖4所示,即快速格式化前,元文件$MFT的0號記錄80H屬性值,然后存盤并退出WinHex。
圖4 快速格式化前,元文件$MFT的0號記錄80H屬性
至此,元文件$MFT的0號記錄已恢復到快速格式化前的狀態(tài)。
5.在DOS提示符下,使用“CHKDSK G:/F/I”[14]命令完成如下NTFS文件系統(tǒng)的自動修改:
(1)通過元文件$MFT的0號記錄自動修復受損的元文件$MFT和元文件$MFT的B0H屬性值;
(2)通過元文件$MFT自動修復受損的元文件$Bitmap;
(3)通過元文件$MFT自動修復受損的根目錄、其他索引目錄以及其他元文件等。
經(jīng)過半個多小時,G盤的元文件$MFT、元文件$Bitmap、根目錄、索引目錄以及其他元文件等已修復完成。G盤的基本情況如下所示:
(1)文件系統(tǒng):NTFS;
(2)總容量:6 439 301 120字節(jié)(5.99 GB);
(3)已用空間:1 561 186 304字節(jié)(1.44 GB);
(4)可用空間:4 878 114 816字節(jié)(4.54 GB);
(5)每個簇的扇區(qū)數(shù):8;
(6)元文件$MFT記錄范圍: 0~125 183。
到資源管理器中,可以查看到G盤中的文件和文件夾。
在Windows 7平臺下,將NTFS文件系統(tǒng)快速格式化成NTFS文件系統(tǒng)后,在每個簇的扇區(qū)數(shù)沒有變化的情況下,只要正確修復元文件$MFT的0號記錄80H屬性相應值,并在DOS下使用CHKDSK[16]命令對受損的元文件以及索引目錄進行自動修復,便可恢復快速格式化前NTFS文件系統(tǒng)中的大部分數(shù)據(jù)。但是由于元文件$MFT的38~255之間的記錄已被填充為有效記錄,這218條記錄對應的文件內(nèi)容可以通過WinHex軟件的“按類型恢復文件”進行恢復。
綜上所述,在Windows 7平臺下,NTFS文件系統(tǒng)被快速格式化成NTFS文件系統(tǒng)后,數(shù)據(jù)恢復的核心在于恢復快速格式化前元文件$MFT的0號記錄80H屬性中的相應值。通過實踐證明,該方法方便快捷、簡單實用,并且用戶在資源管理器中可以看到所恢復出來的大部分數(shù)據(jù)。