ZFS快照以旋转方式备份为文件


14

我有一个本地FreeNAS系统,想要使用ZFS快照进行备份。
FreeNAS具有内置的复制任务,这些任务使用

zfs send snapshot_name

将快照发送到远程系统。但这需要另一端具有ZFS的系统。

我想将快照发送到一个文件,然后将此压缩和加密的文件发送到远程计算机。

这是可能的

zfs send snapshot_name | gzip | openssl enc -aes-256-cbc -a -salt > file.gz.ssl

我每天都会为存储池制作快照,并将每个快照保留30天。
拍摄每张快照后,我都会将该快照通过管道传输到文件中。
-快照文件1中包含每个文件(例如2GB)
-快照文件2仅具有对快照文件1的更改(例如5MB)
-快照文件3保存对快照文件2的更改;等等。

在第31天,快照文件1被删除(因为我只希望最近30天的更改)

因此,snapshot_file 2需要保存每个文件(2GB的snapshot_file 1 + 5MB的更改)

但是每天(从第31天开始)都必须使用这种方法来创建一个新的2GB文件,并将其发送到远程系统。这是太多的开销。

使用传送到文件的快照作为X天的备份策略的最佳方法是什么?

PS:我知道那里有很多可以使用的备份软件(例如rdiff-backup)。但是我很好奇这怎么做。


为什么不在zfs recv另一端使用(例如,在带有池的池上zfs set compression=gzip-9)。对我来说,存储快照文件听起来效率很低。
斯特凡Chazelas

1
@StephaneChazelas,因为我另一端没有ZFS文件系统。我的远程系统是带有ext4的gentoo盒(我知道我可以安装zfsonlinux,但我宁愿不安装)
Martin Grohmann

Answers:


12

zfs receive恐怕如果将快照存储在文件中,而不是存储在文件系统中(例如,使用),这是不可能的。

接收方的ZFS

如果在发送方和接收方使用ZFS,则可以避免传输整个快照,而仅传输快照与上一个快照之间的差异:

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' | \
  zfs receive

ZFS知道快照,并且仅将相互的块存储一次。通过使文件系统了解快照,您可以毫无问题地删除旧快照。

接收方的其他文件系统

在您的情况下,您将快照存储在单个文件中,并且文件系统不了解快照。正如您已经注意到的,这中断了旋转。您要么必须传输整个快照,否则将浪费带宽和存储空间,但使您可以删除单个快照。他们彼此不依赖。您可以执行以下增量快照:

ssh myserver 'zfs send -i pool/dataset@2014-02-04 pool/dataset@2014-02-05' \
  > incremental-2014-02-04:05

要还原增量快照,您还需要以前的快照。这意味着您不能删除旧的增量文件。

可能的解决方案

您可以按照我的上一个示例所示进行增量操作,然后每月进行一次新的非增量操作。新的增量取决于此非增量,您可以删除旧快照。

或者,您可以研究其他备份解决方案。有 rsnapshot,它使用rsync和硬链接。由于它只需要一次完整备份,因此它在轮换方面做得很好,并且带宽效率很高。

再有便士。它可以进行增量操作,节省带宽和空间。它有一个很好的功能。它可以从一组增量中计算出完整备份。这使您可以删除旧的增量文件。但这是一个相当复杂的系统,适用于较大的设置。

但是,最好的解决方案是在接收端使用ZFS。它将具有高带宽效率,高存储效率并且比其他解决方案快得多。我能想到的唯一真正的缺点是,该盒子上至少应具有8 GiB ECC内存(如果您不运行任何服务而仅将其用于zfs receive),则最好使用4 GiB 。


是的,我知道。但是,如果我删除文件数据集@ 2014-02-04(因为我只想拥有30天的历史记录),该怎么办?然后,我只有在2月4日之后所做的更改,但不是每个文件。
Martin Grohmann 2014年

2
@MartinGrohmann我明白你的意思了。这就是ZFS的优点,您可以毫无问题地删除ZFS上的旧快照。在其他文件系统上,您必须保留旧的文件系统。也许您最好选择类似的方法rsnapshot。或者,您可以在一个月后开始新的非增量式,然后删除以前的增量式。
Marco Marco

谢谢您的帮助; 我刚刚发现了 重复性,这可能就是采用加密功能的方法。
Martin Grohmann 2014年

2
@MartinGrohmann Duplicity是一个不错的程序,但是它也遇到同样的问题。如果只进行增量操作,则空间会不断增长。您必须浪费带宽并进行新的完整备份才能回收空间。双方都可以使用ZFS ,也可以查看bados,它可以根据增量计算新的完整备份。这样一来,您就可以删除旧的增量文件,而无需重新传输所有内容。
Marco Marco

如果问题来自您的带宽,那么一个潜在的解决方案(我现在正在为我的家用ZFS NAS实施)将始终仅将增量发送到远程存储,但是每月一次启动一个远程freeBSD VPS(例如,数字海洋),然后可以打开最后一个完整快照,zfs将一些增量文件添加到其中,然后将结果存储为新快照。VPS仅需要足够长的时间即可创建新的基本备份。Digital Ocean有一个API,可轻松创建/销毁其VPS。而且您的本地系统只需要发送增量备份。
stickj 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.