ZFS 发送单个快照,包括后代文件系统
ZFS send single snapshot including descendent file systems
有没有办法发送包含后代文件系统的单个快照? 'zfs send' 即使快照是使用“-r”创建的,也只发送顶级文件系统。 'zfs send -R' 发送后代文件系统但包括所有以前的快照,如果灾难恢复池中不需要以前的快照,那么出于灾难恢复目的会消耗不必要的 space。
猫/sys/module/zfs/version
0.8.3-1ubuntu12.5
没有
如果你想要整个文件系统用于灾难恢复,你需要整个文件系统。
ZFS 快照不是完整的文件系统。它实际上是它与前一个快照之间的区别,并且该链通过所有快照一直延续到文件系统的“基本”副本。
您可以发送增量快照,这只会发送差异。每 Oracle ZFS documentation:
...
If you are sending the snapshot stream to a different system, pipe the
zfs send output through the ssh command. For example:
host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana
When you send a full stream, the destination file system must not
exist.
You can send incremental data by using the zfs send -i option. For
example:
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana
Note that the first argument (snap1) is the earlier snapshot and the
second argument (snap2) is the later snapshot. In this case, the
newtank/dana file system must already exist for the incremental
receive to be successful.
第一个zfs
命令
host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana
发送整个文件系统。
这次只发区别:
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana
然后可以跟
host1# zfs send -i tank/dana@snap2 tank/dana@snap3 | ssh host2 zfs recv newtank/dana
我完全理解你的用例。虽然我经常面临相反的情况,我有一个远程备份池,我想从中恢复本地系统上的最新快照。
无论如何,虽然你不能直接达到你想要的,但你可以达到你想要的状态。这个想法是修剪您的恢复集,以便它只有最新的快照。
您首先发送初始快照:
host# zfs snapshot -r tank/data@initial_snapshot
host# zfs send -R tank/data@initial_snapshot | \
ssh recovery-host zfs recv tank/data
这将发送所有降序文件系统,并将发送 initial_snapshot
和所有在它之前创建的文件系统。
如果您之前创建了任何快照,您可以删除它们:
recovery-host# zfs list -H -o name -t snapshot tank/data | head -n -1 \
| xargs -r -n 1 zfs destroy -r -v
然后你发送增量更新和修剪,
host# zfs snapshot -r tank/data@${LATEST_LOCAL_SNAPSHOT}
host# zfs send -R -i tank/data@${LATEST_REMOTE_SNAPSHOT} \
tank/data@${LATEST_LOCAL_SNAPSHOT} | ssh recovery-host zfs recv tank/data
recovery-host# zfs list -H -o name -t snapshot tank/data | head -n -1 \
| xargs -r -n 1 zfs destroy -r -v
假设 LATEST_LOCAL_SNAPSHOT
和 LATEST_REMOTE_SNAPSHOT
已正确设置。
请注意,这是一个最小的 seatbelt-less 示例。你应该关心你的 send-receives 是否成功。如果不小心达到恢复池没有任何与源匹配的快照的状态,您将无法再发送增量,因此需要重新开始。
有没有办法发送包含后代文件系统的单个快照? 'zfs send' 即使快照是使用“-r”创建的,也只发送顶级文件系统。 'zfs send -R' 发送后代文件系统但包括所有以前的快照,如果灾难恢复池中不需要以前的快照,那么出于灾难恢复目的会消耗不必要的 space。
猫/sys/module/zfs/version 0.8.3-1ubuntu12.5
没有
如果你想要整个文件系统用于灾难恢复,你需要整个文件系统。
ZFS 快照不是完整的文件系统。它实际上是它与前一个快照之间的区别,并且该链通过所有快照一直延续到文件系统的“基本”副本。
您可以发送增量快照,这只会发送差异。每 Oracle ZFS documentation:
...
If you are sending the snapshot stream to a different system, pipe the zfs send output through the ssh command. For example:
host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana
When you send a full stream, the destination file system must not exist.
You can send incremental data by using the zfs send -i option. For example:
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana
Note that the first argument (snap1) is the earlier snapshot and the second argument (snap2) is the later snapshot. In this case, the newtank/dana file system must already exist for the incremental receive to be successful.
第一个zfs
命令
host1# zfs send tank/dana@snap1 | ssh host2 zfs recv newtank/dana
发送整个文件系统。
这次只发区别:
host1# zfs send -i tank/dana@snap1 tank/dana@snap2 | ssh host2 zfs recv newtank/dana
然后可以跟
host1# zfs send -i tank/dana@snap2 tank/dana@snap3 | ssh host2 zfs recv newtank/dana
我完全理解你的用例。虽然我经常面临相反的情况,我有一个远程备份池,我想从中恢复本地系统上的最新快照。
无论如何,虽然你不能直接达到你想要的,但你可以达到你想要的状态。这个想法是修剪您的恢复集,以便它只有最新的快照。 您首先发送初始快照:
host# zfs snapshot -r tank/data@initial_snapshot
host# zfs send -R tank/data@initial_snapshot | \
ssh recovery-host zfs recv tank/data
这将发送所有降序文件系统,并将发送 initial_snapshot
和所有在它之前创建的文件系统。
如果您之前创建了任何快照,您可以删除它们:
recovery-host# zfs list -H -o name -t snapshot tank/data | head -n -1 \
| xargs -r -n 1 zfs destroy -r -v
然后你发送增量更新和修剪,
host# zfs snapshot -r tank/data@${LATEST_LOCAL_SNAPSHOT}
host# zfs send -R -i tank/data@${LATEST_REMOTE_SNAPSHOT} \
tank/data@${LATEST_LOCAL_SNAPSHOT} | ssh recovery-host zfs recv tank/data
recovery-host# zfs list -H -o name -t snapshot tank/data | head -n -1 \
| xargs -r -n 1 zfs destroy -r -v
假设 LATEST_LOCAL_SNAPSHOT
和 LATEST_REMOTE_SNAPSHOT
已正确设置。
请注意,这是一个最小的 seatbelt-less 示例。你应该关心你的 send-receives 是否成功。如果不小心达到恢复池没有任何与源匹配的快照的状态,您将无法再发送增量,因此需要重新开始。