it-swarm.com.de

s3cmd ist zu oft fehlgeschlagen

Ich war ein fröhlicher s3cmd-Benutzer. Wenn ich jedoch vor kurzem versuche, eine große Zip-Datei (~ 7Gig) an Amazon S3 zu übertragen, erhalte ich diesen Fehler:

$> 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.

Ich verwende das neueste s3cmd auf Ubuntu .

Wieso ist es so? und wie kann ich es lösen? Wenn es nicht lösbar ist, welches alternative Werkzeug kann ich verwenden?

49
qliq

In meinem Fall war der Grund des Ausfalls die Zeit des Servers, die der S3-Zeit voraus war. Da ich GMT + 4 auf meinem Server (im Osten der USA) verwendet habe und Amazon die US-Ostspeichereinrichtung verwendet habe. 

Nachdem ich meinen Server an die US-Ostzeit angepasst hatte, war das Problem behoben. 

4
qliq

Und jetzt, im Jahr 2014, hat das aws-cli die Fähigkeit, statt s3cmd große Dateien hochzuladen. 

http://docs.aws.Amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html hat Anweisungen zum Installieren/Konfigurieren oder häufig:

$ 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

gefolgt von

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

erhalten Sie zufriedenstellende Ergebnisse.

55
user116293

Ich bin gerade auf dieses Problem gestoßen. Ich habe eine 24 GB .tar.gz-Datei, die ich in S3 einfügen kann.

Das Hochladen kleinerer Stücke hilft.

Es gibt auch eine Dateigröße von ~ 5 GB. Daher teile ich die Datei in Teile auf, die beim späteren Herunterladen der Teile erneut zusammengefügt werden können.

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

Der letzte Teil dieser Zeile ist ein "Präfix". Split wird 'aa', 'ab', 'ac' usw. anhängen. Der -b100m bedeutet 100 MB Chunks. Eine 24-GB-Datei enthält etwa 240 100-MB-Teile, die als 'input-24GB-file.tar.gz-aa' bis 'input-24GB-file.tar.gz-jf' bezeichnet werden.

Um sie später zu kombinieren, laden Sie sie in ein Verzeichnis herunter und:

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

Wenn Sie md5sums der Original- und Split-Dateien nehmen und diese im S3-Bucket speichern, oder besser, falls dies nicht so groß ist, ein System wie parchive verwenden kann, um einige Downloadprobleme beheben zu können, kann dies ebenfalls nützlich sein.

28
Alister Bulman

Ich habe alle anderen Antworten ausprobiert, aber keine hat funktioniert. Anscheinend ist s3cmd ziemlich empfindlich ..__ In meinem Fall befand sich der s3-Eimer in der EU. Kleine Dateien würden hochgeladen werden, aber bei ~ 60k wurde dies immer fehlgeschlagen.

Als ich ~/.s3cfg geändert habe, hat es funktioniert.

Hier sind die Änderungen, die ich vorgenommen habe:

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

Host_bucket =% (Bucket) s.s3-eu-west-1.amazonaws.com

15
Ger Hartnett

Ich hatte das gleiche Problem mit 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...

Die Lösung bestand darin, s3cmd mit den Anweisungen von s3tools.org zu aktualisieren :

Debian & Ubuntu

Unser DEB-Repository wurde sorgfältig in den am besten kompatiblen .__ erstellt. übrigens - es sollte für Debian 5 (Lenny), Debian 6 (Squeeze), Ubuntu .__ funktionieren. 10.04 LTS (Lucid Lynx) und für alle neueren und möglicherweise für einige ältere Ubuntu-Versionen. Führen Sie die folgenden Schritte in der Befehlszeile aus:

  • S3tools-Signaturschlüssel importieren: 

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

  • Fügen Sie das Repo zu sources.list hinzu: 

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

  • Aktualisieren Sie den Paketcache und installieren Sie die neueste Version von s3cmd: 

    Sudo apt-get update && Sudo apt-get install s3cmd

10
Jaume Barcelo

Dieser Fehler tritt auf, wenn Amazon einen Fehler zurückgibt: Sie trennen dann den Socket, um das Hochladen von Gigabytes der Anforderung zu verhindern, um als Antwort "Nein, das ist fehlgeschlagen" zurückzugeben. Dies ist der Grund, warum einige Benutzer es aufgrund von Zeitversatz bekommen, einige Leute aufgrund von Richtlinienfehlern, und andere unterliegen Größenbeschränkungen, die die Verwendung der mehrteiligen Upload-API erfordern. Es ist nicht so, dass sich alle irren oder sogar unterschiedliche Probleme betrachten: Dies sind alles unterschiedliche Symptome desselben zugrunde liegenden Verhaltens in s3cmd.

