![从 zfs 增量备份恢复](https://linux22.com/image/766104/%E4%BB%8E%20zfs%20%E5%A2%9E%E9%87%8F%E5%A4%87%E4%BB%BD%E6%81%A2%E5%A4%8D.png)
我已经通过以下方式创建了 zfs 备份:
- 创建完整备份
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)或任何更新的版本