6

我正在开发一个开源备份实用程序,它可以备份文件并通过 FTP/SFTP/SCP 协议将它们传输到各种外部位置,例如 Amazon S3、Rackspace Cloud Files、Dropbox 和远程服务器。

现在,我收到了关于进行增量备份的功能请求(以防所做的备份很大并且传输和存储变得昂贵)。我一直在环顾四周,有人提到了该rsync实用程序。我对此进行了一些测试,但不确定这是否合适,所以想听听任何有经验的人的意见rsync

让我简要介绍一下进行备份时会发生什么。基本上它会开始转储数据库,如 MySQL、PostgreSQL、MongoDB、Redis。它可能需要来自文件系统的一些常规文件(如图像)。一切就绪后,它将全部捆绑在一个 .tar 中(此外,它将使用gzipand对其进行压缩和加密openssl)。

完成后,我们有一个文件,如下所示:
mybackup.tar.gz.enc

现在我想将此文件传输到远程位置。目标是降低带宽和存储成本。所以让我们假设这个小备份包1GB的大小差不多。因此,我们使用rsync将其传输到远程位置并在本地删除文件备份。明天将生成一个新的备份文件,事实证明在过去 24 小时内添加了更多数据,我们构建了一个新mybackup.tar.gz.enc文件,看起来我们1.2GB的大小已经达到了。

现在,我的问题是:是否可以仅转移200MB过去 24 小时内添加的内容?我尝试了以下命令:

rsync -vhP --append mybackup.tar.gz.enc backups/mybackup.tar.gz.enc

结果:

mybackup.tar.gz.enc 1.20G 100% 36.69MB/s 0:00:46 (xfer#1, to-check=0/1)

发送 200.01M 字节
接收 849.40K 字节
8.14M 字节/秒
总大小为 1.20G
加速为 2.01

看着sent 200.01M bytes我会说数据的“附加”工作正常。我现在想知道的是,它是否传输了整个文件1.2GB以便弄清楚要附加到现有备份的数量和内容,还是真的只传输200MB? 因为如果它传输了整个文件1.2GB,那么我看不出它与scp在单个大文件上使用该实用程序有何不同。

另外,如果我想要完成的工作完全有可能,你推荐什么标志?如果无法使用rsync,是否可以推荐使用任何实用程序?

非常感谢任何反馈!

4

3 回答 3

8

gzip 的本质是源文件中的微小更改可能导致生成的压缩文件发生非常大的更改 - gzip 每次都会自行决定压缩您提供的数据的最佳方式。

某些版本的 gzip 具有将--rsyncablegzip 工作的块大小设置为与 rsync 相同的开关,这会导致压缩效率稍低(在大多数情况下),但会将对输出文件的更改限制在输出的相同区域文件作为源文件中的更改。

如果这对您不可用,那么通常最好对未压缩的文件进行 rsync(如果考虑带宽,则使用 rsync 自己的压缩)并在最后进行压缩(如果考虑磁盘空间)。显然,这取决于您的用例的具体情况。

于 2012-10-24T14:43:46.877 回答
6

它只发送它所说的发送 - 只传输更改的部分是rsync. 它使用了一些相当聪明的校验和算法(并且它通过网络发送这些校验和,但这可以忽略不计 - 数据比传输文件本身少几个数量级;在你的情况下,我假设那是.01in 200.01M)并且只传输那些它需要的零件。

另请注意,已经有相当强大的基于 rsync 的备份工具 - 即Duplicity。根据您的代码的许可证,可能值得看看他们是如何做到这一点的。

于 2011-03-04T23:57:41.177 回答
1

如果现有数据有任何更改,新的 rsync --append 将破坏您的文件内容。(自 3.0.0 起)

于 2013-10-22T09:58:22.927 回答