Da die meisten Fehlerbedingungen deterministisch sein werden, ist das Verhalten von s3cmd, die Fehlermeldung wegzuwerfen und ein langsameres Wiederholen auszuführen, eine Art verrücktes Unglück: (...... Um die eigentliche Fehlermeldung zu erhalten, können Sie in/usr/share/s3cmd/S3/S3.py (Denken Sie daran, das entsprechende .pyc zu löschen, damit die Änderungen verwendet werden) und fügen Sie einen print e im except Exception, e:-Block der send_file-Funktion hinzu.

In meinem Fall habe ich versucht, den Content-Type der hochgeladenen Datei auf "application/x-debian-package" zu setzen. Offensichtlich wird in S3.object_put 1 von s3cmd ein über --add-Header übergebener Content-Type nicht berücksichtigt, und 2) kann den über --add-Header hinzugefügten Content-Type nicht überschreiben, da er Header in einem Wörterbuch mit case- sensible Schlüssel. Das Ergebnis ist, dass es eine Signaturberechnung unter Verwendung seines Werts "content-type" durchführt und dann endet (zumindest bei vielen Anfragen; dies kann auf einer Art Hash-Bestellung basieren), die den "Content-Type" an Amazon sendet. was zu dem Signaturfehler führt.

In meinem heutigen Fall scheint es, als würde -M3 veranlassen, dass der richtige Inhaltstyp von s3cmd erraten wird. Dies scheint jedoch allein aufgrund des Dateinamens zu geschehen ... Ich hätte gehofft, dass die auf dem Inhalt basierende mimemagische Datenbank verwendet würde der Datei. Aber ehrlich gesagt: s3cmd kann nicht einmal einen fehlgeschlagenen Shell-Exit-Status zurückgeben, wenn die Datei nicht hochgeladen werden kann. In Kombination mit all diesen anderen Problemen ist es wahrscheinlich besser, ein eigenes Tool zu schreiben, um die Datei zu erstellen Was Sie brauchen ... es ist fast sicher, dass Sie am Ende Zeit sparen, wenn Sie von einem Eckfall dieses Werkzeugs gebissen werden :(.

s3cmd 1.0.0 unterstützt noch nicht mehrteilig. Ich habe 1.1.0-beta ausprobiert und es funktioniert gut. Informationen zu den neuen Funktionen finden Sie hier: http://s3tools.org/s3cmd-110b2-released

5
Jirapong

Ich hatte das gleiche Problem, es stellte sich als bucket_location-Wert in ~/.s3cfg heraus.

Dieser Blogpost führte mich zur Antwort.

Wenn der Bucket, in den Sie hochladen, nicht vorhanden ist (oder Sie haben den Tipp nicht eingegeben), schlägt der Fehler fehl. Danke generische Fehlermeldung. - Weitere Informationen finden Sie unter: http://jeremyshapiro.com/blog/2011/02/errno-32-broken-pipe-in-s3cmd/#sthash.ZbGwj5Ex.dpuf

Nach der Überprüfung meines ~/.s3cfg wurde festgestellt, dass er Folgendes hatte:

bucket_location = Sydney

Eher, als:

bucket_location = ap-southeast-2

Wenn Sie diesen Wert korrigieren, um den Namen proper zu verwenden, wurde das Problem behoben.

4
Nick Breen

Für mich hat folgendes funktioniert:

In .s3cfg habe ich das Host_bucket geändert 

Host_bucket = %(bucket)s.s3-external-3.amazonaws.com
2
user3237783

s3cmd Version 1.1.0-beta3 oder höher verwendet automatisch multipart uploads , um das Versenden von beliebig großen Dateien ( source ) zu ermöglichen. Sie können auch die von Ihnen verwendete Blockgröße steuern. z.B.

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

Dadurch wird der Upload in 1-GB-Blöcken durchgeführt.

1
overthink

Ich bin auf einen ähnlichen Fehler gestoßen, der sich letztendlich auf eine Zeitverschiebung der Maschine zurückzuführen hat. Durch die korrekte Einstellung der Uhrzeit wurde das Problem für mich behoben.

0
yoniLavi

Ich habe den gleichen Fehler durchgebrochen, als die Sicherheitsgruppenrichtlinie falsch festgelegt wurde. Ich beschuldige die S3-Dokumentation.

Ich schrieb über wie man die Richtlinie richtig einstellt in meinem Blog, das heißt:

{
  "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": {}
    }
  ]
}
0
samwize

Suchen Sie nach der .s3cfg-Datei, in der Regel im Home-Ordner. 

Wenn Sie es haben, haben Sie den Bösewicht. Das Ändern der folgenden zwei Parameter sollte Ihnen helfen.

socket_timeout = 1000
multipart_chunk_size_mb = 15
0
Kaey

In meinem Fall habe ich das Problem behoben, indem Sie die richtigen Berechtigungen hinzugefügt haben.

Bucket > Properties > Permissions 
"Authenticated Users"
- List
- Upload/Delete
- Edit Permissions
0
Ignacio Pascual