# U 盘误删 `zyw` 文件夹数据恢复报告

- **日期**：2026-09-17
- **介质**：USB 存储设备 `/dev/sdc`（型号 F315T，58.6 GiB），分区 `/dev/sdc1`，**exFAT**，簇大小 128 KiB，UUID `A082-9F64`
- **目标**：恢复被误删的根目录文件夹 `zyw`
- **结果**：✅ **完整找回 —— 1735 个文件 / 312,597,522 字节（298.1 MiB），0 处读取失败、0 处簇重叠、文件签名全部校验通过**

---

## 一、结论先行

| 项目 | 结果 |
|---|---|
| 删除的目录 | 根目录 `zyw` → 内含 `私人资料库`（15 个子项） |
| 恢复文件数 | **1735**（另有 114 个空目录） |
| 恢复数据量 | **298.1 MiB**（zip 压缩后 274 MiB） |
| 完整性 | CRC 全通过 · 文件签名全对 · 簇区间 0 重叠 |
| 原始介质 | **全程只读，未写入任何数据** |

**下载地址（局域网）**

- 恢复数据包：http://192.168.31.76:8899/42-U盘数据恢复/zyw恢复-20260917.zip
- 本报告：http://192.168.31.76:8899/42-U盘数据恢复/2026-09-17-U盘误删zyw文件夹恢复报告.md?preview=1

**本机留存路径**

- 恢复后的原始目录树：`/persistent/usb-recover/restored/zyw/`
- 完整整盘镜像（59 GB）：`/persistent/usb-recover/sdc-A082-9F64.img`
- 恢复清单（JSON）：`/persistent/usb-recover/manifest.json`

---

## 二、为什么这次能 100% 恢复

1. **删除时间很近**（当天），被释放的簇尚未被新数据覆盖。
2. **发现后立刻把 U 盘改为只读挂载**，阻断了任何后续写入（这是恢复成功的第一前提）。
3. **exFAT 的删除机制对恢复友好**：删除只把目录项 EntryType 的 **InUse 位（bit7）清零**
   （`0x85 → 0x05`），**文件名、首簇号、文件长度全部原样保留**，
   不像 FAT 那样把首字符覆盖成 `0xE5`。因此 `zyw` 这个名字和整棵树的元数据都是完整的。
4. 该分区上文件普遍为 **连续分配（NoFatChain=True）**，即使 FAT 链已被清空，
   仍可按「首簇 + 长度」物理连续读回。

## 三、技术路线（与上次 ext4 恢复的区别）

本机此前（2026-09-03）为下载中心误删事故做过一次恢复，用的是
**ext4magic 基于 ext4 日志**恢复 `/dev/sda5`。**该方案无法用于本次场景**：

| | 上次（dl-hub 事故） | 本次（U 盘） |
|---|---|---|
| 文件系统 | ext4（**有日志**） | exFAT（**无日志、无日志可重放**） |
| 可用工具 | ext4magic / extundelete | ext4magic、extundelete **均不适用** |
| 恢复依据 | 文件系统日志 | 目录项中残留的元数据 |

本次采用的流程：

```bash
# 1) 立即只读挂载，杜绝写入
sudo mount -o remount,ro /media/zyw/A082-9F64

# 2) 整盘只读镜像（59 GB，约 11 分钟，无读错误）
sudo dd if=/dev/sdc of=/persistent/usb-recover/sdc-A082-9F64.img \
        bs=4M conv=noerror,sync status=progress

# 3) 解析 exFAT 目录项，定位已删除条目（自研解析器）
python3 exfat_scan.py <img>          # 枚举根目录，找到 [已删除] DIR 'zyw' 首簇=327932
python3 exfat_tool.py  <img> list 329167 131072
python3 exfat_tree.py  <img> 327932 131072 --dry     # 干跑清点全树

# 4) 递归恢复
python3 exfat_tree.py  <img> 327932 131072 /persistent/usb-recover/restored
```

> 说明：`testdisk 7.2`（本机已装）支持 exFAT undelete，但它**只有 TUI 交互界面、没有非交互批处理模式**，
> 且本机无 `tmux`/`screen`，自动化驱动不可靠。因此改用**直接解析 exFAT 结构**的方式，
> 全程可脚本化、可复核、可重复。`testdisk` 已用于独立确认分区与文件系统类型（并以 (RO) 只读方式打开镜像）。
> 实为兜底手段的 `photorec`（按签名雕取、**会丢失文件名和目录结构**）**本次无需使用**。

