快速格式化後的 NTFS 元資料:WinHex 分析

NTFS 快速格式化測試

快速格式化後的 NTFS 元資料描述的是新初始化的檔案系統,但前一個檔案系統中的某些記錄和檔案內容,可能仍可在其底層被讀取。Windows 會建立新的主檔案表(Master File Table)和目錄結構;它並非單純將所有舊檔案名稱隱藏起來。當足夠多的原始元資料及其所描述的資料得以保留且仍可存取時,資料恢復便會成功。.

WinHex 透過顯示開機區段欄位、MFT 記錄以及資料區映射,協助區分這些情況。本文探討一個 NTFS 轉 NTFS 的快速格式化案例,以及另一個 MFT 碎片重建範例。 這些計算結果僅適用於記錄的佈局,而非所有 Windows 磁碟區。SSD 的棄用行為及隨後的寫入操作可能會產生截然不同的結果。.

目錄

1. NTFS 中的「快速格式化」有哪些變更?

的 NTFS 檔案系統 透過元資料檔案、目錄索引及叢集映射來組織檔案。快速格式化會建立這些結構的新實例。.

結構

快速格式化後的角色

對復原的影響

磁碟區開機區及其備份

請描述此新格式化的磁碟區

當前的 MFT 指標可能無法再定位到舊的表

$MFT 與根目錄

請描述新的檔案系統及其初始物件

在正常瀏覽時,舊的檔案名稱和目錄關聯性會消失

$MFT::$BITMAP

追蹤新 MFT 中已分配的記錄

不會將該表格以外的現存紀錄納入清點範圍

$位圖

追蹤分配至新卷中的叢集

先前已被佔用的叢集可重新釋出以供重複使用

$MFTMirr 及其他系統元資料

支援新初始化的檔案系統

他們的寫入操作可能會覆寫較舊的元資料或檔案內容

檔案資料的舊位置

可能在被覆寫或捨棄的範圍之外保留可讀內容

生存能力必須加以確認,而非理所當然地假設

的 主檔案表 它本身就是一個檔案。其未命名的 $DATA 資料流包含檔案記錄;其位圖則描述了記錄的分配情況。獨立的 $Bitmap 檔案則描述了整個卷上的叢集分配情況。若將這兩個位圖混淆,將會導致對哪些資料得以保留的錯誤判斷。.

格式化現有分割區與刪除其分割區表條目亦有所不同。執行「卷宗格式化」程序會重建所選卷宗內的檔案系統;而刪除分割區則涉及卷宗外部的磁碟佈局。.

2. 在 WinHex 中讀取原始開機扇區

若要對 NTFS 格式化前後進行十六進位比對,請在格式化前保存一個磁區映像檔,並將其與格式化後擷取的映像檔進行比對。若來源磁碟已格式化,則應以現有的映像檔及任何可取得的較早擷取資料為依據進行分析。請勿重複執行格式化以重現該事件。.

的 磁碟區開機記錄 提供了解讀叢集位址所需的參數。.

在 WinHex 中讀取原始開機區段

摘自 WinHex 案件記錄中的原始開機扇區十六進位片段。紅色方框標示了扇區大小、簇大小及 MFT 位置欄位。.

開機區段偏移量

記錄的位元組

口譯

0x0B, 2 位元組

00 02

每個邏輯扇區 512 位元組

0x0D, 1 位元組

08

每個叢集包含八個區段

0x30, 8 位元組

A8 59 79 0A 00 00 00 00

$MFT 從 LCN 175,724,968 開始

0x38, 8 位元組

24 59 F9 09 00 00 00 00

$MFTMirr 從 LCN 167,336,228 開始

0x40, 1 位元組

F6

有符號數值 −10:記錄大小為 2¹⁰ = 1,024 位元組

多位元組整數採用小端字節序。該 分配單位大小 因此是:

  1. 每個叢集為 512 × 8 = 4,096 位元組

LCN 指的是相對於卷的叢集編號。因此:

  1. 原始 MFT 體積相對扇區 = 175,724,968 × 8
  2. = 1,405,799,744
  3. 原始 MFT 相對於卷的位元組偏移量 = 175,724,968 × 4,096
  4. = 719,769,468,928

檢視整個磁碟映像時,請加上該磁區的起始位元組偏移量;檢視僅包含單一磁區的映像時,則無需再次加上此偏移量。WinHex 顯示的位址上下文必須與計算結果相符。.

開機區段會標示第一個 MFT 區段。它並不會描述該表中的每個碎片。.

