Sea*_*ary 88 amazon-s3 amazon-web-services
我一直试图找到一个比s3cmd更好的复制桶的命令行工具. s3cmd
可以复制存储桶而无需下载和上传每个文件.我通常使用s3cmd复制存储桶的命令是:
s3cmd cp -r --acl-public s3://bucket1 s3://bucket2
Run Code Online (Sandbox Code Playgroud)
这有效,但它非常慢,因为它一次通过API复制每个文件.如果s3cmd
能以并行模式运行,我会非常高兴.
是否有其他选项可用作命令行工具或人们用来复制比速度更快的存储桶的代码s3cmd
?
编辑:看起来像s3cmd-modification正是我正在寻找的.太糟糕了它不起作用.还有其他选择吗?
pyt*_*981 151
AWS CLI似乎完美地完成了这项工作,并且具有成为官方支持工具的好处.
aws s3 sync s3://mybucket s3://backup-mybucket
Run Code Online (Sandbox Code Playgroud)
http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
默认支持并发传输.请参阅http://docs.aws.amazon.com/cli/latest/topic/s3-config.html#max-concurrent-requests
要快速传输大量小文件,请从EC2实例运行脚本以减少延迟,并增加max_concurrent_requests
以减少延迟的影响.例如:
aws configure set default.s3.max_concurrent_requests 200
Run Code Online (Sandbox Code Playgroud)
dea*_*rds 65
如果您不介意使用AWS控制台,您可以:
它仍然相当慢,但你可以不管它,让它做它的事情.
小智 24
我尝试使用AWS Web控制台s3cmd
和AWS CLI 克隆两个存储桶.虽然这些方法大部分时间都有效,但它们很慢.
然后我找到了s3s3mirror
:用于同步两个S3存储桶的专用工具.它是多线程的,比我尝试的其他方法快得多.我迅速将Giga字节的数据从一个AWS区域移动到另一个AWS区域.
请访问https://github.com/cobbzilla/s3s3mirror查看,或从https://registry.hub.docker.com/u/pmoust/s3s3mirror/下载Docker容器
对于adhoc解决方案,用于aws cli
在存储桶之间进行同步:
aws s3 sync
速度取决于:
- 对S3端点的API调用的延迟
- 并发中的API调用量
要提高同步速度:
- aws s3 sync
从AWS实例运行(FreeBSD上的c3.large就可以了;-))
- 使用以下命令更新〜/ .aws/config:
- max_concurrent_requests = 128
-max_queue_size = 8096
使用以下配置和实例类型,我能够在474秒内同步存储桶(309GB,72K文件,us-east-1).
有关更通用的解决方案,请考虑 - AWS DataPipeLine或S3跨区域复制.
我不知道还有其他 S3 命令行工具,但如果这里没有出现任何问题,那么编写您自己的工具可能是最简单的。
选择您喜欢的任何语言和 Amazon SDK/工具包。然后您只需要列出/检索源存储桶内容并复制每个文件(显然是并行的)
查看s3cmd-modification的源代码(我承认我对 python 一无所知),看起来他们没有并行化存储桶到存储桶代码,但也许您可以使用标准上传/下载并行代码作为起点做这个。
归档时间: |
|
查看次数: |
55071 次 |
最近记录: |