## 四、恢复出的目录结构（顶层）

```
zyw/
└── 私人资料库/
    ├── seafile-tutorial.doc
    ├── images/  （含 auto-upload/）
    ├── TEMP/    （含 新建文件夹/）
    ├── 上课文件/
    ├── 临时文件夹/
    ├── 学校事务/
    ├── 学生毕业/
    ├── 学生毕业工作/
    ├── 报销/
    ├── 教学工作/
    ├── 教师培训/
    ├── 监考/
    ├── 科研工作/
    ├── 软件/
    └── 随笔/
```

**文件类型分布（按实际签名识别，非按扩展名）**

| 类型 | 数量 | 类型 | 数量 |
|---|---|---|---|
| Excel 2007+ (.xlsx) | 1324 | PowerPoint (.pptx) | 15 |
| Word 2007+ (.docx) | 119 | Visio (.vsdx) | 5 |
| JPEG 图片 | 47 | OOXML / XML | 8 |
| 纯文本 | 63 | 可执行文件 (.exe/.dll) | 3 |
| PDF 文档 | 34 | SQLite / RAR / INI | 5 |
| Word 97-2003 (.doc) | 33 | **空文件** | **16** |
| Zip 压缩包 | 22 | 加密文档 (CDFV2 Encrypted) | 2 |
| Windows 快捷方式 (.lnk) | 22 | PNG 图片 | 16 |

## 五、核验方法与结果

1. **CRC 校验**：zip 内 1849 个条目全部通过（`ZipFile.testzip()` 返回 `None`）。
2. **文件签名核验**：对全部 1735 个文件跑 `file`，1324 个 xlsx / 119 个 docx / 47 个 JPEG /
   34 个 PDF 等**签名与其扩展名一致**；抽样确认 `seafile-tutorial.doc` 为完整 OLE2 Word 文档
   （含作者、创建时间、页数、字数等元数据），`.jpg` 为 1080×2400 实图。
3. **簇区间重叠自查**：1719 个有数据的文件按首簇排序检查，**0 处冲突**，
   证明目录项中的链信息彼此自洽（若元数据被破坏，必然出现两文件争用同一簇）。
4. **16 个空文件**：全部是 `随笔/JJwords/` 下写作软件的 `.Book` / `.Comment` 伴生文件，
   目录项记录的原始长度本就是 **0 字节**，属正常，非损坏。
5. **1 个"未识别"文件**：`上课文件/计算机应用基础/作业收集/424/7、酒店/20220419_1.txt`
   —— 非零字节占比 96.5%、以 `02 01 00 00 00 00` 开头，是 **DLP 透明加密文档**
   （同批还有 2 个 `CDFV2 Encrypted`），属原始状态，非恢复损伤。

## 六、注意事项

- ⚠️ **隐私提醒**：恢复出的 `随笔/` 下有名为 `帐号密码` 的目录，且数据包已放在
  **局域网可访问**的下载中心（8899，无鉴权）。建议**下载后立即通知我删除该 zip**，
  或自行从下载中心移除。
- ⚠️ **U 盘现状**：`/dev/sdc1` 目前仍以**只读**方式挂载（`/media/zyw/A082-9F64`）。
  如需写回数据或继续使用，需先 `sudo umount` 再重新插拔/挂载。
- ℹ️ **若还要写回 U 盘**：现在写回是安全的（可恢复数据已全部提取并校验）。
  但请注意：写回会占用空闲簇，**若 U 盘上还有其它被删文件想恢复，应先做恢复再写回**。
- ℹ️ 整盘镜像（59 GB）与恢复目录仍保留在 `/persistent/usb-recover/`，
  确认无误后可删除以释放约 60 GB 空间。

## 七、经验教训

1. **误删后第一动作是停止写入**（卸载或改只读），本次正是靠这一步保住了全部数据。
2. **恢复要趁早**：该 U 盘有 DVR 行车记录（30 GB）与哨兵模式（9.8 GB）在持续写入，
   若拖延，被删数据很快会被循环覆盖。
3. **先做整盘镜像再恢复**：镜像使后续所有操作都在副本上进行，原盘零风险、可反复尝试。
4. **工具要对症**：ext4 用 ext4magic/extundelete，exFAT 用 testdisk 或直接解析结构；
   签名雕取（photorec）是会丢文件名和目录结构的最后手段，不要一上来就用。
