ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

从零实现的多文件系统数据恢复工具:fsrec 项目完全解析

从零实现的多文件系统数据恢复工具:fsrec 项目完全解析 从零实现的多文件系统数据恢复工具fsrec 项目完全解析写在前面在日常使用电脑的过程中误格式化硬盘、误删文件、分区表损坏等情况时有发生。面对这些数据丢失的困境市面上虽然有各种恢复软件但要么收费高昂要么闭源不透明。今天给大家介绍一款我最近开源的跨文件系统数据恢复工具——fsrec。项目地址https://github.com/Antruly/fsrecfsrec 是一款面向 Windows 的数据恢复工具不依赖任何第三方恢复引擎而是直接从文件系统底层数据结构出发——解析引导扇区BPB、NTFS 主文件表$MFT、FAT 目录项与数据运行Data Run在内存中重建完整的目录树[reference:0][reference:1]。你可以像浏览普通文件一样浏览那些已被删除、被清空回收站甚至在分区被误格式化后仍残留在磁盘上的文件并按原目录结构把它们恢复到另一块磁盘。项目背景与技术选型作为一个从零实现的多文件系统数据恢复工具fsrec 的技术栈选择如下[reference:2][reference:3]维度说明语言 / 运行时C17MSVCWindows x64网络层libuvcppHTTP / WebSocket / 静态文件JSONnlohmann/json单头文件已内置前端单文件原生 HTML/CSS/JS零构建步骤选择 C 是为了更好地进行底层磁盘操作和性能优化网络层基于 libuvcpp 库提供 HTTP 服务和 WebSocket 实时推送前端则采用单文件设计用户无需任何构建工具即可直接使用。功能特性一览fsrec 提供了完整的数据恢复工作流从磁盘扫描到文件恢复再到实时监控一应俱全[reference:4][reference:5]核心恢复能力多文件系统支持— 同时支持NTFS / FAT12 / FAT16 / FAT32 / exFAT五种文件系统[reference:6]磁盘枚举— 列出物理磁盘与盘符自动识别并锁定系统盘磁盘 0禁止选择防止误操作引导扇区解析— 读取 BPB字节/扇区、扇区/簇、$MFT起始 LCN、记录大小等$MFT解析— 遍历文件记录USA 修复提取$STANDARD_INFORMATION/$FILE_NAME/$DATA数据运行解析— 支持 resident / non-resident 属性含稀疏簇处理目录树重建— 依据父引用与文件名含$MFT编号兜底构建完整树分区级扫描—raw_scan_all遍历整盘定位每个分区NTFS 经$MFT搜索FAT/exFAT 经 MBR 分区表并分别缓存[reference:7]FAT/exFAT 专项解析— 同时解析 FAT12/16/32 与 exFATBPB / 目录项 / FAT 链 / exFAT 文件流名称项[reference:8]交互与体验搜索过滤— 前端按名称 / 类型快速筛选文件选择性恢复— 保留原目录结构写入输出目录同名文件自动改名追加_1、_2…支持暂停 / 继续 / 停止[reference:9]实时进度— WebSocket 推送总体进度 当前文件 每文件字节进度刷新页面后自动恢复进行中的任务[reference:10]运维与监控磁盘监控— 实时读取速度全局 单盘、点击磁盘展开任务管理器风格动态折线图、磁盘热插拔自动刷新并提示任务中断[reference:11]安全与空间— 源盘锁定目录选择器禁用源盘、空间预估与不足警告[reference:12]工作原理fsrec 的工作流程可以概括为以下几个步骤Web UI -- HTTP/WebSocket -- libuvcpp 服务器 | -- Scanner 后台扫描 | | | -- 引导扇区解析BPB | -- $MFT / FAT 目录项解析 | -- 数据运行 / FAT 链解析 | -- 目录树重建 | -- 扫描结果缓存 | -- Restorer 后台恢复 | -- 输出目录读取以CreateFile(\\\\.\\PhysicalDriveN, GENERIC_READ)只读打开源盘绝不在源盘写入定位解析引导扇区 BPB找到文件系统元数据起始位置解析遍历文件记录NTFS 的$MFT或 FAT 的目录项修复 USA提取属性与数据运行重建目录树恢复按用户勾选的路径将文件内容含已删除但仍残留的数据簇原样写入另一块磁盘快速开始直接下载推荐从 Releases 下载fsrec_Setup_xxx.exe双击安装全中文向导[reference:13]。安装完成后[reference:14]自动触发 UAC 提权requireAdministrator清单服务在后台启动并自动打开浏览器访问 Web UI选择源磁盘 → 扫描 → 勾选文件 → 恢复到另一块磁盘从源码构建前置条件Windows、Visual Studio 2022MSVC需匹配预编译的 libuvcpp 二进制、CMake ≥ 3.20[reference:15]。gitclone https://github.com/Antruly/fsrec.gitcdfsrec cmake-S.-Bbuild-Ax64 cmake--buildbuild--configRelease产物为 build\Release\recovery_server.exe运行时依赖同目录下的 uvcpp.dll、uv.dll、llhttp.dll、libssl-3-x64.dll、libcrypto-3-x64.dll。recovery_server.exe# 监听 0.0.0.0:8080自动打开浏览器recovery_server.exe--port8090# 指定端口recovery_server.exe --no-browser# 不自动打开浏览器健康检查curl http://localhost:8080/ping → {“status”:“ok”,“name”:“fsrec”,“version”:“1.0.10”}API 概览fsrec 提供了一套完整的 RESTful API方便二次开发或集成方法路径说明GET/ping健康检查GET/api/physical_disks物理磁盘列表POST/api/raw_scan_all遍历整盘、定位所有分区GET/api/scans已完成的扫描含持久化缓存GET/api/active进行中的扫描/恢复任务GET/api/scan/{id}/status扫描进度GET/api/scan/{id}/results目录树POST/api/scan/{id}/pause|resume|stop控制扫描任务POST/api/recover提交恢复任务GET/api/recover/{id}/status恢复进度POST/api/recover/{id}/pause|resume|stop控制恢复任务GET/api/fs/drives盘符与磁盘映射GET/api/fs/list?path目录列表POST/api/fs/mkdir新建目录GET/api/fs/space?path目标卷空间信息WS/wsWebSocket 实时推送目录结构fsrec/ ├── CMakeLists.txt ├── src/ │ ├── main.cpp # 入口管理员检测 参数解析 启动服务 │ ├── include/ # types.h / util.h / util.cpp / version.h │ ├── ntfs/ # disk_reader / boot_parser / data_run / mft_parser / tree_builder │ ├── fat/ # FAT12/16/32 与 exFAT 解析模块 │ ├── recovery/ # scanner后台扫描/ restorer后台恢复 │ └── http/ # 路由 WebSocket 推送中心 ├── resources/ # 图标与资源文件 ├── frontend/ │ └── dist/index.html # 线上前端单文件 ├── docs/ │ ├── 使用说明.md # 用户手册 │ └── 免责声明.md ├── packaging/ # Inno Setup 安装脚本 └── scripts/ # 构建与打包脚本最新版本更新亮点fsrec 持续迭代最新版本 v1.0.10 在安全性和稳定性上做了重要改进严格校验源磁盘身份/api/recover 现在按磁盘序列号serial校验源盘序列号为空或全零时回退至「型号 容量」匹配身份不匹配或无法校验时一律拒绝恢复HTTP 409。彻底修复了「拔掉原盘、插入另一块盘占用同一 PhysicalDrive 槽位后仍能恢复错盘数据」的严重问题。权威连接状态显示/api/scans 返回后端计算的 connected 字段界面据此展示不再用磁盘号兜底误判。同槽位换盘识别热插拔检测按全身份识别——磁盘号不变但序列号/型号/容量变化时也能触发刷新界面及时显示断开。此前 v1.0.9 版本还新增了 FAT12/16/32 与 exFAT 文件系统支持并修复了 NTFS 扩展记录$ATTRIBUTE_LIST漏扫问题。安全与注意事项数据恢复涉及用户敏感数据fsrec 在安全方面做了多重保障源盘通过 CreateFile(GENERIC_READ) 只读打开绝不写入源盘恢复输出目录后端会校验并拒绝与源盘 / 系统盘相同的磁盘已删除文件的数据区可能已被覆写不可恢复项会标注同名文件自动追加 _1、_2… 后缀不覆盖请勿在存有重要数据的生产机上随意测试详见 docs/使用说明.md 与 docs/免责声明.md总结fsrec 是一个从零实现的多文件系统数据恢复工具涵盖了从底层磁盘读取、NTFS/FAT/exFAT 文件系统解析、目录树重建到 Web 可视化操作和实时进度推送的完整链路。项目采用 C17 开发前端为单文件 HTML/CSS/JS零构建步骤即可使用。目前项目已开源在 GitHub 上采用 MIT 许可证欢迎 Star、Fork 和提交 PR项目地址https://github.com/Antruly/fsrec技术交流欢迎在 GitHub Issues 中讨论问题或提出建议。如果你对文件系统底层原理感兴趣或者正在寻找一款开源、透明、可定制的数据恢复工具fsrec 值得你一试
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进