假设有两个 ZFS 池,其中一个池的快照被发送到另一个池,是否可以使用存储在另一个池中的快照副本自动修复损坏的快照?
我希望这只是一个假设性问题,但似乎值得了解!据我所知,它只适用zfs scrub
于单个池,并且仅在该池中有冗余时才进行修复;我想我正在寻找的是比较两个快照并使用另一个快照修复损坏的快照的方法(假设另一个快照完好无损)。
例如,如果我将 ZFS 设置限制在单个磁盘上,并且空间可能会限制使用选项copies
对所有数据进行自我修复的能力,就像在笔记本电脑上一样。在这种情况下,ZFS 的其他功能(本机压缩和加密、损坏检测和使用 的备份速度zfs send
)仍然很不错,但是,单个翻转位可能会导致文件损坏。虽然在这种简单的情况下,我只需替换一个文件即可,但我仍然很好奇快照是否可以用于更复杂的情况(例如,如果某些元数据已损坏,或者无法识别特定文件)。
答案1
ZFS 快照无法“修复”。您可以重新发送它,但如果您的池没有冗余,您就无法简单地纠正单个损坏的块。
为了数据位腐烂,应该能够对损坏的数据进行手动低级覆盖(即:重写原始块以匹配存储的校验和),但我从未尝试过。元数据位腐烂通常意味着发生了非常错误的事情,因为即使在单磁盘池上,ZFS 也默认保留所有元数据的多个副本。
顺便说一句,这种“快照修复”方法在该项目的 github 问题上进行了讨论,但据我所知,它从未实现过。