3. 解碼原始 MFT 的非常駐資料

在原始的 MFT 位置,驗證記錄 0,並找出其未命名的 $DATA 屬性,輸入 0x80. 非駐留屬性僅在記錄中儲存映射資訊,而非其完整內容。.

案例筆記將此屬性置於記錄偏移量處 0x100. 這使得其形式位元組出現在 0x108; 該值 01 意指「非居民」。這些絕對偏移量屬於此記錄。其他記錄可將該屬性置於其他位置。.

在解讀另一筆記錄時,請使用相對於該屬性起始位置的偏移量:

相對偏移量

現場

+0x08

居民/非居民表格

+0x10

最低虛擬叢集編號(VCN)

+0x18

最高 VCN,含該值

+0x20

映射對陣列的偏移量

+0x28

分配長度

+0x30

邏輯檔案大小

+0x38

有效資料長度

請分別解讀這三個大小欄位。已分配長度用於預留儲存空間,邏輯大小定義資料流長度,而有效資料長度則描述已初始化的資料。這三者不一定要相等。.

解碼原始 MFT 中的非居民資料

在涵蓋 VCN 0 至 98,431 的範圍內,叢集數量為 98,432,而非 98,431。記錄中的兩次運行佈局結果如下:

運行

叢集數量

簽署的 LCN delta

啟動 LCN

每個邏輯記錄槽為 1,024 位元組

1

75,096

+175,724,968

175,724,968

0–300,383

2

23,336

+83,118,309

258,843,277

300,384–393,727

第二個位址是相對於前一次執行所產生的 開始 LCN:

  1. 175,724,968 + 83,118,309 = 258,843,277
  2. (75,096 + 23,336) × 4,096 = 403,177,472 位元組
  3. 403,177,472 ÷ 1,024 = 393,728 筆記錄槽位

這些是可尋址的槽位,而非有效檔案的數量。部分記錄可能未被使用,且一個檔案可能需要多個記錄。.

已記錄的運行標題 43 和 42 說明欄位寬度。對於 43, ,長度佔用三個位元組,而 LCN 差值佔用四個位元組;對於 42, ,長度佔用兩個位元組,而差值佔用四個位元組。請將 LCN 差值視為有符號數,因為後面的片段可能位於卷的較早位置。.

所得的範圍長度為 384.5 MiB。將數值四捨五入顯示為「385 MB」,並不能單憑此點就斷定分配大小不同,亦無法證明已預留了額外的簇。.

4. 比較新版 MFT 與舊版佈局

案例筆記中記載了一個起始於 LCN 786,432、範圍為 180 個簇的後格式 MFT。假設記錄的簇大小為 4,096 位元組:

  1. 新 MFT 的起始位元組偏移量 = 786,432 × 4,096
  2. = 3,221,225,472
  3. 新範圍大小 = 180 × 4,096 = 737,280 位元組

新的起始位置位於卷的第 3 GiB 處。該位址是根據此案例觀察所得,並非 NTFS 的強制位置。.

比較新版 MFT 與舊版佈局

屬性

原始版面配置

在筆記中記錄的貼文格式佈局

啟動 MFT LCN

175,724,968

786,432

已記錄的 MFT 區段

二

一

承保範圍

98,432 個聚類

180 個叢集

在記錄的記錄大小下的容量

393,728 個槽位

720 個插槽

註釋中亦提及記錄 0–717。這共計 718 筆記錄,即 735,232 位元組。此數值與足以容納 720 個槽位的記憶體分配相符,但無法確定 718 所指的是邏輯長度、初始化長度,還是已檢查的記錄數。 這些欄位需要底層的屬性位元組。.

一項重要的變更在於,Windows 現已採用新的表格。新 MFT 的體積較小,這使得 不是 這意味著舊資料表已在原處進行了實體截斷。其原先的位置必須另行檢查。.

要判斷 NTFS MFT 是否因格式化而被覆寫,請將原始 MFT 區段與所有新寫入的元資料及後續的分配進行比對。若指標發生變更,即證明參考關係已改變;透過位元組比對,則可確認特定位置是否遭到覆寫。僅憑位置變更,既無法證明資料完全存留,也無法證明資料完全遺失。.

5. 根據現存紀錄重建已碎裂的 MFT

隨著資料表不斷擴充,且連續的空間逐漸耗盡,MFT 碎片化便會逐漸產生。NTFS 會預留一個 MFT 區塊以減少碎片化,但這並不能保證僅形成單一延伸區。資料表擴充時,碎片可能會被分配在當前延伸區的前方或後方。.

