我想将几个 zfs 快照发送到另一个池。源池“rpool”,目标池“dpool”
rpool/kvm1380_img 88,6G 1,48T 77,6G -
rpool/kvm1380_img@snapshot_Sun_01_11_weekly 1,33G - 77,6G -
rpool/kvm1380_img@snapshot_Mon_02_11 746M - 77,6G -
rpool/kvm1380_img@snapshot_Tue_03_11 600M - 77,5G -
rpool/kvm1380_img@snapshot_Wed_04_11 843M - 77,5G -
我知道如何逐个发送快照,例如:
zfs send -i rpool/kvm1380_img@snapshot_Sun_01_11_weekly rpool/kvm1380_img@snapshot_Mon_02_11 | zfs recv dpool/kvm1380_img@snapshot_Mon_02_11
下一个:
zfs send -i rpool/kvm1380_img@snapshot_Mon_02_11 rpool/kvm1380_img@snapshot_Tue_03_11 | zfs recv dpool/kvm1380_img@snapshot_Tue_03_11
等等...
但我想一次发送所有快照以获得与 rpool 相同的所有内容:
dpool/kvm1380_img 88,6G 1,48T 77,6G -
dpool/kvm1380_img@snapshot_Sun_01_11_weekly 1,33G - 77,6G -
dpool/kvm1380_img@snapshot_Mon_02_11 746M - 77,6G -
dpool/kvm1380_img@snapshot_Tue_03_11 600M - 77,5G -
dpool/kvm1380_img@snapshot_Wed_04_11
怎么做?
答案1
除了-i
选项之外,您还可以使用-I
发送包含一整套多个快照的增量流的选项:
生成一个流包,将所有中间快照从第一个快照发送到第二个快照。例如,
-I @a fs@d
类似于-i @a fs@b; -i @b fs@c; -i @c fs@d
。可以使用 -i 选项指定增量源。
例如:
zfs 发送 -i rpool/kvm1380_img@snapshot_Sun_01_11_weekly rpool/kvm1380_img@snapshot_ Wed_04_11 | zfs 接收 ...
该示例将把每个快照从snapshot_Sun_01_11_weekly
发送到snapshot_ Wed_04_11
。
或者,您可以发送-R
使用选项的完整复制流:
生成复制流包,它将复制指定的文件系统以及所有后代文件系统,直至指定的快照。收到后,所有属性、快照、后代文件系统和克隆都会保留。
像这样:
zfs snapshot -r rpool/kvm1380_img@latest
zfs send -R rpool/kvm1380_img@latest | zfs recv dpool/kvm1380_img
目标 ZFS 文件系统和实际zfs recv ...
命令可能会有所不同。例如,您可能希望将-u
和/或添加-o canmount=noauto
到命令中zfs recv
,以防止系统尝试挂载接收到的文件系统。
如果您要以这种方式发送完整的复制流,最好将该流接收到一个全新的 ZFS 文件系统中。尝试将完整的复制流覆盖在现有 ZFS 文件系统之上可能会很麻烦且难以管理。