backup - RSync 每次都会更改的单个(存档)文件

标签 backup rsync remote-server space-efficiency single-file

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

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

让我快速概述一下备份时会发生什么。基本上它会开始转储 MySQL、PostgreSQL、MongoDB、Redis 等数据库。它可能会从文件系统中获取一些常规文件(例如图像)。一旦一切就位,它会将所有内容捆绑在一个 .tar 中(此外,它还会使用 gzipopenssl 对其进行压缩和加密)。

完成后,我们将得到一个如下所示的文件:
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/

相关文章:

backup - 复杂的数据库备份

ssh - 将文件从一个 EC2 实例同步到另一个

amazon-web-services - 已安装 rsync 时未找到 rsync 命令

dreamweaver - 文件保存 Dreamweaver CS5 上的自动同步

linux - libstdc++.so.6 : version not found - NO admin rights

linux - 如何通过 Linux 或 Mac 将整个树莓派 TF 卡的文件系统备份到镜像中

mysql - 从物理文件恢复MySQL数据库

c - 运行 C 程序备份 Linux 文件

linux - rsync:删除的文件重新出现/传输的文件在一段时间后消失

x509certificate - 使用 .Net 从远程证书存储中读取