s3cmd失败次数太多了

qli*_*liq 50 backup ubuntu file-upload amazon-s3

我曾经是一个快乐的s3cmd用户.但是最近当我尝试将一个大型zip文件(~7Gig)传输到Amazon S3时,我收到此错误:

$> s3cmd put thefile.tgz s3://thebucket/thefile.tgz

....
  20480 of 7563176329     0% in    1s    14.97 kB/s  failed
WARNING: Upload failed: /thefile.tgz ([Errno 32] Broken pipe)
WARNING: Retrying on lower speed (throttle=1.25)
WARNING: Waiting 15 sec...
thefile.tgz -> s3://thebucket/thefile.tgz  [1 of 1]
       8192 of 7563176329     0% in    1s     5.57 kB/s  failed
ERROR: Upload of 'thefile.tgz' failed too many times. Skipping that file.
Run Code Online (Sandbox Code Playgroud)

在Ubuntu上使用最新的s3cmd.

为什么会这样?我该如何解决?如果它无法解决,我可以使用哪种替代工具?

use*_*293 56

现在在2014年,aws cli能够上传大文件代替s3cmd.

http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html有安装/配置说明,或者经常:

$ wget https://s3.amazonaws.com/aws-cli/awscli-bundle.zip
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws
$ aws configure
Run Code Online (Sandbox Code Playgroud)

其次是

$ aws s3 cp local_file.tgz s3://thereoncewasans3bucket
Run Code Online (Sandbox Code Playgroud)

会得到满意的结果.


Ali*_*man 28

我自己刚遇到这个问题.我有一个24GB的.tar.gz文件放入S3.

上传较小的部分将有所帮助.

还有~5GB的文件大小限制,因此我将文件拆分成碎片,可以在以后下载碎片时重新组装.

split -b100m ../input-24GB-file.tar.gz input-24GB-file.tar.gz-
Run Code Online (Sandbox Code Playgroud)

该行的最后一部分是"前缀".斯普利特将附加'aa','ab','ac'等.-b100m表示100MB的块.一个24GB的文件最终会有大约240个100mb的部分,称为'input-24GB-file.tar.gz-aa'到'input-24GB-file.tar.gz-jf'.

要在以后组合它们,请将它们全部下载到目录中并:

cat input-24GB-file.tar.gz-* > input-24GB-file.tar.gz
Run Code Online (Sandbox Code Playgroud)

获取原始文件和拆分文件的md5sums并将其存储在S3存储桶中,或者更好,如果它不是那么大,使用像parchive这样的系统来检查,甚至修复一些下载问题也可能是有价值的.

  • 我相信它是s3cmd的限制,因为亚马逊允许几TB的文件. (4认同)
  • 截至目前,S3接受最高5 TB的文件,但只能接受最高5 GB的单个上传.较大的需要多部分上传.http://aws.amazon.com/s3/faqs/#How_much_data_can_I_store (4认同)

Ger*_*ett 15

我尝试了所有其他答案但没有奏效.看起来s3cmd相当敏感.就我而言,s3桶在欧盟.小文件会上传但是当它达到~60k它总是失败.

当我改变〜/ .s3cfg时它起作用了.

以下是我所做的更改:

host_base = s3-eu-west-1.amazonaws.com

host_bucket =%(bucket)s.s3-eu-west-1.amazonaws.com


小智 10

我和ubuntu s3cmd有同样的问题.

s3cmd --guess-mime-type --acl-public put test.zip s3://www.jaumebarcelo.info/teaching/lxs/test.zip
test.zip -> s3://www.jaumebarcelo.info/teaching/lxs/test.zip  [1 of 1]
 13037568 of 14456364    90% in  730s    17.44 kB/s  failed
WARNING: Upload failed: /teaching/lxs/test.zip (timed out)
WARNING: Retrying on lower speed (throttle=0.00)
WARNING: Waiting 3 sec...
test.zip -> s3://www.jaumebarcelo.info/teaching/lxs/test.zip  [1 of 1]
  2916352 of 14456364    20% in  182s    15.64 kB/s  failed
WARNING: Upload failed: /teaching/lxs/test.zip (timed out)
WARNING: Retrying on lower speed (throttle=0.01)
WARNING: Waiting 6 sec...
Run Code Online (Sandbox Code Playgroud)

解决方案是使用s3tools.org说明更新s3cmd:

Debian和Ubuntu

我们的DEB存储库是以最兼容的方式精心创建的 - 它应该适用于Debian 5(Lenny),Debian 6(Squeeze),Ubuntu 10.04 LTS(Lucid Lynx)以及所有较新的,可能适用于一些较旧的Ubuntu版本.从命令行执行以下步骤:

  • 导入S3tools签名密钥:

    wget -O- -q http://s3tools.org/repo/deb-all/stable/s3tools.key | sudo apt-key add -

  • 将repo添加到sources.list:

    sudo wget -O/etc/apt/sources.list.d/s3tools.list http://s3tools.org/repo/deb-all/stable/s3tools.list

  • 刷新包缓存并安装最新的s3cmd:

    sudo apt-get update && sudo apt-get install s3cmd

  • 复制此处链接的内容,保留链接作为参考. (2认同)

Jay*_*ik- 6

当Amazon返回错误时会发生此错误:它们似乎会断开套接字以防止您上传数十亿字节的请求以回复"否,失败"作为响应.这就是为什么有些人由于时钟偏差而得到它,有些人因为政策错误而得到它,而其他人则因为需要使用多部分上传API而遇到大小限制.并不是每个人都错了,或者甚至在看不同的问题:这些都是s3cmd中相同基础行为的不同症状.

由于大多数错误条件将是确定性的,s3cmd丢弃错误消息并重试速度较慢的行为是一种疯狂的不幸:(.然后要获得实际的错误消息,您可以进入/ usr/share/s3cmd/S3/S3.py(记得删除相应的.pyc以便使用更改)并print e在send_file函数的except Exception, e:块中添加一个.

在我的例子中,我试图将上传文件的Content-Type设置为"application/x-debian-package".显然,s3cmd的S3.object_put 1)不尊重通过--add-header传递的Content-Type,但是2)无法覆盖通过--add-header添加的Content-Type,因为它将标题存储在带有大小写的字典中 - 敏感键.结果是它使用其"content-type"值进行签名计算,然后结束(至少有很多请求;这可能基于某种类型的哈希排序)向Amazon发送"Content-Type",导致签名错误.

在我今天的特定情况下,似乎-M会导致s3cmd猜测正确的Content-Type,但它似乎只基于文件名来做...我希望它会使用基于内容的mimemagic数据库的文件.老实说,虽然:s3cmd甚至无法在上传文件失败时返回失败的shell退出状态,因此结合所有这些其他问题,最好只编写自己的一次性工具来完成一个你需要的东西......几乎可以肯定的是,当你被这个工具的一些角落咬伤时,它最终会节省你的时间:(.


Jir*_*ong 5

s3cmd 1.0.0尚不支持多部分.我试过1.1.0-beta,它运行得很好.您可以在这里阅读有关新功能的内容:http://s3tools.org/s3cmd-110b2-released


qli*_*liq 4

就我而言,失败的原因是服务器的时间早于 S3 时间。由于我在我的服务器(位于美国东部)中使用 GMT+4,并且我使用亚马逊的美国东部存储设施。

将我的服务器调整为美国东部时间后,问题就消失了。