s3cmd слишком много раз терпел неудачу - PullRequest
49 голосов
/ 25 апреля 2011

Раньше я был счастливым пользователем 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.

Я использую последнюю версию s3cmd в Ubuntu .

Почему это так? и как я могу решить это? Если это неразрешимый, какой альтернативный инструмент я могу использовать?

Ответы [ 15 ]

55 голосов
/ 01 марта 2014

А теперь в 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

с последующим

$ aws s3 cp local_file.tgz s3://thereoncewasans3bucket

даст вам удовлетворительные результаты.

28 голосов
/ 28 апреля 2011

Я только что столкнулся с этой проблемой сам. У меня есть файл .tar.gz размером 24 ГБ для помещения в S3.

Поможет загрузить мелкие кусочки.

Существует также ограничение на размер файла ~ 5 ГБ, поэтому я делю файл на части, которые могут быть собраны заново при последующей загрузке фрагментов.

split -b100m ../input-24GB-file.tar.gz input-24GB-file.tar.gz-

Последняя часть этой строки - «префикс». Split добавит к нему «aa», «ab», «ac» и т. Д. -B100m означает куски по 100 МБ. Файл размером 24 ГБ будет содержать около 240 100 МБ частей, называемых «input-24GB-file.tar.gz-aa» или «input-24GB-file.tar.gz-jf».

Чтобы объединить их позже, загрузите их все в каталог и:

cat input-24GB-file.tar.gz-* > input-24GB-file.tar.gz

Взятие md5 сумм исходных и разделенных файлов и сохранение их в корзине S3 или лучше, если она не так велика, с использованием такой системы, как parchive , чтобы иметь возможность проверять и даже устранять некоторые проблемы с загрузкой. также может быть ценным.

15 голосов
/ 06 ноября 2013

Я попробовал все остальные ответы, но ни один не помог.Похоже, s3cmd довольно чувствительный.В моем случае ведро s3 было в ЕС.Небольшие файлы загружались, но когда он доходил до ~ 60k, он всегда терпел неудачу.

Когда я менял ~ / .s3cfg, это работало.

Вот изменения, которые я сделал:

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

host_bucket =% (сегмент) s.s3-eu-west-1.amazonaws.com

10 голосов
/ 27 июня 2012

У меня была такая же проблема с 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...

Решением было обновить s3cmd с помощью инструкций с s3tools.org :

Debian & Ubuntu

Наш репозиторий DEB был тщательно создан в наиболее совместимом кстати - должно работать на Debian 5 (Lenny), Debian 6 (Squeeze), Ubuntu 10.04 LTS (Lucid Lynx) и для всех более новых и, возможно, для некоторых старых версий Ubuntu. Выполните следующие действия из командной строки:

6 голосов
/ 19 июля 2013

Эта ошибка возникает, когда Amazon возвращает ошибку: они, похоже, затем отключают сокет, чтобы не дать вам загрузить гигабайты запроса, чтобы получить ответ «нет, не получилось» в ответ.Вот почему некоторые люди получают его из-за перекоса часов, некоторые получают его из-за ошибок политики, а другие сталкиваются с ограничениями размера, требующими использования API загрузки из нескольких частей.Дело не в том, что все не правы или даже смотрят на разные проблемы: это все разные симптомы одного и того же базового поведения в s3cmd.

Поскольку большинство состояний ошибок будут детерминированными, поведение броска s3cmdудалить сообщение об ошибке, и повторная попытка сделать это немного сумасшедшая неудача :(. Itthen Чтобы получить реальное сообщение об ошибке, вы можете перейти в /usr/share/s3cmd/S3/S3.py (не забудьте удалить соответствующий .pyc, чтобы изменения) и добавьте print e в блок except Exception, e: функции send_file.

В моем случае я пытался установить тип содержимого загружаемого файла в "application / x-debian-package"Msgstr "По всей видимости, S3obd S3.object_put 1) не учитывает Content-Type, переданный через --add-header, и все же 2) не может перезаписать Content-Type, добавленный через --add-header, так как заголовки хранятся в словаре счувствительные к регистру ключи.В результате он выполняет вычисление подписи, используя свое значение «content-type», а затем в конечном итоге (по крайней мере, со многими запросами; это может быть основано на каком-то порядке хеширования) отправляет «Content-Type» в Amazon,приводя к ошибке подписи.

В моем конкретном случае сегодня кажется, что -M заставит s3cmd угадать правильный Content-Type, но, похоже, это будет сделано только на основе имени файла ... Я бынадеялся, что он будет использовать базу данных mimemagic на основе содержимого файла.Честно говоря, хотя: s3cmd даже не удается вернуть состояние неудачного завершения оболочки, когда не удается загрузить файл, поэтому в сочетании со всеми этими другими проблемами, вероятно, лучше просто написать свой собственный одноразовый инструмент, чтобы сделать тотто, что вам нужно ... почти наверняка, в конце концов, это сэкономит вам время, когда вас укусит какой-то угловой пример этого инструмента: (.

5 голосов
/ 11 сентября 2012

s3cmd 1.0.0 пока не поддерживает составные части. Я попробовал 1.1.0-бета, и она работает просто отлично Вы можете прочитать о новых функциях здесь: http://s3tools.org/s3cmd-110b2-released

4 голосов
/ 02 апреля 2016

У меня возникла та же проблема, оказалось, что значение bucket_location в ~/.s3cfg.

оказалось неверным. * Этот пост в блоге приводит меня к ответу.

Есликорзина, в которую вы загружаете, не существует (или вы ее пропустили), она не сработает с этой ошибкой.Спасибо, общее сообщение об ошибке.- См. Больше на: http://jeremyshapiro.com/blog/2011/02/errno-32-broken-pipe-in-s3cmd/#sthash.ZbGwj5Ex.dpuf

После проверки мой ~/.s3cfg увидел, что он имел:

bucket_location = Sydney

Вместо:

bucket_location = ap-southeast-2

Исправление этого значения для использования правильных имен разрешило проблему.

4 голосов
/ 06 декабря 2011

В моем случае причиной сбоя было время сервера, опережающее время S3. Поскольку я использовал GMT + 4 на своем сервере (расположенном на востоке США) и использовал хранилище Amazon на востоке США.

После настройки моего сервера на восточное время США проблема исчезла.

2 голосов
/ 26 января 2014

Для меня сработало следующее:

В .s3cfg я изменил host_bucket

host_bucket = %(bucket)s.s3-external-3.amazonaws.com
1 голос
/ 26 ноября 2014

s3cmd версии 1.1.0-бета3 или выше автоматически использует многоэтапную загрузку , чтобы разрешить отправку произвольно больших файлов ( source ). Вы также можете контролировать размер чанка, который он использует. например,

s3cmd --multipart-chunk-size-mb=1000 put hugefile.tar.gz s3://mybucket/dir/

Это сделает загрузку кусками по 1 ГБ.

...