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)
为什么会这样?我该如何解决?如果它无法解决,我可以使用哪种替代工具?
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这样的系统来检查,甚至修复一些下载问题也可能是有价值的.
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
当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退出状态,因此结合所有这些其他问题,最好只编写自己的一次性工具来完成一个你需要的东西......几乎可以肯定的是,当你被这个工具的一些角落咬伤时,它最终会节省你的时间:(.
就我而言,失败的原因是服务器的时间早于 S3 时间。由于我在我的服务器(位于美国东部)中使用 GMT+4,并且我使用亚马逊的美国东部存储设施。
将我的服务器调整为美国东部时间后,问题就消失了。
| 归档时间: |
|
| 查看次数: |
30985 次 |
| 最近记录: |