NTFS 数据恢复底层原理:MFT 主文件表、删除真相、快速格式化、$LogFile 日志,误删/格式化/Raw 分区恢复方法。
NTFS(New Technology File System)是 Windows 的核心文件系统。它把每个文件、每个目录都登记在 MFT(主文件表) 里,每条 MFT 记录存着文件名、大小、时间戳、权限,以及数据到底存放在磁盘的哪些簇上。NTFS 卷的中间还有一份 MFT 镜像(MFTMirr),专门用于 MFT 损坏时的自愈。
删除一个文件,NTFS 不会去擦掉数据,只做两件事:把 MFT 里该文件的记录标志位改成「已删除」,并把它占用的数据簇标记为「可用」。数据本身原封不动留在盘上,直到被新写入的数据覆盖。这就是误删后能恢复的底层依据。
快速格式化只重建 MFT 和元数据结构,不清零数据区。格式化后盘上的文件内容大多还在,通过扫描残留的 MFT 记录、$LogFile 日志和数据区特征,可以重建目录结构找回文件。
1)MFT 扫描:解析残留 MFT 记录,恢复目录结构和文件名;2)$LogFile 日志回放:NTFS 的日志记录了文件操作历史,可用于恢复近期删除;3)数据区特征扫描:按文件签名(如 JPEG 头、PDF 头)全盘扫描,找回 MFT 已丢失的文件。
Q: NTFS 误删文件能恢复吗?
A: 能。删除只是把 MFT 记录标记为已删除、数据簇标记为可用,数据还在盘上。立即停止写入、尽快送检,只要没有被覆盖,逻辑故障通常能取回大部分。
Q: NTFS 快速格式化能恢复吗?
A: 通常能。快速格式化只重建 MFT 和元数据,数据区不清零。格式化后未大量写入的情况下,扫描 MFT 残留和日志可恢复大部分文件。
Q: NTFS 分区变成 Raw 能修复吗?
A: 能。Raw 通常是分区表或引导扇区($Boot)损坏,导致系统无法识别 NTFS。修复引导扇区或重建分区表后,数据通常完整保留。
Q: NTFS 和 FAT32/exFAT 恢复有什么区别?
A: NTFS 有 MFT 集中管理元数据,恢复时可先解析 MFT 拿到目录结构和文件名,效率高;FAT/exFAT 用文件分配表链式管理,删除后簇链断开,需扫描重建,难度更高。
NTFS 的恢复能不能做,取决于元数据还在不在。下面这些是文件系统规范里的固定值, 拿到镜像后用任意十六进制工具都能自己核对,不必相信任何"经验判断"。
| 项目 | 取值 / 位置 | 说明 |
|---|---|---|
| 引导扇区签名 | 偏移 0x03,`NTFS `(含空格共 8 字节) | 用于确认这不是 exFAT/FAT32 残留 |
| 扇区大小 | 偏移 0x0B,2 字节小端(常见 512 / 4096) | 决定后续所有偏移换算 |
| $MFT 起始簇号 | 偏移 0x30,8 字节 | MFT 不一定从 4 号簇开始,必须按这个值算 |
| MFT 记录大小 | 通常 1024 字节(簇记录字段为负值时是 2^n) | 记录总数决定能扫出多少条目 |
| 记录签名 | 偏移 0 处 `FILE`(0x454C4946) | 被覆盖的记录这里会变成 0 或乱码 |
| 更新序列数组 USA | 偏移 0x30 起,按扇区数为长度 | 跨扇区的记录必须做 USA 修正才能读属性 |
| $FILE_NAME 属性 | 类型 0x30 | 含原始文件名与父目录引用 |
| $DATA 属性 | 类型 0x80(常驻 / 非常驻) | 非常驻时列出 runlist,偏移即数据位置 |
# 1) 确认引导扇区(前 512 字节里的签名与关键字段)
xxd -l 512 /dev/sdX1 | head -4
# 2) 解析卷信息:簇大小、MFT 位置、记录大小
ntfsinfo -m /dev/sdX1
# 3) 列出根目录,并检查 MFT 里已分配/已删除条目
fls -p -r /cases/ntfs.dd | head -30
fls -d -p /cases/ntfs.dd > deleted.txt # 只看已删除项
# 4) 按 inode 号导出单个文件(只读,不改镜像)
icat /cases/ntfs.dd 12345-128-1 > recovered.bin
判断顺序:先看引导扇区能不能读出正确参数,再看 MFT 记录里 `FILE` 签名还剩多少, 最后看 $FILE_NAME 与 $DATA 的 runlist 是否完整。三步都能过,才谈得上按目录树整体导出; 记录被覆盖过,就只能靠文件内容特征做签名扫描,出来的目录结构会是平铺的。