ZFS 数据集恢复

ZFS 数据集恢复

我突然从 ZFS 池中删除了我的 ZFS 数据集。我通过 Nas4Free 的 GUI 执行此操作。在日志中,命令类似于“ZFS 销毁 Main/Video“。然后我重新创建具有相同名称的数据集(Main/Video),现在该数据集中的所有数据都消失了。是否可以从已删除的数据集或数据集本身恢复信息?我已经设置了每日快照,但据我了解,它们存储在数据集内,因此如果不恢复其数据集,我就无法访问它们。

答案1

根据错误发生后池保持在线的时间长短以及在此期间池的繁忙程度,可能可以将其回滚到文件系统仍然存在的先前的事务组(即,使用较旧的超级块)。

下面是采用这种方法的脚本:

http://www.solarisinternals.com/wiki/index.php/ZFS_forensics_scrollback_script

您应该对磁盘的副本进行操作,因为恢复尝试具有破坏性。

答案2

如果你能将池子恢复到较早的状态,那么“回滚到较早的 txg” 答案是一个好主意同时还会破坏整个 zpool 中的少量数据,并将 zpool 的所有其他更改恢复到先前的状态(哇!)。执行此操作时,ZFS 会将旧的“超级块”交换回其元数据树的根,该根指向 zpool 的旧版本块树。问题就在这里:如果您从那时起写入了数据,则池中被覆盖的任何块在最新版本的视图中都是可用空间,这意味着数据毫无意义,它可以使用该空间来存储新的写入。如果发生这种情况,该块将不再与存储在旧版本块树中的校验和匹配,从而导致损坏。这可能发生在同一个 zpool 中被覆盖的任何内容上,包括文件数据块和文件系统元数据,后者发生的可能性较小,因为大多数池都配置为创建两个元数据块副本。

有一种方法可以安全地执行此操作而不会造成损坏,但是您需要提前计划。在删除文件系统/zvol 之前,运行zpool checkpoint- 这基本上提供了与重置为较早的超级块相同的功能,但保证不会损坏已修改的数据,并提供更优越的用户界面,让您不会意外破坏内容。此功能的作者写了一个很好的描述如何使用它这里

相关内容