如何将克隆数据集的增量部分复制到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@1
与 original-fs@1
不是同一个快照,尽管它们可能指向相同的数据,所以我要重命名他们略微使这一点更清楚:
original-fs@1
在前
clone
紧随其后,与开头的 original-fs@1
具有相同的 UUID
clone@2
接下来是
clone@3
接下来是
您正在尝试将 clone@2
和 clone@3
之间的增量发送到一个还没有 clone@2
的文件系统上。相反,您应该从 original-fs@1
发送到 clone@3
以捕获整个时间线(或者您可以发送两次,从 original-fs@1
到 clone@2
,然后 clone@2
到clone@3
,如果您想在两个版本的数据上重新创建完整的快照序列。
也就是说,这只是无缘无故复制了一堆数据。为什么不只是 zfs promote
克隆,以便它 成为 父文件系统? (然后您可以删除旧的父级并重命名新的父级以取代它。)
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@1
与 original-fs@1
不是同一个快照,尽管它们可能指向相同的数据,所以我要重命名他们略微使这一点更清楚:
original-fs@1
在前clone
紧随其后,与开头的original-fs@1
具有相同的 UUIDclone@2
接下来是clone@3
接下来是
您正在尝试将 clone@2
和 clone@3
之间的增量发送到一个还没有 clone@2
的文件系统上。相反,您应该从 original-fs@1
发送到 clone@3
以捕获整个时间线(或者您可以发送两次,从 original-fs@1
到 clone@2
,然后 clone@2
到clone@3
,如果您想在两个版本的数据上重新创建完整的快照序列。
也就是说,这只是无缘无故复制了一堆数据。为什么不只是 zfs promote
克隆,以便它 成为 父文件系统? (然后您可以删除旧的父级并重命名新的父级以取代它。)