Was ist die schnellste und zuverlässigste Methode, um eine 50-GB-Binärdatei in Blöcke von 5 GB oder weniger aufzuteilen und später wieder zusammenzusetzen?

26

Auf unseren Servern läuft Ubuntu Linux, und die Binärdatei ist ein BSON-Dump einer großen MongoDB-Sammlung. Wie zuverlässig ist ein Werkzeug split? Gibt es einen schnelleren oder besseren Weg, dies zu tun?

Hennes
quelle

Antworten:

26

Um zu teilen, teilen Sie -b

Einfach mitmachen cat.

AFAIK sie sind absolut zuverlässig, und ich bezweifle, dass es etwas effizienteres gibt.

Leonbloy
quelle
21

split ist sehr zuverlässig. Wir verwenden es zum Portieren großer Protokolldateien, und es funktionierte gut für bis zu ein paar GB (ohnehin nicht 50 GB).

Ich glaube, Sie können versuchen, die Aufteilung für Ihre Anforderung zu verwenden, und lassen Sie es uns wissen.

In 5 GB Dateien aufteilen

split --bytes = 5G Eingabedatei

Es wird in mehrere Dateien mit 5 GB aufgeteilt und als xaa, xab, xac usw. bezeichnet.

Verketten

cat x *> outfile

Auf diese Weise können Sie am anderen Ende als einzelne Datei verketten.

Der Nerd
quelle
1
Unter OS XI musste split -b50m verwendet werden, um 50-Megabyte-Dateien zu erstellen. Beachten Sie kein Gleichheitszeichen, beachten Sie Kleinbuchstaben.
Funroll
3

Wenn Sie selten installiert haben, hat es für mich sehr gut funktioniert:

Zu trennen

rar a -m0 -v5000m newfilename giantfile.foo
  • a = Dateien zum Archiv hinzufügen
  • m0 = keine Kompression
  • v5000m = in 5000-Megabyte-Blöcke aufgeteilt

Zusammenbauen:

unrar x newfilename.*
  • x = extrahieren

Leistungen:

  • CRC zum Inhalt des geteilten Archivs,
  • Split-File-Reihenfolge wird automatisch beibehalten,
  • Es können mehrere Dateien und Verzeichnisse eingeschlossen werden.
Corey Farwell
quelle
3

split& catsind absolut zuverlässig. Sie können dies zusätzlich inline komprimieren. Angenommen, Ihre Eingabedatei lautet dump.bson:

gzip < dump.bson | split -b 32M - dump.bson.gz.

Und dann rekonstituieren Sie mit diesem:

cat dump.bson.gz.* | gunzip > dump.bson

Tipp, das funktioniert genauso gut mit xz(dec)anstelle vong(un)zip

Joshua Huber
quelle