Warum sollte ich eine einzelne Datei tarieren?

101

In meinem Unternehmen laden wir einen lokalen Entwicklungsdatenbank-Snapshot als db.dump.tar.gzDatei herunter . Die Komprimierung ist sinnvoll, aber der Tarball enthält nur eine einzige Datei ( db.dump).

Gibt es irgendeinen Grund, eine einzelne Datei zu archivieren, oder handelt es sich .tar.gznur um eine solche gebräuchliche Redewendung? Warum nicht einfach .gz?

Gartenkopf
quelle
5
Meiner Meinung nach ist es nur eine Frage der Konvention. Wenn Leute eine Datei mit der Erweiterung gz sehen, denken sie standardmäßig mit tar -zxvf. Aber für diejenigen, die sich den Dateinamen ansehen und feststellen, dass er keine .tgzEndung hat, ist es vollkommen in Ordnung, die Db-Dump-Datei mit gzip zu versehen. Da ich die Komprimierungsalgorithmen nicht genau kenne, bin ich mir nicht sicher, ob tar eine Komprimierung für spärliche Dateien wie db dump vornimmt. Bei Nur-Text-Dateien hat das direkte GZIP der Datei jedoch einen winzigen Größenvorteil gegenüber dem Tarieren zuerst und GZIP die Datei
MelBurslan
3
Beim Teern einer einzelnen Datei müssen lediglich einige Metadatenblöcke am Anfang und am Ende der Datei hinzugefügt werden. Die eigentlichen Dateidaten gelangen über tar unberührt zum Kompressor. Für eine große Datei ist der Größenunterschied zwischen einfacher Komprimierung und Tarierung vernachlässigbar.
Plugwash
In der Vergangenheit habe ich beim Testen verschiedener Komprimierungsmethoden festgestellt .tar.gz, dass sie den meisten anderen gängigen Methoden überlegen sind. Ich erinnere .tarmich, dass es besser war als nur, aber ich kann mich nicht erinnern, ob es besser war als nur .gz. Ironischerweise war Window's .cabFormat die beste Methode, die ich ausprobiert habe, was sehr unerwartet war.
Pharap
@Pharap tarist kein Komprimierungsalgorithmus, sondern ein Archivierungsformat
gardenhead
1
@gardenhead Nun, das würde erklären, warum es nicht sehr gut funktioniert hat.
Pharap

Antworten:

163

Vorteile der Verwendung .tar.gzanstelle von .gzsind, dass

  • tarspeichert mehr Metadaten (UNIX-Berechtigungen usw.) als gzip.
  • Das Setup kann einfacher erweitert werden, um mehrere Dateien zu speichern
  • .tar.gz-Dateien kommen sehr häufig vor. Einige Benutzer haben Rätsel mit nur gezippten Dateien. (vgl. MelBurslans Kommentar )

Der Aufwand für die Verwendung tarist ebenfalls sehr gering.

Wenn es nicht wirklich benötigt wird, empfehle ich immer noch nicht, eine einzelne Datei zu tarieren. Es gibt viele nützliche Tools , die direkt komprimiert einzelne Dateien zugreifen können (wie zum Beispiel zcat, zgrepusw. - auch die bestehenden für bzip2und xz).

Jofel
quelle
35
Ich habe den Metadaten-Aspekt nicht berücksichtigt. Sehr guter Punkt
gardenhead
5
Wenn ich ein sehe .gz, ist mein erster Instinkt zu tar -zxf foo.gz. Das Erinnern daran, dass gzip sogar ein Befehl ist, dauert noch ein paar Sekunden.
bgStack15
2
@ bgStack15 FWIW, das Sie nicht benötigen z(oder das -für diese Angelegenheit), tarerkennen die meisten modernen s automatisch, dass die Datei dekomprimiert werden muss.
drewbenn
2
Standardmäßig gzipwerden der ursprüngliche Dateiname und der Zeitstempel gespeichert. Sie können diese -NOption beim Dekomprimieren verwenden, um sie wiederherzustellen.
Ross Ridge
@ RossRidge danke, ich habe den Text über den ursprünglichen Dateinamen wieder entfernt.
Jofel
63

Sie stellen tatsächlich nur die Hälfte der Frage. Die andere Frage lautet: "Warum sollte ich eine TAR-Datei mit gzip komprimieren?". Und die Antwort ist nicht nur, gzipdass die Datei kleiner wird (in den meisten Fällen):

tar:

  • Speichert Dateinamen und andere Metadaten : Modus, Besitzer-ID, Gruppen-ID, Dateigröße, Änderungszeit
  • speichert eine Prüfsumme (nur für den Header)

