5.0 KiB
5.0 KiB
数据恢复行动方案
目标
恢复 /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:尝试恢复
基于元数据分析,尝试:
- 定位已删除的文件对象
- 重建目录结构
- 提取数据块
实际操作建议
立即执行的步骤
- 准备Ubuntu设备
- 连接所有7块硬盘
- 导入ZFS存储池
- 检查数据状态
- 尝试所有恢复方法
优先级
- 方案1:ZFS存储池导入 + 深度扫描(最安全)
- 方案3:ZFS调试工具(深入了解ZFS结构)
- 方案5:手动ZFS元数据分析(最复杂但可能最有效)
- 方案2:底层块设备扫描(风险高,作为最后手段)
- 方案4:专业工具(如果预算允许)
重要提示
- 只读操作:尽可能使用只读模式
- 备份当前状态:在操作前,如果可能,先备份当前状态
- 记录所有操作:记录每一步操作,便于回溯
- 时间窗口:删除后时间越短,恢复可能性越大
下一步
需要我详细说明哪个方案的具体操作步骤?