ZFS 镜像池的有效异地备份策略是什么?

STW*_*STW 11 zfs backup

我使用由两个镜像磁盘组成的 ZFS 池。为了进行异地备份,我又购买了两个磁盘。

我最初的计划是通过将第三个磁盘附加到镜像来创建异地备份,等待 ZFS 重新同步,然后分离驱动器并将其带到异地。这工作得很好,但我很惊讶每次附加磁盘时它似乎都执行完全重新同步(我读过,可能误解了,每次附加都会导致增量或增量重新同步)。这会导致备份花费的时间超过可接受的时间。

我的要求是拥有我的 zpool 及其所有快照的异地副本,我可以每天轮换。这意味着重新同步最多需要 24 小时——目前接近这个时间,但我们扩大池的计划将超过这个时间范围。

如何保留不需要完整重新同步操作的异地备份?我是否应该在备份驱动器上使用不同的文件系统(例如,导出映像而不是让它们成为 ZFS 池的一部分)?我是否应该将备份放在单独的池中并在创建新快照时向其发送新快照?

STW*_*STW 2

经过大量的修改和实验,我找到了一个解决方案,尽管需要进行相当大的权衡。

首先,我必须排除的选项:

  • 由于成本原因,无法选择拥有第二个带有镜像池的异地 ZFS 服务器。如果可以的话,这将是迄今为止最好的方法,利用 ZFS 发送/接收将快照发送到远程池。

  • 拥有第二个现场 ZFS 镜像池,我可以从中删除磁盘带回家。这比第一个选项更可行,但我需要第二个池始终在现场有两个磁盘(或在单个现场磁盘上使用两个数据副本)。目前我有四个磁盘,服务器中没有足够的空间容纳第五个磁盘。这将是一种公平的方法,但仍然不理想。

  • 使用 ZFS 附加和分离将备份磁盘轮转进出镜像池。这效果很好,但每次添加磁盘时都必须执行完整的重新同步。这花费的时间长得令人无法接受,所以我不能依赖它。

我的解决方案类似于使用attachand detach,但它使用onlineand offline。与完全重新同步相比,这样做的优点是执行增量重新同步,但缺点是池始终报告状态DEGRADED(池始终有两个磁盘;旋转的异地磁盘offline在处于远程存储和重新同步然后上线时会被标记)当他们在现场时)。

因此,快速回顾和概述我的设置:

我有一台 ZFS 服务器和四个相同的磁盘。ZFS 设置为使用镜像池。四个磁盘中的两个是该池的永久成员。另外两个圆盘旋转;一个始终位于异地存储中,另一个是池的一部分,充当随时可用的备份。

当需要轮换备份时:

  • 我等待zfs scrub完成以合理地确保备份磁盘没有错误

  • Izfs offline将被远程获取的磁盘。离线后我hdparm -Y /dev/id将其关闭。一分钟后,我部分移除磁盘底座(刚好足以确保其断电),然后再给它一分钟,然后完全拉动驱动器以确保其停止旋转。磁盘放入静电袋中,然后放入保护盒中并移至异地。

  • 我引入了另一个异地磁盘。它安装在热插拔托盘中并旋转。我用来zfs online将磁盘恢复到池中并启动部分重新同步以使其并发。

该系统保证在任何给定时间我都有两个ONLINE镜像磁盘和一个OFFLINE远程磁盘(已被擦洗)。第四个磁盘要么被重新同步,要么在线,这样做的好处是,如果正在运行的驱动器发生故障,池可能仍然与两个在线磁盘保持一致。

过去几周效果很好,但我仍然认为这是一种黑客方法。如果遇到重大问题我会跟进。


更新:运行几个月后,我发现在实际使用中,重新同步对于分离/附加和离线/在线都花费相同的时间。在我的测试中,我认为我没有运行擦洗 - 我的预感是,如果驱动器因擦洗而脱机,则需要完全重新同步。