我正在开发一个开源备份工具,用于备份文件并通过FTP / SFTP / SCP协议将它们传输到各种外部位置,如Amazon S3,Rackspace云文件,Dropbox和远程服务器。
现在,我收到了进行增量备份的功能请求(如果所做的备份很大,并且转移和存储成本很高)。我一直在环顾四周,有人提到rsync
实用程序。我对此进行了一些测试但不确定这是否合适,所以希望听到有rsync
经验的人的说法。
让我简要介绍一下备份时会发生什么。基本上它会开始转储MySQL,PostgreSQL,MongoDB,Redis等数据库。它可能需要文件系统中的一些常规文件(如图像)。一切就绪后,它会将它们全部捆绑在一个.tar中(另外它会使用gzip
和openssl
对其进行压缩和加密。)
一旦完成,我们就会有一个如下所示的文件:
mybackup.tar.gz.enc
现在我想将此文件传输到远程位置。目标是降低带宽和存储成本。因此,我们假设这个小备份包的大小约为1GB
。因此,我们使用rsync
将其传输到远程位置并在本地删除文件备份。明天会生成一个新的备份文件,结果是在过去24小时内添加了更多的数据,我们构建了一个新的mybackup.tar.gz.enc
文件,看起来我们达到{{1大小。
现在,我的问题是:是否可以只转移过去24小时内添加的1.2GB
?我尝试了以下命令:
200MB
结果:
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
查看rsync -vhP --append mybackup.tar.gz.enc backups/mybackup.tar.gz.enc
我会说数据的“附加”工作正常。我现在想知道的是它是否转移整个sent 200.01M bytes
以确定要添加到现有备份的数量和内容,或者真正仅转移{{1} }}?因为如果它转移了整个1.2GB
,那么我看不出它与在单个大文件上使用200MB
实用程序有多大区别。
另外,如果我想要完成的是什么,你建议用什么标志?如果使用1.2GB
无法实现,您是否可以建议使用任何实用程序?
非常感谢任何反馈!
答案 0 :(得分:8)
gzip的本质是,源文件中的小变化可能导致对生成的压缩文件进行非常大的更改 - 每次gzip都会自行决定压缩您提供的数据的最佳方法。< / p>
某些版本的gzip有--rsyncable
开关,它将gzip工作的块大小设置为与rsync相同,这会导致压缩效率略低(在大多数情况下),但会限制对输出的更改将文件发送到与源文件中的更改相同的输出文件区域。
如果您无法使用,那么通常最好对未压缩文件进行rsync(如果考虑带宽,则使用rsync自己的压缩)并在结束时进行压缩(如果考虑磁盘空间)。显然这取决于您的用例的具体情况。
答案 1 :(得分:6)
它只发送了它所发送的内容 - 只传输更改的部分是rsync
的主要功能之一。它使用了一些rather clever checksumming algorithms(它通过网络发送这些校验和,但这可以忽略不计 - 比传输文件本身少几个数量级的数据;在你的情况下,我认为是.01
在200.01M
)中,只传输所需的部分。
另请注意,已有基于rsync的强大备份工具 - 即Duplicity。根据代码的许可,可能值得看看他们是如何做到的。
答案 2 :(得分:1)
如果您的现有数据有任何更改,则新rsync - appepend会破坏您的文件内容。 (自3.0.0起)