gongxiangp2/data-recovery-action-plan.md

5.0 KiB
Raw Blame History

数据恢复行动方案

目标

恢复 /mnt/PoolOne/apps/youyidian-3d/uploads 目录中被删除的数据。

前提条件

  • Ubuntu设备(Ubuntu 20.04或更高版本)
  • 所有7块硬盘(WDC WD80EFBX 8TB)
  • 足够的SATA接口或USB硬盘盒
  • 至少2TB可用空间(用于恢复的文件,实际需要恢复的数据约1.5TB)

方案1:ZFS存储池导入 + 深度扫描

步骤1:准备Ubuntu环境

# 1. 更新系统
sudo apt-get update
sudo apt-get upgrade -y

# 2. 安装ZFS工具
sudo apt-get install -y zfsutils-linux

# 3. 安装数据恢复工具
sudo apt-get install -y testdisk photorec foremost scalpel

# 4. 安装其他有用工具
sudo apt-get install -y zfs-dkms zfs-zed

步骤2:连接所有硬盘

重要:必须连接所有7块硬盘!

# 检查连接的硬盘
lsblk

# 查看硬盘ID(匹配TrueNAS中的硬盘)
ls -la /dev/disk/by-id/ | grep WDC_WD80EFBX

# 应该能看到7块硬盘的part2分区

步骤3:导入ZFS存储池

# 1. 查看可导入的存储池
sudo zpool import

# 应该能看到:
# pool: PoolOne
# id: 162731025200795572
# state: ONLINE

# 2. 导入存储池(使用-f强制,因为来自不同系统)
sudo zpool import -f PoolOne

# 3. 检查状态
sudo zpool status PoolOne

# 4. 查看挂载点
df -h | grep PoolOne
# 应该挂载在 /PoolOne 或 /mnt/PoolOne

步骤4:检查数据状态

# 查看uploads目录
ls -la /PoolOne/apps/youyidian-3d/uploads/
# 或
ls -la /mnt/PoolOne/apps/youyidian-3d/uploads/

# 检查目录大小
du -sh /PoolOne/apps/youyidian-3d/uploads/

步骤5:尝试ZFS历史记录

# 查看ZFS操作历史
sudo zfs history PoolOne | tail -100

# 查看特定数据集的历史(如果存在)
sudo zfs history PoolOne/apps/youyidian-3d 2>/dev/null || echo "数据集不存在"

方案2:底层块设备扫描(绕过ZFS)

步骤1:导出存储池

# 1. 卸载存储池
sudo zfs unmount PoolOne

# 2. 导出存储池(解除ZFS管理)
sudo zpool export PoolOne

步骤2:直接扫描块设备

注意:raidz2配置下,数据条带化分布,需要扫描所有硬盘。

# 识别所有硬盘设备
lsblk

# 假设硬盘设备为:sdc2, sdd2, sde2, sdf2, sdg2, sdh2, sdi2

# 对每块硬盘进行扫描(需要很长时间)
sudo photorec /dev/sdc2
sudo photorec /dev/sdd2
# ... 对每块硬盘重复

# 或使用testdisk
sudo testdisk /dev/sdc2

步骤3:重组raidz2数据

关键问题:即使扫描到数据块,也需要理解ZFS的raidz2结构才能重组。

这需要:

  • 理解ZFS元数据结构
  • 理解raidz2的条带化算法
  • 可能需要专业的ZFS恢复工具

方案3:使用ZFS调试工具

步骤1:检查ZFS内部结构

# 导入存储池
sudo zpool import -f PoolOne

# 使用zdb查看ZFS内部结构
sudo zdb -l PoolOne

# 查看对象ID映射
sudo zdb -o PoolOne

# 查看数据集信息
sudo zdb -d PoolOne/apps/youyidian-3d

步骤2:尝试查找已删除的对象

# 列出所有对象
sudo zdb -o PoolOne | grep -i uploads

# 查看事务组信息
sudo zdb -u PoolOne

# 查看块指针信息
sudo zdb -bb PoolOne

方案4:使用专业ZFS恢复工具

选项1:ZFS Recover(如果存在)

# 搜索ZFS恢复工具
sudo apt-cache search zfs recover

# 或从源码编译(如果存在)

选项2:商业工具

  • R-Studio:支持ZFS文件系统
  • UFS Explorer:支持ZFS恢复
  • DiskInternals RAID Recovery:支持raidz配置

方案5:手动ZFS元数据分析

这是最复杂但可能最有效的方法:

步骤1:导出ZFS元数据

# 导入存储池
sudo zpool import -f PoolOne

# 导出ZFS配置
sudo zdb -l PoolOne > /tmp/zfs-label.txt

# 导出对象信息
sudo zdb -o PoolOne > /tmp/zfs-objects.txt

# 导出事务组信息
sudo zdb -u PoolOne > /tmp/zfs-uberblock.txt

步骤2:分析元数据

需要分析:

  • 文件系统的对象ID
  • 目录结构和inode信息
  • 数据块的指针信息
  • 事务组的时间戳

步骤3:尝试恢复

基于元数据分析,尝试:

  • 定位已删除的文件对象
  • 重建目录结构
  • 提取数据块

实际操作建议

立即执行的步骤

  1. 准备Ubuntu设备
  2. 连接所有7块硬盘
  3. 导入ZFS存储池
  4. 检查数据状态
  5. 尝试所有恢复方法

优先级

  1. 方案1:ZFS存储池导入 + 深度扫描(最安全)
  2. 方案3:ZFS调试工具(深入了解ZFS结构)
  3. 方案5:手动ZFS元数据分析(最复杂但可能最有效)
  4. 方案2:底层块设备扫描(风险高,作为最后手段)
  5. 方案4:专业工具(如果预算允许)

重要提示

  1. 只读操作:尽可能使用只读模式
  2. 备份当前状态:在操作前,如果可能,先备份当前状态
  3. 记录所有操作:记录每一步操作,便于回溯
  4. 时间窗口:删除后时间越短,恢复可能性越大

下一步

需要我详细说明哪个方案的具体操作步骤?