gzip:

  • kann den ursprünglichen Dateinamen speichern, aber das ist optional
  • hat eine CRC-32-Prüfsumme über den Originaldaten
  • Es komprimiert die Datei

Mit nur tarSie können nicht sicher sein, dass Ihre Daten nicht beschädigt wurden. Mit nur können gzipSie keine Benutzer- / Gruppen-ID, Änderungszeit und möglicherweise nicht den ursprünglichen Dateinamen wiederherstellen.

Die Kombination ist mächtiger als die einzelnen commmands / Formate bieten, weil sie jeweils andere Funktionen ergänzen .

Anthon
quelle
Vielen Dank für die Klarstellung! Als ich die tarWikipedia-Seite las , habe ich die Beschreibung falsch verstanden, um zu bedeuten, dass die Prüfsumme für die gesamte Datei war.
Gardenhead
Das fühlt sich für mich wie die richtige Antwort an. Ich möchte auch noch ein paar Gründe hinzufügen, die Sie möglicherweise bearbeiten möchten, wenn Sie damit einverstanden sind. 1) Es gibt keine zusätzlichen Kosten für den Administrator für .tgz über .tar oder .gz allein: Sie sind alle nur ein Befehl. 2) Administratoren sichern, kopieren, verschieben, verschieben eine Menge Dateien aus vielen verschiedenen Gründen. DB-Backups sind nur eine davon. Sie können denselben Workflow, dieselben Tools und dieselben Befehle verwenden, unabhängig davon, ob eine oder mehrere Dateien gesichert werden. Warum also Spezialfall mit der Syntax des Befehls gzip für den Fall, dass es eine Datei gibt?
Dewi Morgan
30

Es ist ein ziemlich großer Vorteil der Verwendung von nur-gzipped Textdateien - der Inhalt kann direkt mit Kommandozeilen - Tool wie zugegriffen werden less, zgrep, zcat.

ejdi
quelle
Interessanter Punkt, aber die Frage handelt von einem Datenbank-Snapshot, bei dem es sich wahrscheinlich nicht um eine Textdatei handelt, sondern nicht nur um eine komprimierte Datei.
Underscore_d
9
@underscore_d Alle meine Datenbank-Dumps (meistens mysql und pgsql) sind Text-Dumps, teils, weil sie besser zu retten sind, wenn der Dump teilweise beschädigt wird, und teils, weil ich jede Wiederherstellung mit den üblichen Tools (sed) vorverarbeiten kann , awk, perl, etc) wenn ich muss. dh zuverlässiger und nützlicher als binäre Dumps. Der Nachteil ist, dass Text-Dumps in der Regel größer sind (wen interessiert das? Der Speicherplatz ist günstig und wir haben eine gute Komprimierung) und Wiederherstellungen deutlich langsamer sind (aber weniger, wenn Sie die Wiederherstellung in eine Transaktion einschließen).
cas
1
Was ist der Vorteil dieser Werkzeuge gegenüber dem einfachen Leiten der Ausgabe eines Dekomprimierers in die einfachen Werkzeuge?
CodesInChaos
21

Ich würde sagen, es ist wahrscheinlich, dass die Leute einfach nicht erkennen, dass sie gzip / bzip2 / xz ohne tar verwenden können. Möglicherweise, weil sie aus einem DOS / Windows-Hintergrund stammen, in dem Komprimierung und Archivierung normalerweise in einem einzigen Format ( ZIP , RAR usw.) integriert sind.

Obwohl die Verwendung von tar in einigen Situationen aufgrund der Speicherung von Metadaten oder der Möglichkeit, zusätzliche Dateien hinzuzufügen, geringfügige Vorteile haben kann, gibt es auch Nachteile. Mit einer einfachen gzip / bzip2 / xz-Datei können Sie sie dekomprimieren und die dekomprimierten Daten direkt an ein anderes Tool (z. B. Ihre Datenbank) weiterleiten, ohne die dekomprimierten Daten jemals als Datei auf der Festplatte speichern zu müssen. Mit einem Tarball ist das schwieriger.

Plugwash
quelle
2
Mit GNU tar braucht man nur -O, um die Ausgabe auf stdout zu stellen, also würde ich nicht sagen, dass es viel schwieriger ist!
Hyde
5
Der erste Absatz erscheint plausibel genug für Dateien mit der tgzErweiterung. Der OP-Fall verwendet jedoch tar.gz- und wenn diese hypothetischen Ex-Win / DOS-Benutzer so sind wie ich, sagen sie beim Betrachten einer solchen Datei als Erstes: 'Warum hat sie zwei Erweiterungen?'. Dann googeln sie es und erhalten schnell die Antwort, was genau erklärt, dass tarund Komprimierung unterschiedlich sind. ;-)
underscore_d
17

