資料被覆寫真的就無法復原嗎?業界流傳「覆寫 7 次內可復原」的傳說,但在商業資料復原領域,一次覆寫即意味著原始資料永久消失。真正的挑戰往往在於:使用者以為資料被覆蓋,實際上檔案系統僅更新了中繼資料指標,資料本體仍完整殘留在磁碟未被覆寫區域。本文透過一個真實的 SQL Server 2005 誤刪案例,揭示「覆蓋假象」背後的復原邏輯與關鍵技術。
xiangmu01(MDF 18GB,LDF 30GB)位於 D:\database\。xiangmu001 於 C 槽預設路徑。xiangmu001,重建指向 D 槽。xiangmu01(少一個 0)。xiangmu01.bak,嘗試還原卻發現備份檔損壞。| 策略 | 做法 | 結果 |
|---|---|---|
| 1. 直接判定不可復原 | 認為同名覆蓋破壞檔案頭,放棄處理 | 錯失救援機會 |
| 2. 按檔案類型掃描整個分區 | 提取所有 MDF 檔案片段逐一驗證 | 幾乎必失敗:大型資料庫長期運行導致檔案高度碎片化,非連續儲存 |
| 3. 按資料庫頁面碎片掃描 + NTFS 結構分析 | 排除現存檔案佔用頁面,專掃「閒置空間」中的 SQL 頁面碎片,重組還原 | 成功關鍵:利用 SQL Server 固定頁面結構(每頁 8KB、含頁號、檢驗碼)識別碎片 |
SQL Server 資料庫檔案內部如同小型檔案系統,以 8KB 頁面 為基本單位。每頁包含:頁頭(頁號、物件 ID、索引 ID、檢驗碼)、資料列、位移陣列。即使檔案系統層面的 MFT 記錄被覆寫,頁面層級的特徵碼仍可被識別。
0x01 資料頁、0x02 索引頁)過濾候選頁面。PageID、IndexID、ObjectID、PrevPage/NextPage 指標,將碎片頁面串聯成完整的 B+ 樹結構(聚集索引即資料表本身)。案例中使用國產專業工具 D-Recovery,具備:
RESTORE VERIFYONLY、DBCC CHECKDB、試還原演練。資料復原的本質不是魔法,而是對儲存引擎與檔案系統底層結構的深度理解。下次聽到「資料被覆蓋了無法救」,請多問一句:「是 MFT 被覆蓋,還是資料區真正被重寫?」