从 zfs 增量备份恢复

从 zfs 增量备份恢复

我已经通过以下方式创建了 zfs 备份:

  1. 创建完整备份 zfs snapshot pool/mydata@fullback zfs send pool/mydata@fullback > /backup/fullback

2.创建五个增量备份 incr1 .. incr5 zfs snapshot pool/mydata@incr1 zfs send -i pool/mydata@fullback pool/mydata@incr1 > /backup/incr1

类似地,第五次增量备份是

zfs snapshot pool/mydata@incr5 zfs send -i pool/mydata@fullback pool/mydata@incr5 > /backup/incr5

所以现在我有备份 /backup/fullback /backup/incr1 /backup/incr2 /backup/incr3 /backup/incr4 /backup/incr5

假设,我必须恢复到第二个增量备份, zfs receive -F pool/mydata < /backup/incr2 然后使用回滚, zfs rollback -r pool/mydata@incr2 我得到了预期的结果。

但是,如果我想在恢复到第二个增量备份后恢复第五个增量备份,就会出现问题。我该怎么做?有什么办法可以解决吗?

答案1

由于您的incr5备份是根据完整备份进行的(即:通过发出zfs snapshot pool/mydata@incr5; zfs send -i pool/mydata@fullback pool/mydata@incr5 > /backup/incr5),因此您无法根据另一个备份(即)进行恢复incr2。要进行恢复,incr5您需要从“普通”fullback恢复重新启动。

换句话说,你实际上并没有使用增加的备份,而是微分对于后者,您需要始终从上次完整备份开始。

或者,您可以切换到真正的增量备份,使每个新快照都基于之前的快照,如下所示:

zfs snapshot pool/mydata@fullback; zfs send pool/mydata@fullback > /backup/fullback
zfs snapshot pool/mydata@incr1; zfs send -i pool/mydata@fullback pool/mydata@incr1 > /backup/incr1
zfs snapshot pool/mydata@incr2; zfs send -i pool/mydata@incr1 pool/mydata@incr2 > /backup/incr2
zfs snapshot pool/mydata@incrN; zfs send -i pool/mydata@incrN-1 pool/mydata@incrN > /backup/incrN

有关可靠备份链的更多信息和建议,我强烈建议你阅读这里这里

答案2

本质上,这取决于您是否要恢复整个快照(即其中的所有文件)或备份中的一个或多个文件。

在第二种情况下(您基本上想要恢复 foo.doc,而不需要恢复 GB 的数据),您可以采用不同的机制:“冻结”单个存档(文件)中的快照,然后从后者恢复,类似于您使用 7z 或 rar 的方式,以便通过一个示例(“snapshotted-7z/tar/whatever”)来理解。

在您的示例中,我看不到副本,而是真正的基于文件的备份(即重定向到文件的 zfs 流)。

如果您使用 FreeBSD 系统,您可以在 ports (archivers \ paq) 中找到一个已经存在的程序,它被称为 zpaq。

否则,你可以尝试最新版本(7.15)或任何更新的版本

相关内容