# baize-disk **Repository Path**: t-ai-fly/baize-disk ## Basic Information - **Project Name**: baize-disk - **Description**: 磁盘恢复工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-06-10 - **Last Updated**: 2026-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BaizeDisk Recovery 一款用 Rust 编写的 Windows 磁盘数据恢复命令行工具,采用三层恢复引擎,覆盖从误删文件到格式化恢复等多种场景。同时支持通过 ADB 扫描 Android 手机存储中的可恢复文件。 ## 功能特性 **三层磁盘恢复引擎** | 层级 | 模式 | 说明 | 恢复置信度 | |------|------|------|-----------| | Layer 1 | `deleted` | 已删除文件扫描:解析 NTFS MFT 记录 / FAT 目录项,直接定位被标记为已删除的文件 | 95% | | Layer 2 | `carve` | 快速格式化恢复:通过文件魔数(Magic Bytes)签名扫描,从磁盘原始数据中识别并提取文件 | 70-90% | | Layer 3 | `full` | 全盘深度扫描:扫描整个磁盘所有扇区,重建文件索引,支持 AI 辅助文件名重构(接口预留) | 50-70% | **ADB 手机恢复** | 命令 | 说明 | |------|------| | `adb-list` | 列出已连接的 Android 设备(需 USB 调试) | | `adb-scan` | 扫描手机存储:主目录 + 回收站 + MediaStore 最近删除 | | `adb-recover` | 从手机拉取文件到本地 | **支持的文件系统** - NTFS — MFT 全量扫描(双阶段:Data Runs 跟随 + 线性延伸)、USA 校验修复、非驻留 Data Runs 读取 - FAT32 — BPB 解析、FAT 簇链追踪、0xE5 已删除目录项恢复 - exFAT — 基础检测(完整解析待实现) **Carve 引擎支持的文件类型(22 种)** - 图片:JPEG、PNG、GIF、BMP、WebP、TIFF - 文档:PDF、OOXML(Word/Excel/PowerPoint)、OLE2(旧版 Office) - 音频/视频:MP3、MP4、AVI、FLAC、WAV - 压缩包:ZIP、RAR、7-Zip、GZIP - 数据库:SQLite - 可执行文件:PE(Windows)、ELF(Linux) ## 环境要求 - **操作系统**:Windows 10 / 11(磁盘扫描需管理员权限) - **Rust**:1.70+(仅编译时需要) - **ADB**:Android 手机恢复需要安装 [platform-tools](https://developer.android.com/tools/releases/platform-tools) ## 编译 ```bash git clone https://gitee.com/t-ai-fly/baize-disk.git cd baize-disk # Debug 编译 cargo build # Release 编译(推荐,产物约 2MB) cargo build --release ``` 编译产物位于 `target/release/baize-disk.exe`,无需额外依赖即可运行。 ## 使用方法 磁盘相关命令需要**以管理员身份运行**命令提示符或 PowerShell。 ### 查看帮助 ```bash baize-disk --help baize-disk scan --help baize-disk recover --help baize-disk adb-scan --help ``` ### 列出磁盘 ```bash baize-disk list ``` 输出示例: ``` +====================================+ | BaizeDisk Recovery v0.1.0 | | 磁盘数据恢复工具 | +====================================+ 盘符 卷标 文件系统 总大小 可用 设备路径 ---------------------------------------------------------------------- C: Windows NTFS 118.25 GB 12.31 GB \\.\C: D: 本地磁盘 NTFS 200.03 GB 55.36 GB \\.\D: E: 新加卷 NTFS 399.64 GB 376.21 GB \\.\E: ``` ### 扫描已删除文件 ```bash # Layer 1: 扫描已删除文件(推荐优先使用) baize-disk scan -d D: -m deleted # Layer 2: 快速格式化恢复(扫描前 10%,最大 20GB) baize-disk scan -d D: -m carve # Layer 3: 全盘深度扫描(耗时较长) baize-disk scan -d D: -m full ``` 扫描完成后会显示结果表格,包含文件名、大小、置信度、恢复层级和时间戳。 ### 恢复文件 ```bash # 交互式选择要恢复的文件 baize-disk recover -d D: -m deleted -o E:\recovery # 自动恢复所有找到的文件 baize-disk recover -d D: -m deleted -o E:\recovery --all # 只恢复指定扩展名的文件 baize-disk recover -d D: -m carve -o E:\recovery --all -f jpg,png,pdf ``` 交互模式下支持灵活的文件选择: - 输入单个编号:`3` - 逗号分隔多个编号:`1,3,5` - 范围选择:`1-10` - 混合使用:`1-5,8,10-15` - 输入 `all` 或 `*` 选择全部 ### 模式别名 | 模式 | 别名 | |------|------| | `deleted` | `del`、`1` | | `carve` | `quick`、`2` | | `full` | `deep`、`3` | ## ADB 手机恢复 适用于通过 USB 连接的 Android 手机(MTP 模式下无法做扇区级扫描,需通过 ADB 协议访问)。 ### 前提准备 1. **开启 USB 调试**:设置 → 关于手机 → 连续点击"版本号" 7 次 → 返回设置 → 系统和更新 → 开发人员选项 → 打开"USB 调试" 2. **安装 ADB**:下载 [platform-tools](https://developer.android.com/tools/releases/platform-tools) 并添加到系统 PATH 3. **授权连接**:USB 连接电脑后,手机上弹出的授权对话框点击"允许" ### 列出设备 ```bash baize-disk adb-list ``` ### 扫描手机存储 ```bash baize-disk adb-scan # 如果有多个设备: baize-disk adb-scan -s <序列号> ``` 扫描范围: - `/sdcard/DCIM`、`Pictures`、`Download`、`Documents`、`Music`、`Movies` - `/sdcard/Android/data`、`/sdcard/tencent`(微信/QQ 文件) - 回收站目录(`.Trash`、`.recycle`) - Android 11+ MediaStore 最近删除(系统保留 30 天) - 缩略图缓存目录 ### 恢复手机文件 ```bash # 交互式选择恢复 baize-disk adb-recover -o D:\phone_recovery # 恢复所有文件 baize-disk adb-recover -o D:\phone_recovery --all # 只恢复照片和视频 baize-disk adb-recover -o D:\phone_recovery --all -f jpg,png,mp4,mov ``` ## 项目结构 ``` src/ ├── main.rs # CLI 入口、命令分发、交互选择 ├── adb/ │ └── mod.rs # ADB 设备管理、手机文件扫描与恢复 ├── disk/ │ └── mod.rs # 磁盘枚举、原始设备读写(CreateFileW + FSCTL) ├── fs/ │ ├── mod.rs # 文件系统类型检测(NTFS / FAT32 / exFAT) │ ├── ntfs.rs # NTFS MFT 全量解析(双阶段扫描 + USA 校验) │ └── fat.rs # FAT32 BPB 解析、目录项扫描、簇链恢复 ├── carve/ │ └── mod.rs # 文件魔数签名引擎(22 种文件类型) ├── scanner.rs # 异步扫描调度器(后台线程 + 消息通道) ├── recovery/ │ └── mod.rs # 文件数据恢复与写入 └── ai/ └── mod.rs # AI 分析接口(预留,含 Stub 规则实现) ``` ## 技术细节 ### NTFS MFT 全量扫描 采用双阶段策略确保不遗漏任何条目: - **Phase 1**:解析 $MFT 文件(entry #0)的 Data Runs,跟随非连续簇读取(处理碎片化 MFT) - **Phase 2**:从 MFT 起始位置线性延伸扫描 512MB(覆盖 `$ATTRIBUTE_LIST` 导致的 Data Runs 不完整) - 使用 HashSet 去重,连续 500 条无效记录自动停止 - 支持 Update Sequence Array (USA) 校验修复 ### FAT32 恢复流程 1. 解析 BPB(BIOS Parameter Block)获取簇大小、FAT 表位置等参数 2. 扫描所有目录项,识别 0xE5 删除标记 3. 从 FAT 表追踪簇链(删除后簇链可能部分被覆盖) 4. 读取连续或链式簇数据 ### Carve 引擎 - 使用 `memchr` 库进行高效子串匹配 - 4MB 分块读取,跨块边界处理 - 文件尾部签名搜索估算文件大小 - OOXML 子类型识别(区分 docx/xlsx/pptx) - RIFF 容器子类型识别(区分 AVI/WAV/WebP) - MP4 ftyp brand 识别 ## 依赖项 | 库 | 用途 | |---|------| | `clap` 4 | CLI 参数解析 | | `byteorder` | 二进制字节序转换 | | `memchr` | 高效字节序列搜索 | | `chrono` | 时间格式处理 | | `anyhow` | 错误处理 | | `crossbeam-channel` | 线程间消息通信 | | `serde` | 序列化 | | `windows-sys` 0.59 | Windows API 原始 FFI 绑定 | ## 注意事项 - 磁盘扫描**必须以管理员权限运行**,否则无法访问 `\\.\X:` 原始磁盘设备 - Layer 1 恢复已删除文件的成功率取决于文件数据是否被新数据覆盖 - Layer 2 Carve 模式默认扫描磁盘前 10%(最大 20GB),Full 模式扫描全盘 - 恢复的文件请保存到**不同于源磁盘**的分区,避免覆盖待恢复数据 - 部分恢复的文件可能已损坏,建议恢复后验证文件完整性 - ADB 手机恢复依赖 Android 系统的回收站和 MediaStore 机制,无法做扇区级原始扫描 - AI 文件名重构功能(Layer 3)接口已预留,需接入 API 后启用 ## License MIT