Es gibt einen wichtigen Unterschied, der tarunter bestimmten Umständen die Verwendung von wichtig machen könnte : Neben den "Metadaten", die @jofel in seiner Antwort erwähnt hat, wird tar der Dateiname im Archiv aufgezeichnet . Wenn Sie es extrahieren, erhalten Sie den ursprünglichen Dateinamen, unabhängig davon, wie das Archiv aufgerufen wird.

In Ihrem Fall haben das Tar-Archiv und die darin enthaltene Datei die entsprechenden Namen db.dump.tar.gzund db.tar, aber nehmen Sie an, Sie benennen die Tar-Datei in 20-Apr-16.dump.tgzoder was auch immer um. Wenn Sie dies mit enttarnen tar xvfz, erhalten Sie db.dump. Zum Vergleich: Entpacken 20-Apr-16.dump.gzund fertig 20-Apr-16.dump. (Bearbeiten: Wie in den Kommentaren erwähnt, zeichnet gzip auch den Dateinamen auf; er wird jedoch normalerweise beim Entpacken nicht verwendet.) Ein tarArchiv kann auch einen relativen Pfadnamen enthalten, der die extrahierte Datei in ein Unterverzeichnis legt.

Ihr Anwendungsfall bestimmt, ob diese Art der Dateinamensbeständigkeit erforderlich oder sogar erwünscht ist oder tatsächlich unerwünscht ist. Unabhängig von der Komprimierung bewegt sich ein tarArchiv jedoch anders als eine normale Datei.

alexis
quelle
6
gzip zeichnet auch den ursprünglichen Dateinamen auf.
Psusi
8
Jep. Der Name ist im gzip-Header optional - offensichtlich gibt es keinen, wenn Sie die Streaming-Ausgabe eines Befehls komprimiert haben - und die meisten Tools stellen ihn nicht standardmäßig wieder her (zum Beispiel müssen Sie ihn gzip --namebeim Dekomprimieren explizit verwenden), aber Sie müssen nicht tar verwenden, um die Dateinamenbeständigkeit zu erhalten.
Meilen
Vielen Dank für den Hinweis, das hatte ich nicht gewusst. Da dies jedoch nicht das Standardverhalten ist, lautet der springende Punkt: Wenn Sie eine Datei im tar-Format verteilen, bleibt der ursprüngliche Dateiname (und möglicherweise der relative Pfad) erhalten, ohne dass der Empfänger eingreifen muss. Das Verteilen einer (g) gezippten Datei funktioniert nicht.
Alexis
8

Zusätzlich zu all den anderen Antworten habe ich kürzlich eine Skriptsituation festgestellt, in der nur eine Datei erwartet wurde, aber ein vorheriger Mitarbeiter die Skripts mit der Möglichkeit geschrieben hat, dass mehr als eine Datei generiert wird. So wurden Dateien geteert und bzipped, dann übertragen und erweitert.

Wenn der Prozess so weit fortgeschritten war, dass eine 4,3-GB-Datei erstellt wurde, wurde ein Rollover ausgeführt und zusätzlich zu einer Dump-Datei eine Dump.001-Datei erstellt. Alle Skripte haben einfach weitergearbeitet.

Das ist proaktive Sysadmin-Faulheit!

Criggie
quelle
2

Ich würde eine einzelne Datei tarieren, um sie unter Beibehaltung des Zeitstempels (der beim Herunterladen leicht übersehen wird) zu kopieren. Dateiberechtigungen und Eigentumsrechte sind weniger wichtig: Download ist ein Begriff, der für Systeme gilt, die nicht gut integriert sind.

Unabhängig davon, ob tar'd oder nicht, ist es üblich, die Datei zu komprimieren, um das Herunterladen zu beschleunigen - und zu vermeiden, dass der Speicherplatz knapp wird.

Thomas Dickey
quelle
-1

Tar ist besonders nützlich für mehrere Dateien, die nicht in ein formales Dateisystem geschrieben wurden. Wenn es aus irgendeinem Grund gelegentlich nur eine zu schreibende Datei gibt, hat dies keine wirkliche Konsequenz. Ich kann meine .tar.gz direkt nach / dev / sdx kopieren, ohne Rücksicht auf Partition oder Dateisystem. Es kann sich auch um Klebeband handeln.

Dies geschieht in der Regel, weil das Skript oder der Prozess aus dem Erbe-Code kopiert wurde. Natürlich müssen Sie nicht tarieren, wenn es nur eine Datei gibt, aber es bleibt Platz für die Erweiterung auf mehrere Dateien ......

mckenzm
quelle