我正在开发一个开源备份实用程序,用于备份文件并通过 FTP/SFTP/SCP 协议(protocol)将它们传输到各种外部位置,例如 Amazon S3、Rackspace Cloud Files、Dropbox 和远程服务器。
现在,我收到了进行增量备份的功能请求(以防所做的备份很大并且传输和存储成本昂贵)。我环顾四周,有人提到了 rsync 实用程序。我对此进行了一些测试,但不确定这是否合适,因此想听听任何有 rsync 经验的人的意见。
让我快速概述一下备份时会发生什么。基本上它会开始转储 MySQL、PostgreSQL、MongoDB、Redis 等数据库。它可能会从文件系统中获取一些常规文件(例如图像)。一旦一切就位,它会将所有内容捆绑在一个 .tar 中(此外,它还会使用 gzip
和 openssl
对其进行压缩和加密)。
完成后,我们将得到一个如下所示的文件:
mybackup.tar.gz.enc
现在我想将此文件传输到远程位置。目标是降低带宽和存储成本。因此,我们假设这个小备份包的大小约为 1GB
。因此,我们使用 rsync 将其传输到远程位置并在本地删除文件备份。明天将生成一个新的备份文件,结果发现过去 24 小时内添加了很多数据,我们构建一个新的 mybackup.tar.gz.enc
文件,它看起来就像我们的大小高达 1.2GB
一样。
现在,我的问题是:是否可以仅传输过去 24 小时内添加的 200MB
?我尝试了以下命令:
rsync -vhP --append mybackup.tar.gz.enc 备份/mybackup.tar.gz.enc
结果:
mybackup.tar.gz.enc 1.20G 100% 36.69MB/s 0:00:46 (xfer#1, to-check=0/1)
sent 200.01M bytes
received 849.40K bytes
8.14M bytes/sec
total size is 1.20G
speedup is 2.01
查看发送的 200.01M 字节
我想说数据的“附加”工作正常。我现在想知道的是,它是否传输了整个1.2GB
,以便确定要附加到现有备份的数量和内容,还是真的只传输200MB
?因为如果它传输整个 1.2GB
,那么我看不出它与在单个大文件上使用 scp
实用程序有什么不同。
另外,如果我想要完成的事情是可能的,您推荐什么标志?如果 rsync
无法实现,您是否可以推荐使用任何实用程序?
非常感谢任何反馈!
最佳答案
gzip 的性质是,源文件中的微小更改可能会导致生成的压缩文件发生很大的更改 - gzip 每次都会自行决定压缩您提供的数据的最佳方法。
某些版本的 gzip 具有 --rsyncable
开关,该开关将 gzip 工作的 block 大小设置为与 rsync 相同,这会导致压缩效率稍低(在大多数情况下),但会限制对输出文件的更改与源文件中的更改位于输出文件的同一区域。
如果您无法做到这一点,那么通常最好 rsync 未压缩的文件(如果考虑带宽,则使用 rsync 自己的压缩)并在最后进行压缩(如果考虑磁盘空间)。显然,这取决于您的用例的具体情况。
关于backup - RSync 每次都会更改的单个(存档)文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5200432/