ZFS:备份系统需要镜像吗?

ZFS:备份系统需要镜像吗?

我计划通过zfs send.我计划将备份发送到的池是专门为我的主系统的备份而设置的。我是否需要在远程位置拥有驱动器镜像,或者 zfs 是否足够聪明,可以在下次调用时修复错误zfs send


澄清一下:我家里有我的主服务器,其中有两个镜像驱动器作为 zfs 池。现在我想将不可替换的数据发送到也运行带有 zfs 的操作系统的异地服务器。

问题是我是否也需要异地冗余。

假设zfs scrub在异地位置发现错误。会zfs send修复错误吗?

答案1

您不需要拥有镜像,但这样做可以提高存储在池中的数据的可靠性。

如果受影响的数据没有冗余,ZFS 将不会修复错误。磁盘本身通过在内部替换坏块来处理坏块,因此从这个意义上说,是的,再次发送池将“修复”问题。不过,我不会在这方面下太多赌注,也不会更换经常出现错误的磁盘。

请注意,磁盘本身不会发现坏扇区,您需要读取它们。该zpool scrub命令旨在扫描 zfs 池是否有错误。

答案2

Solaris ZFS 最佳实践文档回答这个问题:

未使用 ZFS 冗余(RAIDZ 或镜像)创建的池只能报告数据不一致。它无法修复数据不一致。在没有 ZFS 冗余的情况下创建的池更难管理,因为您无法更换或分离非冗余 ZFS 配置中的磁盘。

zfs send/recv覆盖数据时(如果使用正确的标志),这取决于您的情况是否需要担心。例如,如果您每 5 分钟传输新块,并且主池在 2 分钟后死亡,则损坏的可能性比备份池每周、每月甚至更长时间只更新一次要低得多。

硬件可用性也可能很重要:如果您的备份磁盘坏了(没问题,您仍然拥有主池),但您一天无法更换它,因此多个计划的备份现在将失败怎么办?冗余在硬件层面也有帮助,而不仅仅是为了数据完整性。当然,如果您还有另外两台这样的机器可以继续工作,那么这并不重要。

对于特殊用例(由于空间或端口限制,只能使用一个磁盘,池大小小于最大磁盘大小的一半),可以选择设置copies=2备份池。这样,数据会在备份池中进行内部复制(需要 200% 的空间),并为您提供数据完整性,但硬件故障仍会破坏您的备份池。尽管如此,它对于只能使用单个磁盘的长期异地备份存储或较小的系统可能很有用。请注意,它不适用于现有数据,因此之后需要进行完整备份。

另外,链接指南中的警告:

如果将 ZFS 发送流存储在文件或磁带上,并且该文件已损坏,则将无法接收它,并且所有数据都将无法恢复。

这意味着,除非您有充分的理由不这样做,否则您应该send与 结合使用receive,因为只能检查活动的导入池是否损坏。如果您只想存储流(例如,如果一个目标池要同时保存多个流),建议使用zstreamdump完整性验证。

相关内容