如何将克隆数据集的增量部分复制到zfs中的原始数据集(快照)?

How to copy the incremental parts of the cloned dataset to the original dataset(snapshot) in zfs?

zp1/tmp/origin@1  ==(clone & snapshot)==>  zp1/tmp/clone@1
                                             ...working...
                                             (snapshot)
                                                ||
                                                \/
zp1/tmp/origin@2   <====================   zp1/tmp/clone@2
                            ||
        $$copy the incremental parts between zp1/tmp/clone@1 
        and zp1/tmp/clone@2 to zp1/tmp/origin.$$

$$copy ..$$ 部分是我想要的,我已经尝试了下面的测试程序但失败了 does not match incremental source 错误。请注意,这与备份无关。
可能吗?

[test procedure]

# zfs create zp1/tmp/origin
# touch /zp1/tmp/origin/hi.txt
# zfs snapshot zp1/tmp/origin@1
# zfs clone zp1/tmp/origin@1 zp1/tmp/clone
# zfs snapshot zp1/tmp/clone@1
# touch /zp1/tmp/clone/bye.txt
# zfs snapshot zp1/tmp/clone@2

# zfs list -t all -r zp1/tmp
NAME               USED  AVAIL     REFER  MOUNTPOINT
zp1/tmp            256K   339G       96K  /zp1/tmp
zp1/tmp/clone       64K   339G       96K  /zp1/tmp/clone
zp1/tmp/clone@1      0B      -       96K  -
zp1/tmp/clone@2      0B      -       96K  -
zp1/tmp/origin      96K   339G       96K  /zp1/tmp/origin
zp1/tmp/origin@1     0B      -       96K  -

# zfs send -v -I zp1/tmp/clone@1 zp1/tmp/clone@2 | zfs receive -v zp1/tmp/origin@2
send from @1 to zp1/tmp/clone@2 estimated size is 32.6K
total estimated size is 32.6K
TIME        SENT   SNAPSHOT zp1/tmp/clone@2
receiving incremental stream of zp1/tmp/clone@2 into zp1/tmp/origin@2
cannot receive incremental stream: most recent snapshot of zp1/tmp/origin does not
match incremental source

zfs send 命令比较发送来源的 UUID 和发送目的地的 UUID,以确保您在具有 完全里面的数据是一样的。在你的情况下你跳过了部分时间线,所以这个 UUID 不匹配。

克隆快照的命名方案令人困惑 — clone@1original-fs@1 不是同一个快照,尽管它们可能指向相同的数据,所以我要重命名他们略微使这一点更清楚:

  1. original-fs@1在前
  2. clone 紧随其后,与开头的 original-fs@1 具有相同的 UUID
  3. clone@2 接下来是
  4. clone@3 接下来是

您正在尝试将 clone@2clone@3 之间的增量发送到一个还没有 clone@2 的文件系统上。相反,您应该从 original-fs@1 发送到 clone@3 以捕获整个时间线(或者您可以发送两次,从 original-fs@1clone@2,然后 clone@2clone@3,如果您想在两个版本的数据上重新创建完整的快照序列。

也就是说,这只是无缘无故复制了一堆数据。为什么不只是 zfs promote 克隆,以便它 成为 父文件系统? (然后您可以删除旧的父级并重命名新的父级以取代它。)