本案例資料中另有一個獨立的重建範例,記錄了此三行佈局。切勿將其與前面的兩行佈局案例混為一談,彷彿兩者描述的是同一張表格。.

運行

邏輯記錄槽

啟動 LCN

與前次執行開始時的差異

群集

1

0–204,927

786,432

+786,432

51,232

2

204,928–248,587

9,274,281

+8,487,849

10,915

3

248,588–376,391

8,858,108

−416,173

31,951

根據現存紀錄重建碎片化的 MFT

每個 4,096 位元組的叢集可容納四個 1,024 位元組的槽位。這解釋了這兩項邊界:

  1. 51,232 × 4 = 204,928 個插槽
  2. 204,928 + (10,915 × 4) = 248,588
  3. 9,274,281 − 416,173 = 8,858,108

這些執行結果合計涵蓋 94,098 個叢集,即 385,425,408 位元組。最終的 VCN 為 94,097。.

查找並驗證候選人記錄

重建筆記中記載了搜尋第 204,928 筆紀錄的過程,其中有一筆候選紀錄因無效而被排除,並找到另一筆被認定為有效的候選紀錄。相符的編號或該 檔案 僅有簽名是不夠的。.

在唯讀映像檔上:

  1. 搜尋 檔案 簽名,包括位於當前 MFT 之外的位置。若僅掃描新資料表,將會遺漏已脫離的記錄。.
  2. 檢查記錄邊界、記錄長度、屬性偏移量及屬性長度。.
  3. 在解析受保護的記錄位元組之前,請先驗證更新序列陣列。在記錄的 1,024 位元組記錄中,其檢查範圍涵蓋兩個 512 位元組步長區段的末端。.
  4. 在跨過這些邊界解析屬性之前,請先將已儲存的預告片字詞還原至解析器的記憶體中;請勿修補證據影像。.
  5. 比較相鄰的記錄、現有的記錄編號、名稱、父記錄參考及序列號。剔除不合理或過時的關聯關係。.

若尚存的舊記錄 0 提供了有效的執行清單,則應採用該映射。若該記錄缺失,則從記錄序列重建延伸區仍僅為一種假設,需進行額外檢查。區域內的空白記錄本身並不能證明不存在後續的片段。.

分別重新組建邏輯表

將已驗證的範圍依 VCN 順序複製到另一個分析檔案中。請勿按 LCN 遞增順序進行排序:上述第三次執行結果在磁碟上位於第二次之前,但在邏輯上卻緊接在第二次之後。.

關於紀錄編號 n, 記錄大小 R, ,以及叢集大小 C:

  1. VCN = floor(n × R ÷ C)
  2. 叢集內的偏移量 = (n × R) mod C
  3. LCN = 該次運行起始 LCN + (VCN − 該次運行起始 VCN)

以三輪執行範例中的第 204,929 筆記錄為例,其 VCN 為 51,232,叢集內偏移量為 1,024 位元組。因此,其卷宗相對位址為:

  1. 9,274,281 × 4,096 + 1,024 = 37,987,456,000 位元組

此映射僅能找回一個位址,而非檔案。該記錄及其所引用的資料仍需進行驗證。.

6. 透過舊屬性恢復檔案內容

一旦理解了某個存留的檔案記錄,其 $DATA 屬性便會決定資料擷取的方法。.

居民資料: 讀取屬性的值偏移量和長度,然後從經過驗證且經修復還原的記錄中匯出該值。由於小檔案的內容儲存於 MFT 記錄中,因此當其 MFT 記錄被覆寫時,這些檔案的內容可能會遺失。.

一般非居民資料: 解碼檔案本身的執行清單、從原始卷映像中讀取每個區段、將位元組依 VCN 順序組裝,並將輸出裁切至邏輯檔案大小。MFT 執行清單用於定位檔案記錄;它並不能取代每位使用者自身的檔案-資料對應關係。.

當屬性延伸至其他記錄時,請遵循 $ATTRIBUTE_LIST 的參照規則。稀疏與壓縮資料流需分別遵循其對應的解碼規則。加密內容仍需使用適用的解密素材。在這些情況下,單純的串接並不足夠。.

目錄復原需要格外謹慎。即使其父目錄已不存在,檔案名稱仍可能保留下來。僅在參照與序號相符的情況下才重建路徑;否則,應保留孤立檔案,而非虛構資料夾間的關聯。.

