Reflota
从磁盘、U 盘和存储卡(NTFS、FAT32、FAT16、FAT12 和 exFAT)恢复文件,包括你已删除的文件。免费、开源,且为只读模式。
当 Windows 提示“磁盘未格式化”、某个文件夹打不开或资源管理器卡死时,文件往往仍在磁盘上。Reflota 通过直接读取磁盘来重建它们:在 NTFS 中读取整个主文件表(MFT),并利用每个文件保存的自身所在文件夹信息构建文件夹树;在 FAT 和 exFAT 中读取文件夹并沿着簇链跟踪。
它还会找到已删除的文件,并告诉你其中有多少仍可恢复。如果磁盘被格式化或已经没有文件名,它可以按内容搜索文件、查找丢失的分区,并对正在故障的磁盘做安全复制。
状态:beta。它能用,但每块损坏的磁盘都不一样。如果可以,请先用重要内容的副本测试。以下新功能尚未在真实磁盘上测试(仅用测试镜像验证,未用硬件验证):FAT16/FAT12、相机 RAW/PSD/RAR 搜索、碎片化 JPEG 重建、按名称搜索和分阶段复制。如果你在真实磁盘上测试了其中某项,请在 Issues 中说明结果。
状态:beta。它能用,但每块损坏的磁盘都不一样。如果可以,请先用重要内容的副本测试。
以下新功能尚未在真实磁盘上测试(仅用测试镜像验证,未用硬件验证):FAT16/FAT12、相机 RAW/PSD/RAR 搜索、碎片化 JPEG 重建、按名称搜索和分阶段复制。如果你在真实磁盘上测试了其中某项,请在 Issues 中说明结果。
下载
从 Releases 部分下载 Reflota.exe。无需安装,也不需要 Python。
由于程序没有数字签名,Windows 可能会显示“Windows 保护了你的电脑”:点“更多信息”→“仍要运行”。一些杀毒软件不信任直接读取磁盘的程序;代码是开放的,你可以自己编译 .exe(见下文)。每个 Release 旁边都会发布 SHA256 哈希,用于核对下载是否损坏。
使用方法
- 打开 Reflota。会显示你的磁盘和驱动器列表。
- 勾选你要恢复的内容,全部都在同一棵树中:勾选磁盘或分区 → 复制全部内容。进入分区后只勾选文件夹或文件
Windows 不允许在没有管理员权限的情况下“裸读”磁盘(任何恢复程序都会遇到这种情况)。Reflota 启动时不请求权限,只有当你点击某个磁盘要读取它时才请求;此时会带着 Windows 的提示重新打开。该程序从不会写入源磁盘。
工具(“工具”菜单)
先在列表中选择一个磁盘或分区。
按内容查找文件。它通过文件的内部结构来识别文件,不需要文件名或文件夹。当磁盘被格式化、文件表已被破坏,或已删除文件丢失了名称时,这个功能很有用。你可以只搜索空闲空间(速度快,适合找回已删除内容),也可以搜索整个磁盘或分区。结果会出现在同一棵树中,按类型分组,并像其他内容一样恢复(勾选并 RECUPERAR)。可检测:照片(JPG、PNG、GIF、BMP、WebP、HEIC、TIFF)、相机 RAW 照片(CR2、CR3、NEF、ARW、DNG、ORF、RW2、PEF、RAF)、Photoshop 的 PSD/PSB、视频(MP4/MOV/3GP、AVI、MKV/WebM)、音频(MP3、M4A、WAV)、文档(PDF、DOCX、XLSX、PPTX、ODT/ODS/ODP、DOC/XLS/PPT、EPUB)、压缩文件(ZIP、RAR、7Z、JAR、APK)和 SQLite 数据库。每个文件的精确长度通过读取其结构计算(不会“凭感觉”截断),包含其他文件的文件(例如照片中的缩略图)会完整恢复。原始名称无法恢复:它们会按编号输出(recuperado_00012.jpg)。原本碎片化的文件(被分成不连续片段)通常无法重新拼接,可能恢复得不完整或混在一起,例外是 JPEG 照片:如果你勾选“重建碎片化 JPEG 照片”,Reflota 会解码照片直到它不再有效,并寻找延续它的片段;只有在结果完全吻合(所有图像块和文件结尾)时才交付。这样会慢得多,适用于“baseline”JPEG(相机和手机拍摄的那些;不适用于渐进式 JPEG),并且当碎片很多或空洞里充满其他相似照片时可能无法成功:这种情况下照片干脆不会出现(它不会故意交付一张错误的照片,但最好检查结果)。
查找丢失的分区。它会扫描整个磁盘,寻找 NTFS、FAT32、FAT16/12 和 exFAT 分区的起始位置,即使分区表已被删除,甚至引导扇区被破坏也可以(会使用其备份副本)。找到的分区会添加到列表中。在大磁盘上可能耗时较长,并且可以停止。
创建磁盘镜像(安全副本)。当磁盘出现故障时,最好的做法是只将其复制一次到文件中,然后在这份副本上操作,而不要继续折腾原盘。复制按阶段进行,就像专业救援工具那样:先快速读取所有能正常读取的内容(跳过故障区域以免反复尝试),然后修剪损坏区域的边缘,接着逐扇区读取,最后重试无法读取的扇区。这样能以对磁盘最小的损耗抢救出尽可能多的数据。始终无法读取的扇区会保留为零,并记录在 .malos.txt 中。进度保存在 .mapa 中:如果中断(或断电),会从那里精确继续。之后你把镜像添加到列表,并从那里恢复。
重要提示
- 停止使用损坏的磁盘。每一次新的写入都可能覆盖你想恢复的内容。
- 始终复制到另一个磁盘。Reflota 拒绝复制到正在读取的同一磁盘。
- 如果磁盘发出奇怪的声音或频繁消失,请关闭它:这是物理问题,最好交给专业服务。
它能做什么,不能做什么
- 读取物理磁盘、USB 驱动器、存储卡和磁盘镜像(.img)。
- 即使存在无法读取的扇区也会继续:用零填充,将文件标记为部分恢复,并记录在 recuperacion_log.csv 中。
文章标题:Show HN: Reflota — 面向 NTFS/FAT 磁盘的开源数据恢复工具,支持分阶段复制
正文:
- 如果引导扇区损坏,会尝试备份副本(FAT32、exFAT)以及 MFT 的其它典型位置(NTFS)。FAT16/FAT12 不保存引导扇区的副本。
- 无法找到所属文件夹的文件会显示在 _huerfanos 中。
关于已删除的文件
- 删除文件时,系统通常会保留其名称和内容所在的位置,但会释放那块空间。如果之后又写入了其它文件覆盖上去,内容就会丢失。Reflota 会检测这种情况,并显示为可恢复、N% 完好或已被覆盖(已覆盖的不复制;部分覆盖的会复制并给出提示)。
- NTFS:使用 MFT 中的空闲记录和空闲空间位图($Bitmap)。这是最可靠的方式。
- FAT32、FAT16/12 和 exFAT:使用已删除的目录项。这些格式会清除簇链,因此 Reflota 假定文件位于一段连续区块中;如果文件原本是碎片化的,即使显示为“可恢复”,结果也可能出现内容混杂。在 FAT32 中,短文件名(8.3 格式)的文件在删除后会丢失文件名的第一个字母(变成 _orrame.pdf)。
- 如果磁盘被格式化,或文件原来所在的文件夹已不存在,已删除文件可能出现在 _borrados 中(源文件夹未知)。
- 始终建议恢复到另一块磁盘,并在发现问题后立即停止使用原磁盘。
暂不支持的功能
- 不支持恢复其它文件系统,如 ext4、APFS 或 ReFS,也不支持未解密的 BitLocker 磁盘。
- 按内容搜索不会重建文件名、文件夹或日期,并且只能拼接 baseline JPEG 照片的片段(不支持其它碎片化的格式)。
- 按内容搜索不会检测非常少见的格式,也不会检测使用 ZIP 压缩的 PSD 以及碎片化的渐进式 JPEG。
- 加密文件(EFS)或被 NTFS 压缩的文件会被跳过,并记录在日志中。
- 不修复磁盘,也不处理物理故障。
命令行
reflota.exe --source \\.\PhysicalDrive5 --particiones
reflota.exe --source \\.\PhysicalDrive5 --offset 608174080 --ls /Programacion --borrados
reflota.exe --source \\.\PhysicalDrive5 --offset 608174080 --copiar /Programacion --dest D:\Recuperado
自行编译
使用 Python 3.8+(Windows):
python reflota.py # 直接运行,无需安装任何东西
.\build_exe.ps1 # 生成 dist\Reflota.exe
为 .exe 签名(可选,可去除 Windows 警告)
发布的 .exe 未经签名。要为其签名,需要代码签名证书(可购买,开源项目也可向 SignPath Foundation 等服务免费申请)。拿到 .pfx 格式的证书后,这样签名(需要 Windows SDK 中的 signtool):
.\firmar_exe.ps1 -Pfx C:\ruta\certificado.pfx
随附的脚本未经测试(没有真实证书无法验证)。即使已签名,SmartScreen 仍可能在一段时间内发出警告,直到该程序积累起信誉。
许可证
MIT:可自由使用、复制和修改。见 LICENSE。
English summary
Show HN: Reflota——面向 NTFS/FAT 磁盘、支持分阶段复制的开源数据恢复工具
Reflota 是一款免费、开源、只读的文件恢复工具,支持 NTFS、FAT32、FAT16/FAT12 和 exFAT。在 NTFS 上,它会读取整个 $MFT,并根据每个文件的父级引用重建文件夹树;在 FAT32/exFAT 上,它会遍历目录和簇链。它还会在原始文件夹中列出已删除文件,并告诉你每个文件还有多少内容保持完整。一个树状视图显示磁盘 → 分区 → 文件夹:勾选一个磁盘即可复制全部内容,也可以只勾选你想要的内容;大小会自动计算。它提供名称搜索(支持通配符、不区分重音、包含已删除文件)。它还可以按内容雕刻文件(支持 30 多种格式,包括相机 RAW、PSD 和 RAR,可从其结构中读取精确长度,并可选择较慢地重组碎片化的基线 JPEG),即使引导扇区被破坏也能找到丢失分区,并为故障磁盘制作安全、分阶段、可续传的镜像(ddrescue 风格:先处理容易区域,再 trim、scrape、retry)。最近新增的功能已在合成测试镜像上验证,尚未在真实硬件上验证。绝不写入源磁盘。Windows 上原始磁盘访问需要管理员权限;Reflota 可在没有管理员权限的情况下启动,仅在你打开磁盘时才请求权限。采用 MIT 许可证。