如何有效地使用 S3 来增量备份文件?

如何有效地使用 S3 来增量备份文件?

我理解 rsync 的工作原理,但有两个方面。S3 没有守护进程,虽然有,但基本上只是 HTTP。

看上去有几种方法。

s3rsync(但这只是将 rsync 连接到 s3)。很简单。我不确定是否要依赖第三方。我希望 s3 支持 rsync。

还有一些 rsync “克隆”,比如 duplicity,声称无需上述附加组件即可支持 s3。但它如何做到这一点?它们是否在本地保存索引文件?我不确定这样做如何能提高效率。

我显然想使用 s3,因为它便宜又可靠,但 rsync 也可以用于某些事情,例如备份巨大的图像目录。

这里有什么选择?使用 duplicity + s3 而不是 rsync + s3rsync + s3 会有什么损失?

答案1

自上次回答该问题以来,出现了一个新的 AWS 命令​​行工具,aws

它可以同步,类似 rsync,在本地存储和 s3 之间。示例用法:

aws s3 sync s3://mybucket /some/local/dir/

如果你的系统的 Python 环境设置正确,则可以使用以下方式安装 AWS 客户端pip

pip install awscli

答案2

s3cmd 工具有一个很好的sync选择。我用它来同步本地备份,使用如下命令:

s3cmd sync --skip-existing $BACKUPDIR/weekly/ s3://MYBACKUP/backup/mysql/

--skip-existing意味着它不会尝试对现有文件进行校验和比较。如果已经有一个同名文件,它会快速跳过它并继续。还有一个--delete-removed选项可以删除本地不存在的文件,但我想保留在 S3 上,即使是那些我已经在本地清理过的文件,所以我不使用它。

答案3

您也可以使用 minio 客户端麦克使用‘mc mirror’命令就可以完成这个工作。

$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain 
  • mc: minio客户端
  • share/sharegain:本地目录
  • s3:别名https://s3.amazonaws.com
  • MyS3Bucket:我的远程 S3 存储桶
  • share/sharegain:我在 s3 上的对象

您可以编写一个简单的脚本作为 cronjob,它将定期保持同步。

希望能帮助到你。

答案4

S3 是一个通用对象存储系统,它为您提供了足够的灵活性来设计如何使用它。

从您的问题来看,我不确定您遇到的是 rsync 的问题(索引除外)还是“第三方”工具的问题。

如果您拥有大量结构良好的文件,则可以在子文件夹上运行多个 s3 同步。

亚马逊的工作人员还允许您从便携式硬盘导入/导出大文件到 S3 或 EBS——http://aws.amazon.com/importexport/您可以将其用于第一次上传。

请参阅此处的 Amazon s3 最佳实践——http://aws.amazon.com/articles/1904

至于不同的工具,请尝试一下,看看哪种最适合您。至于定价,如果适合您的需求,可以降低冗余定价——http://aws.amazon.com/s3/pricing/

一般建议——拥有快速的多核 CPU 和良好的网络管道。

更新:提及 S3 上的校验和

关于 S3,S3 将数据存储在键值对中,没有目录的概念。S3sync 验证校验和(S3 有一种机制可以将校验和作为标头发送以进行验证 - Content-MD5 标头)。最佳实践链接数据完整性部分对此进行了详细介绍。S3 允许您发送/验证和检索校验和。有很多人使用 duplicity 进行增量备份。即使 S3 上没有运行 rsync,您也可以像我在此处提到的那样进行校验和。

rsync 是一种经过验证的工具,并且大多数现代工具都使用相同的算法或 rsync 库或从外部调用 rsync。

相关内容