复制同一 Amazon S3 存储桶中的文件

Posted

技术标签:

【中文标题】复制同一 Amazon S3 存储桶中的文件【英文标题】:Copying files in the same Amazon S3 bucket 【发布时间】:2013-07-29 16:31:01 【问题描述】:

我正在尝试将存储桶上的整个 /contentstore/ 文件夹复制到带有时间戳的版本。基本上/contenstore/ 会被复制到/contentstore/20130729/

我的整个脚本首先使用 s3s3mirror 将我的生产 S3 存储桶克隆到备份。然后,我想将备份重命名为带时间戳的副本,以便我可以保留相同的多个版本。

我有一个使用s3cmd 的工作版本,但它似乎需要异常长的时间。两个存储桶之间的s3s3mirror 部分在几分钟内完成,可能是因为它是对现有文件夹的刷新。但即使是干净的s3s3mirror(备份中没有现有的内容存储)也需要大约 20 分钟。

另一方面,将内容存储复制到备份存储桶上的时间戳副本需要一个多小时 10 分钟。

我做错了吗?同一个存储桶上的数据副本是否应该比两个不同存储桶之间的完整克隆花费更长的时间?

任何想法都将不胜感激。

P.S:我运行的命令是s3cmd --recursive cp backupBucket/contentStore/ backupBucket/20130729/

【问题讨论】:

你是如何创建目录 20130729 的? 我实际上使用的是's3cmd --recursive cp backupBucket/contentStore/backupBucket/20130729/'。这里的“backupBucket”是一个设置为 s3://bucketName 的变量。我应该以不同的方式创建存储桶吗? 我不确定这是否会加快速度,但您是否考虑过下载它们然后上传它们?脚本并不难 不幸的是,下载和上传不是一个选项。我对 AWS 还很陌生,但让我感到困惑的是,在两个不同的存储桶之间复制文件(镜像)比在同一个存储桶中复制文件更快。 您是否考虑过遍历存储桶中所有内容的列表并一次复制一个?递归在内存中的成本更高,因为每个递归调用通常需要将内存地址推送到堆栈 - 以便稍后程序可以返回该点。因此,它可能会使在 aws 或您的计算机上迭代每个文件而不是递归访问它的速度更快、强度更低 【参考方案1】:

由于您的源路径包含您的目标路径,您实际上可能不止一次地复制内容——首先复制到目标路径,然后当目标路径与您的源前缀匹配时再次复制。这也可以解释为什么复制到不同的存储桶比在同一个存储桶中更快。

如果您使用的是 s3s3mirror,请使用 -v 选项,您将准确看到复制的内容。是否显示多次复制相同的密钥?

【讨论】:

以上是关于复制同一 Amazon S3 存储桶中的文件的主要内容,如果未能解决你的问题,请参考以下文章

如何重命名 Amazon S3 存储桶中的文件? [复制]

从同一存储桶中另一个子文件夹中的 s3 子文件夹中复制文件

Amazon S3 boto:如何重命名存储桶中的文件?

我们如何为 Amazon S3 存储桶中的文件夹设置 CORS

如何(批量)删除Amazon S3存储桶中几百个文件的列表

如何在不下载文件的情况下搜索amazon S3存储桶中的文件内容