s3cmd失败太多次了
我曾经是一个快乐的S3CMS用户。 然而,最近当我尝试将一个大的压缩文件(〜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.
我在Ubuntu上使用最新的s3cmd 。
为什么这样? 我该如何解决呢? 如果它是无法解决的,我可以使用什么替代工具?
而现在在2014年,aws cli有能力上传大文件来代替s3cmd。
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html有安装/configuration说明,或经常:;
$ 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
其次是
$ aws s3 cp local_file.tgz s3://thereoncewasans3bucket
会得到满意的结果。
我刚刚遇到这个问题。 我有一个24GB的.tar.gz文件放入S3。
上传较小的作品将有所帮助。
也有~5GB的文件大小的限制,所以我把文件分割成片断,当片断被下载后可以重新组装。
split -b100m ../input-24GB-file.tar.gz input-24GB-file.tar.gz-
该行的最后一部分是一个“前缀”。 Split会将“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
把原始文件和分割文件的md5sum存储到S3存储桶中,如果不是那么大,使用像parchive这样的系统可以检查,甚至修复一些下载问题也是有价值的。
我尝试了所有其他的答案,但没有工作。 它看起来像s3cmd是相当敏感的。 在我的情况下,s3桶在欧盟。 小文件会上传,但是当它达到~60K时,它总是失败。
当我改变〜/ .s3cfg它工作。
以下是我所做的更改:
host_base = s3-eu-west-1.amazonaws.com
host_bucket =%(桶)s.s3-eu-west-1.amazonaws.com
我有与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...
解决scheme是用s3tools.org的指令更新s3cmd :
Debian和Ubuntu
我们的DEB存储库已经以最兼容的方式进行了仔细的创build – 它应该适用于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 -
将这个回购添加到sources.list:
sudo wget -O/etc/apt/sources.list.d/s3tools.list http://s3tools.org/repo/deb-all/stable/s3tools.list
刷新包caching并安装最新的s3cmd:
sudo apt-get update && sudo apt-get install s3cmd
当Amazon返回一个错误时,会发生这个错误:他们似乎然后断开套接字,以防止上传千兆字节的请求,以回应“没有,失败”的回应。 这就是为什么有些人由于时钟倾斜而得到它,有些人由于策略错误而得到它,另外一些人则遇到需要使用多部分上传API的大小限制。 并不是每个人都是错的,或者甚至是在看不同的问题:这些都是s3cmd中相同潜在行为的不同症状。
由于大多数错误条件都是确定性的,所以s3cmd扔掉错误信息和重试速度慢的行为是一种非常不幸的现象。为了得到实际的错误信息,你可以进入/ usr / share / s3cmd / S3 / S3.py(记住删除相应的.pyc,以便使用更改),并在send_file函数的except Exception, e:
block except Exception, e:
添加一个print e
。
在我的情况下,我试图将上传的文件的Content-Type设置为“application / x-debian-package”。 很明显,s3cmd的S3.object_put 1)并不尊重通过–add-header传递的Content-Type,但是2)无法覆盖通过–add-header添加的Content-Type,因为它将标题存储在字典中,敏感键。 其结果是,它使用“content-type”的值进行签名计算,然后结束(至less有很多请求;这可能基于某种散列顺序),向Amazon发送“Content-Type”导致签名错误。
在我今天的具体情况下,似乎-M会导致s3cmd猜测正确的内容types,但它似乎是基于文件名单做的…我本来希望它会使用基于内容的mimemagic数据库的文件。 老实说,s3cmd在上传文件失败时甚至无法返回失败的shell退出状态,所以结合所有这些其他的问题,最好是编写自己的一次性工具来做一个你需要的东西…几乎可以肯定的是,当你被这个工具的一些特殊情况所困扰时,最终它会为你节省时间:(。
s3cmd 1.0.0不支持多部分。 我试过1.1.0-beta,它工作得很好。 你可以阅读这里的新function: http : //s3tools.org/s3cmd-110b2-released
在我的情况下,失败的原因是服务器在S3时间之前的时间。 由于我在我的服务器(位于美国东部)使用了GMT + 4,而且我正在使用亚马逊的美国东部存储设备。
调整我的服务器到美国东部时间后,问题就没有了。
我遇到了同样的问题,原来是~/.s3cfg
一个错误的bucket_location
值。
这个博客文章引导我回答。
如果您上传的存储桶不存在(或者您错过了键入),则会导致该错误。 谢谢你的一般错误信息。 – 更多信息,请访问: http : //jeremyshapiro.com/blog/2011/02/errno-32-broken-pipe-in-s3cmd/#sthash.ZbGwj5Ex.dpuf
在检查我的~/.s3cfg
,看到它有:
bucket_location = Sydney
而不是:
bucket_location = ap-southeast-2
更正此值以使用正确的名称解决了问题。
对我来说,以下工作:
在.s3cfg中,我更改了host_bucket
host_bucket = %(bucket)s.s3-external-3.amazonaws.com
s3cmd版本1.1.0-beta3或更高版本将自动使用分段上传 ,允许发送任意大的文件( 来源 )。 你也可以控制它使用的块大小。 例如
s3cmd --multipart-chunk-size-mb=1000 put hugefile.tar.gz s3://mybucket/dir/
这将以1 GB的块进行上传。
我遇到了安全组策略设置错误的同一个pipe道错误。我怪S3文档。
我写了关于如何在我的博客中正确设置政策 ,即:
{ "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation", "s3:ListBucketMultipartUploads" ], "Resource": "arn:aws:s3:::example_bucket", "Condition": {} }, { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectAclVersion" ], "Resource": "arn:aws:s3:::example_bucket/*", "Condition": {} } ] }
在我的情况下,我已经解决这只是添加正确的权限。
Bucket > Properties > Permissions "Authenticated Users" - List - Upload/Delete - Edit Permissions
我遇到了一个类似的错误,最终导致机器上的时间漂移。 正确设置时间为我解决了这个问题。
search.s3cfg
文件,一般在您的主文件夹中。
如果你有它,你得到了恶棍。 更改以下两个参数应该可以帮到你。
socket_timeout = 1000 multipart_chunk_size_mb = 15
我通过简单地不使用s3cmd来解决这个问题。 相反,我在GitHub上的python项目S3-Multipart上取得了巨大的成功。 它可以上传和下载,并可以根据需要使用多个线程。