zfs破坏后恢复数据

在Debian 8.7上我有一个zfs池。 (显然在Linux上使用ZFS,而不是Oracle或Solaris zfs)

需要将ZFS池从2个磁盘上的镜像扩展到4个磁盘上的RAID。 我做了备份(一份数据 – 这是我的第一个错误)

我以为zpool destroy将不会工作,直到我删除所有数据集(卷),所以我做了zfs destroy (这是我的第二个错误)。

之后,我发布了“zpool destroy”,重新分区了所有4个磁盘,发现备份已损坏。

所以我开始了我的恢复冒险:关于ZFS的第一件好事就是它能够导入被破坏的池。 在zpool destroy yourPoolName您可以调用zpool import -D来查看已销毁池的列表。 然后你可以使用zpool import -D yourPoolName来修改它,或者如果你已经销毁了几个同名的池,那么你可以通过由zpool import -D显示的id来导入它。

zpool import -D需要分区在原来的位置。 它必须精确到部门。 我已经使用fdisk创build了具有确切的开始和结束扇区号的分区。 我已经使用cfdisk来设置分区types(因为它更友好:))然后,你应该调用partprobe ,以确保操作系统知道更改分区。

zpool import -D工作就像一个魅力,我有我的池在线健康再次完美!..但由于zfs destroy全部后果 – 所有的数据丢失。

ZFS将事务中的文件和文件系统更改存储到事务组(TXG)中的磁盘上。我的进一步研究表明,我必须回滚最后一个事务组。

有两种方法可以回滚ZFS事务组

  1. 使用带-T选项的特殊zpool import
  2. 使用zfs_revert-0.1.py

首先你需要find最后一个好的TXG。 zpool history -il帮助了我。

根据第一种方法,你应该调用类似于: zpool import -o readonly=on -D -f -T <LAST-GOOD-TXG> poolName (带有附加参数,如果你喜欢: -F-m-R )不幸的这个命令只和实际的TXG一起工作。 甚至回到前一个TXG没有工作,并显示错误消息,如“设备不可用”。 它看起来像这个function只在Solaris上工作(或已经工作)。 可怜。

我已经分析了zfs_revert-0.1.py的代码,看起来很清楚,很有希望。 我已经使用这个工具,但它看起来像我需要删除太多的TXGs。 之后zpool import -D无法检测到池。

目前我已经恢复了一个较旧的备份,我有2个磁盘的dd转储,这是镜像,但zfs destroyzfs destroyzpool destroy 。 它看起来像我们只是住在旧备份的数据,并停止进一步的恢复过程。 不过,如果有人build议在这种情况下做什么,我会很乐意尝试恢复数据。

进一步恢复将在VMWare Workstation中完成,所以我将需要find一种方法来在虚拟机中导入zpool(磁盘ID可能会改变)

问题接下来我可以尝试什么?

经验教训

  1. 始终保留至less2份数据。 当您操作主存储器时,您需要备份的备份。
  2. zfs destroy是不需要的,而且如果你打算做zpool destroy话非常危险。

评论 :很显然,在恢复期间,您应该完全停止写入损坏数据存储的磁盘。

有用的命令 :zpool import -D zpool import -o readonly = on -D -f originalPoolName newPoolName zpool status tank

 zpool online dozer c2t11d0 zpool scrub tank zpool history -il zpool export tank zpool import dozer zeepool 

链接

  1. 工具

    • zfs_revert-0.1.py
    • zfs_revert-0.1.py DOCS:ZFS取证回滚脚本
  2. 有关损坏的ZFS的信息

    • FreeBSD上的ZFS:从数据损坏中恢复
    • Oracle Solaris ZFSpipe理指南
    • 导入ZFS存储池
    • ZFS数据恢复
    • 需要帮助从受损的ZFS池中恢复数据
    • 第9章ZFS故障排除和数据恢复
    • Bruning问题:ZFS取证 – 从被销毁的Zpool中恢复文件
    • “返回 – 或者:zpool import -T”
    • 所有数据都没有了 赊销zfs破坏
    • ZFS数据集恢复
    • 需要帮助使Uberblock无效
  3. ZFS导入

    • 通过UUID导入zpool?
    • ZFS Zpool导入更改了磁盘标识符
    • 更改驱动器/ dev / devices,zpool混淆
    • ZFS光盘位置已更改
    • 迁移ZFS存储池
    • ZFS磁盘映像:终极模拟
    • 使用VMware编辑硬盘序列号