將提取的檔案儲存至另一個實體裝置。編輯新的開機區塊使其指向舊的 MFT,並不等同於恢復檔案:分配映射、索引、系統記錄及其他元資料可能屬於不同的檔案系統實例。.

7. 為何復原能成功——以及為何會失敗

基於元資料的復原之所以能成功,是因為舊記錄會保留檔案的識別碼、邏輯大小及資料映射關係,而映射的內容仍可讀取。即使 Windows 已不再將這些資訊納入其活躍命名空間中,復原工具仍能循著這些關聯進行復原。.

若記錄遺失,基於簽名的資料提取技術有時可直接識別檔案內容。此方法通常會遺失原始檔案名稱與目錄結構,且對於碎片化的檔案而言可靠性較低。X-Ways 將搜尋當前 MFT 以外的 NTFS 記錄與搜尋檔案標頭區分開來,這反映了這兩種不同的資料恢復方法。.

當新的元資料與原始記錄重疊、後續檔案重複使用舊的簇,或是碎片映射資訊遺失時,資料復原的難度便會增加。有效的檔案名稱並不能證明內容完整無缺;可辨識的第一頁或影片標頭,也無法證明後續的碎片仍完整保存。.

SSD 還有一項額外條件。Windows 格式化時會發送 TRIM/刪除通知;微軟的 格式 文件包含 /NoTrim 以壓制這些資料。這是一項格式化選項,而非資料遺失後的補救措施。視裝置及儲存路徑而定,即使在 WinHex 中未可見傳統的覆寫痕跡,被捨棄的區段也可能不再返回原始位元組。因此,快速格式化並不能保證資料必定可恢復。.

8. 在重新使用磁碟之前,請先驗證已擷取的資料

請將原始影像和範圍圖保留至驗證完成為止。有關實用的掃描與匯出工作流程,請參閱 從已格式化的硬碟中恢復檔案.

如有可用,請將恢復的檔案與格式化前的清單進行比對。比較檔案名稱、大小、資料夾關係及雜湊值與已知的原始檔案。若無基準雜湊值,請開啟文件並檢視其頁面、測試壓縮檔、以全解析度檢視圖片,以及播放完整的影片檔案。.

請將受損或遺失的檔案與已驗證的檔案分開記錄。若重建的 MFT 沒有解析錯誤,即表示元資料可讀;若匯出的內容可正常使用,則表示檔案已成功恢復。要實現完全恢復,必須將預期資料集納入考量。.

常見問題

快速格式化會覆寫整個 NTFS MFT 嗎?

未必。它會初始化一個新的檔案系統,其元資料寫入操作可能會覆寫某些舊記錄。視佈局與捨棄行為而定,其他 MFT 區域可能仍會保留在當前表格之外。.

當檔案的 MFT 記錄消失時,檔案還能存活嗎?

是的,部分非駐留內容可能仍可供分割。若缺少對應關係,將使碎片化檔案更難重建;而若儲存這些內容的記錄被覆寫,駐留內容便會消失。.

MFT 鏡像能否還原每筆檔案記錄?

No. $MFTMirr 僅保護 MFT 的部分初始區段,而非所有使用者檔案的完整清單。格式化操作亦可為新檔案系統初始化一個鏡像。.

新卷位圖中的零位是否表示舊資料已被刪除?

不。它描述的是在新檔案系統中可供分配的空間。它並不能確定底層位址所返回的內容是原始內容、零值,還是已被替換的資料。.

舊的 MFT 記錄是否仍可能處於「正在使用中」狀態?

是的。一個已分離的記錄可以保留來自先前檔案系統的標記。這些標記並不會使其成為目前活躍資料表的一部分;應結合其位置及周邊的元資料一併解讀。.

還原舊的開機區段是否能撤銷格式化?

僅靠它本身是不行的。它無法逆轉元資料的覆寫、刪除或後續寫入操作。從映像檔中提取尚存的檔案,可避免假設所有舊結構都保持足夠的一致性,以致能安全掛載。.

Jason 是一位擁有超過 15 年實務經驗的資料復原與技術支援專家。 他長期與第一線使用者密切合作,處理棘手的資料遺失案例,並針對誤刪資料、磁碟格式化、檔案系統損毀、分割區遺失、系統故障及其他緊急資料復原情況,提供實用的復原解決方案。其專業領域還涵蓋備份與還原、檔案修復及災難復原,並特別注重提供安全、可靠且技術上精準的指導。.