Назад | Перейти на главную страницу

s3cmd терпит неудачу слишком много раз

Раньше это был мой любимый агент резервного копирования, но теперь я часто получаю такой результат от s3cmd на том же сервере / сети Ubuntu:

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.

Это происходит даже с файлами размером до 100 МБ, поэтому я полагаю, что проблема не в размере. Это также происходит, когда я использую put с флагом --acl-private (s3cmd версии 1.0.1)

Буду признателен, если вы предложите какое-нибудь решение или легкую альтернативу s3cmd.

В моем случае это помогло:

  1. делать s3cmd ls на ведре
  2. он напечатал предупреждение о перенаправлении
  3. заменить bucket_host в .s3cfg файл с тем из предупреждения.
  4. повторение s3cmd ls, он больше не должен выводить предупреждение
  5. повторно загрузить файл

мой .s3cfg теперь:

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

Существует несколько распространенных проблем, из-за которых s3cmd возвращает указанную вами ошибку:

  • Несуществующий (например, неправильно введенное имя сегмента или сегмент, который еще не был подготовлен)
  • Конечные пробелы в ваших значениях аутентификации (ключ / идентификатор)
  • Неточные системные часы. Можно использовать Wireshark (через соединение http, а не https), чтобы увидеть, как ваши системные часы совпадают с часами S3 - они должны совпадать в течение нескольких секунд. Если это проблема, подумайте об использовании NTP для синхронизации часов.

Альтернативы s3cmd:

  • s3cp - сценарий на основе Java, который предлагает хорошую функциональность для передачи файлов на S3 и более подробные сообщения об ошибках, чем s3cmd
  • aws - сценарий на основе Perl, написанный Тимом Каем, который обеспечивает простой доступ к большинству функций AWS (включая S3) и довольно популярен.

Если вы хотите написать свой собственный скрипт, вы можете использовать библиотеку Python Boto, которая имеет функции для выполнения большинства операций AWS и имеет множество примеров, доступных в Интернете. Eсть проект который предоставляет некоторые функции boto в командной строке, хотя в настоящее время доступен очень небольшой набор функций.

У меня была такая же проблема с Ubuntu s3cmd команда.

Загрузка последней стабильной версии (1.0.1) решила эту проблему: http://sourceforge.net/projects/s3tools/files/s3cmd/

Попробовав все вышеперечисленное, я заметил, что у меня все еще проблема с дросселированием с использованием s3cmd put, но вместо этого я не использую s3cmd sync. Надеюсь, это может быть кому-то полезно для быстрого исправления :)

У меня была такая же проблема, и я нашел решение Вот в ответ Samwise.

Эта проблема возникла, когда я начал экспериментировать с 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 так что скорость загрузки ограничивается максимум 4 МБ / с.

Итак, полная настройка

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

Это также часто вызвано настройками HTTPS вашего файла .s3cfg.

Попробуйте изменить параметр конфигурации с use_https = False на use_https = True в файле .s3cfg

Помните, что корзины Amazon перенаправляют на Https и, следовательно, все повторные попытки. Я довольно часто вижу эту проблему в поле.