s3cmd失败太多次了

它曾经是我最喜欢的备份传输代理,但现在我经常从同一个Ubuntu服务器/networking上的s3cmd获得这个结果:

root@server:/home/backups# s3cmd put bkup.tgz s3://mybucket/ bkup.tgz -> s3://mybucket/bkup.tgz [1 of 1] 36864 of 2711541519 0% in 1s 20.95 kB/s failed WARNING: Upload failed: /bkup.tgz ([Errno 32] Broken pipe) WARNING: Retrying on lower speed (throttle=0.00) WARNING: Waiting 3 sec... bkup.tgz -> s3://mybucket/bkup.tgz [1 of 1] 36864 of 2711541519 0% in 1s 23.96 kB/s failed WARNING: Upload failed: /bkup.tgz ([Errno 32] Broken pipe) WARNING: Retrying on lower speed (throttle=0.01) WARNING: Waiting 6 sec... bkup.tgz -> s3://mybucket/bkup.tgz [1 of 1] 28672 of 2711541519 0% in 1s 18.71 kB/s failed WARNING: Upload failed: /bkup.tgz ([Errno 32] Broken pipe) WARNING: Retrying on lower speed (throttle=0.05) WARNING: Waiting 9 sec... bkup.tgz -> s3://mybucket/bkup.tgz [1 of 1] 28672 of 2711541519 0% in 1s 18.86 kB/s failed WARNING: Upload failed: /bkup.tgz ([Errno 32] Broken pipe) WARNING: Retrying on lower speed (throttle=0.25) WARNING: Waiting 12 sec... bkup.tgz -> s3://mybucket/bkup.tgz [1 of 1] 28672 of 2711541519 0% in 1s 15.79 kB/s failed WARNING: Upload failed: /bkup.tgz ([Errno 32] Broken pipe) WARNING: Retrying on lower speed (throttle=1.25) WARNING: Waiting 15 sec... bkup.tgz -> s3://mybucket/bkup.tgz [1 of 1] 12288 of 2711541519 0% in 2s 4.78 kB/s failed ERROR: Upload of 'bkup.tgz' failed too many times. Skipping that file. 

即使对于小于100MB的文件也会发生这种情况,所以我认为这不是一个大小问题。 当我使用–acl-private标志(s3cmd版本1.0.1)时也会发生这种情况,

我很感激,如果你build议一些解决scheme或轻量级的替代s3cmd。

有几个常见的问题导致s3cmd返回你提到的错误:

  • 不存在的(例如错误input的存储桶名称;或尚未置备的存储桶)
  • 尾随空格在你的authentication值(键/ ID)
  • 一个不准确的系统时钟。 可以使用Wireshark(通过http – 而不是https连接)来查看系统时钟与S3时钟的对应关系 – 它们应该在几秒钟内匹配。 考虑使用NTP同步你的时钟,如果这是一个问题。

s3cmd的替代品:

  • s3cp – 一个基于Java的脚本,提供了将文件传输到S3的良好function,以及比s3cmd更详细的错误消息
  • aws – 一种基于Perl的脚本,由Tim Kay编写,可以方便地访问大多数AWS(包括S3)function,而且非常stream行。

如果您希望编写自己的脚本,则可以使用具有执行大多数AWS操作的function的Python Boto库,并且可以在线获得许多示例。 有一个项目在命令行上公开了一些botofunction – 尽pipe目前有一小部分function可用。

这有助于我的情况:

  1. 在桶上做3 s3cmd ls
  2. 它打印了关于redirect的警告
  3. .s3cfg文件中的.s3cfgreplace为bucket_host中的.s3cfg
  4. 重复s3cmd ls ,它不应该再打印警告
  5. 重新上传文件

我的.s3cfg现在是:

 host_bucket = %(bucket)s.s3-external-3.amazonaws.com 

我有与Ubuntu s3cmd命令相同的问题。

下载最新的稳定版本(1.0.1)解决了它: http : //sourceforge.net/projects/s3tools/files/s3cmd/

在尝试了上面所有的东西之后,我发现我仍然使用s3cmd put来解决问题,但是不使用s3cmd sync。 希望这可能是有用的一个人快速修复:)

我有同样的问题,并find了一个解决scheme在这方面作出回应。

当我开始使用IAM进行实验时,出现了这个问题。 在我的情况下,问题是在ARN。 我列出了arn:aws:s3:::bucketname而不是arn:aws:s3:::bucketname/*

这就是为什么我用$ s3cmd ls s:// bucketname没有问题,但不能上传任何文件((

我每秒上传一个带有s3cmd sync的多部分上传失败,并显示以下错误:

 WARNING: Upload failed: /large-file.gz?partNumber=13&uploadId=FOOBAR ([Errno 32] Broken pipe) WARNING: Retrying on lower speed (throttle=0.00) WARNING: Waiting 3 sec... 

下一次上传会很好,但之后又会失败,依此类推。

我得到它与--limit-rate=选项设置为4m使上传被限制至4MB /秒。

所以完整的设置是

 s3cmd sync --limit-rate=4m ... 

这通常也是由.s3cfg文件的HTTPS设置引起的。

尝试将.s3cfg中的“use_https = False”configuration参数更改为“use_https = True”

记住亚马逊桶redirect到Https,因此所有的重试。 我在这个领域看到这个问题颇多。