简短回答: NTFS 上已删除的文件,通常在其 MFT 记录槽被重用、其数据簇被覆写之前都可以恢复。对于小文件而言,内容往往就保存在 MFT 记录本身里,即便簇已不在也仍可存活。可靠的工作流是:停止使用该卷、对其做镜像,然后要么用取证解析器回放 MFT,要么对磁盘做 FILE 签名的「雕刻」恢复。
为什么删除并不擦除
当 Windows 从 NTFS 卷上删除一个文件时,会发生三件事,而有一件事不会发生:
- 该文件 MFT 记录中的 in-use 标志被清除。
- 持有该文件数据的簇在
$Bitmap中被标记为空闲。 - 父目录中的索引条目被移除。
不会 发生的:实际上没有任何东西去覆写记录或这些簇。它们只是被标记为可供下一次分配使用。在其他东西占用它们之前,文件都是可恢复的。逐字段的细节见在 NTFS 上删除文件时,哪些信息还会留下。
第 1 步:停止对该卷的写入
你对该卷的每一次写入,都有可能重用已删除记录的槽位或其数据簇。如果该文件很重要:
- 关闭曾经触碰过它的应用。
- 如果该文件位于系统盘且系统仍在运行,操作系统本身就在持续写入。请关机,或从外部介质引导。
- 如果是外接驱动器,立即卸载。
第 2 步:对磁盘做镜像
在副本上工作,绝不要动原盘。常见选项:
- FTK Imager —— 免费,带图形界面,生成
.dd或.E01镜像。读取时同时对源做哈希。 dd(Linux/macOS) —— 比特对比特复制。dd if=/dev/sdX of=disk.img bs=4M conv=noerror,sync status=progress。ddrescue—— 较慢,但能容忍故障盘上的读取错误。
取证采集完成后立即对镜像计算哈希(SHA-256)。之后每一步都在镜像上进行。
第 3 步:用三种方法之一进行恢复
MFT 回放 —— 解析 $MFT(从镜像中提取出来,或直接原地读取),使用能列出已删除记录的工具。已删除文件的名称、时间戳,以及(对小文件而言)数据,都可以从记录本身恢复出来。
文件系统感知的恢复工具 —— 这些工具读取活动文件系统(或镜像),并把已删除文件呈现出来供你按需还原:
- R-Studio —— 商业软件,在 NTFS 上是分析师的首选。可以处理复杂损坏。
- TestDisk + PhotoRec —— 免费、成熟,擅长处理分区损坏和签名雕刻。
- Recuva —— 消费级软件,但用于单盘单文件的恢复也够用。
签名雕刻(signature carving) —— 当 MFT 已不存在时,scalpel、foremost 或 PhotoRec 会扫描原始镜像,寻找已知的文件签名(JPEG FF D8 FF、PNG 89 50 4E 47、ZIP 50 4B 03 04 等等),并把找到的东西重新拼起来。被雕刻出来的文件会失去文件名和时间戳 —— 这些信息原本就存放在 MFT 中 —— 但字节本身能够回来。
什么是真正不可恢复的?
- 被覆写的簇。 现代 HDD 上,没有任何现实可行的途径能够恢复已被覆写一次的数据。早期取证文献里那种依靠「残留磁化」做恢复的说法,并不适用于本十年生产的硬盘。
- 被 TRIM 回收的 SSD 块。 一旦 SSD 控制器对某个块执行了 TRIM,底层闪存就会在垃圾回收阶段被清零。数据消失得很快。
- 没有密钥的加密卷。 没有恢复密钥的 BitLocker、VeraCrypt 或 LUKS 加密的 NTFS 卷,根本无法恢复 —— 明文从一开始就没有触及过磁盘。
何时只能依靠 MFT 恢复
如果该文件是一个小文本文件、小 JSON 配置或小脚本,数据很可能是 常驻 的 —— 就内联保存在 MFT 记录里,而不是放在单独的簇中。即便 $Bitmap 已被覆写数十次,常驻字节仍会留在记录中,直到该槽被重用。见常驻数据。
对这类文件,浏览器解析器往往是最快的路径:拖入你导出的 $MFT,过滤出已删除条目,查找带常驻 $DATA 的记录,把字节复制出来即可。
常见问题
NTFS 上已删除的文件能保留多久还可恢复?
直到 MFT 槽被重用、数据簇被覆写为止。在繁忙的系统上是几个小时;在闲置的系统上可以是几个月。并没有固定的计时器。
清空回收站会让恢复更难吗?
不会。回收站只是每个卷上的一个隐藏目录($Recycle.Bin)。「清空」相当于按常规方式删除文件 —— 同样的恢复技术依然适用。
用 del /F 或 shift+delete 删除的文件还能恢复吗?
可以 —— 这些方式会跳过回收站,但删除方式是一样的。MFT 记录在被重用之前都还在那里。
已格式化的 NTFS 盘上还能恢复文件吗?
快速格式化只重写引导扇区和一个新的 $MFT。绝大多数旧数据簇仍完好,过去的 MFT 记录也很多还在(NTFS 会复用相同的起始偏移)。签名雕刻能找回不少东西。完整格式化会把整个卷清零 —— 那些数据就真的没了。