Linux 上的 ZFS:ZFS 能否同时发送快照并接收同一数据集的较新快照?

Linux 上的 ZFS:ZFS 能否同时发送快照并接收同一数据集的较新快照?

我有一台生产服务器P和一台备用服务器S。两者都运行 Debian buster 并且OpenZFS / ZoL2.1.0。P仅具有内部磁盘,为操作系统、虚拟机和所有其他数据提供 ZFS 存储。S具有相同的内部磁盘,但还有一个额外的备份磁盘,其中包含单独的 ZPOOL,可以热插拔(硬件方面),并用作定期轮换的备份磁盘。

在 上P,只有一个池,称为rpool。在 上S,有两个池:(rpool与 P 上相同),加上extpool(在备份磁盘上)。

在 上P,脚本会定期运行,该脚本会拍摄 ZFS 数据集的快照并将它们复制到S通过zfs send/ zfs receive。在 上S,脚本定期运行,将快照从 复制到rpoolextpool(也通过zfs send/ zfs receive)。P和上的脚本S尚未同步,这意味着当 上的脚本正在将快照从 传输到 的过程中时, 上的脚本P可能会尝试将快照复制到。SSrpoolextpool

P尝试发送快照时,脚本有时会失败。我相信这种情况发生在上述情况下,因此我怀疑不可能发送数据集的快照并同时接收同一数据集的较新快照。另一方面,很可能我在其他方面做错了,所以我想在这方面确定一下。换句话说,我想知道是否可以执行以下操作:

P

zfs snapshot rpool/dataset1@snapshot1
zfs send -R rpool/dataset1@snapshot1 | ssh S 'zfs receive -F rpool/dataset1'
# Wait some time
zfs snapshot rpool/dataset1@snapshot2

进而同时

S

zfs send -R rpool/dataset1@snapshot1 | zfs receive -F extpool/dataset1

以及P

zfs send -R -I rpool/dataset1@snapshot1 rpool/dataset1@snapshot2 | ssh S 'zfs receive -F rpool/dataset1'

最后要说明的是:在 上S,涉及复制的任何数据集都不会被装载。S这些数据集的唯一作用是从 接收新快照P,将其存储在内部磁盘上,然后将所有快照从内部磁盘复制到外部备份磁盘。

当然,唯一的例外是紧急情况:如果P失败,复制的数据集将手动安装S并切换到生产操作。不过,我明确提出的问题与这种情况无关。

相关内容