Wird durch die Angabe der Komprimierungs-Engine für tar direkt weniger Speicherplatz für die Zwischenablage benötigt als zuerst Teren und dann Komprimieren?

372
joelostblom

Wenn ich tarein Verzeichnis archiviere und es dann separat komprimiere, z. B. xzmit einem Ordner, dann gibt es einen Punkt, an dem ich drei Dateien auf meinem System habe - dir, dir.tarund dir.tar.xz. Sobald die Komprimierung abgeschlossen ist,dir.tar wird sie gelöscht, aber es scheint, als müsste ich noch sicherstellen, dass ich genügend freien Speicherplatz habe, um alle drei Dateien in diesem Setup unterzubringen.

Wenn Sie das Komprimierungsflag direkt mit tar verwenden, wird die komprimierte Datei ohne ein beobachtbares Element erstellt .tar Zwischenstufe erstellt und es scheint, dass ich nur freien Speicherplatz in Höhe des Verzeichnisses und der komprimierten Datei benötige.

Ich hatte anfangs die Hypothese, dass das Tar-Archiv während der Komprimierung vielleicht Stück für Stück erstellt und gelöscht wurde. Gleichzeitig erinnere ich mich, dass ich irgendwo gelesen habe, dass das gesamte Tar-Archiv vor der Komprimierung erstellt werden muss. Ich kann keine temporäre tar-Datei beobachten, versteckt oder nicht.

Benötigt die Verwendung von tar mit einem Komprimierungsflag tatsächlich weniger freien Speicherplatz als bei der ersten Verwendung von tar, gefolgt von einem Komprimierungsprogramm? Warum / warum nicht (vielleicht ein Schritt für Schritt, welches tar + Komprimierungsflag das tut)

0

1 Antwort auf die Frage

2
BowlesCR

Ja, durch die tardirekte Verwendung der Komprimierungsflags (z. B. tar czf) wird die Verwendung von Zwischendatenträgern verringert, da keine temporäre unkomprimierte TAR-Datei erstellt wird. Stattdessen wird das stdout von tar über Pipes direkt an stdin des Komprimierungsprogramms übergeben.

Abhängig davon, wie Pipes auf Ihrem System implementiert werden, tarscheint das Schreiben einer Datei zu sein, aber diese Datei ist tatsächlich eine FIFO-Warteschlange ohne merklichen Speicherplatzbedarf.

Ohne Flag:
Dateien> tar = Originaldateien + .tar gleicher Größe
.tar> gzip = .tgz = Originaldateien + .tar + .tgz
Die Gesamtdatenträgerverwendung vor dem Löschen des .tar beträgt 2-3x der Originaldateien, abhängig von das Verdichtungsverhältnis.

Mit dem Flag:
Files> tar> gzip = files + .tgz Im
ungünstigsten Fall werden 2x die Originaldateien verwendet.

Vielen Dank! Bedeutet dies, dass das tar-Archiv erstellt und in Bits von einigen Teer-Dateien gleichzeitig an das Komprimierungsprogramm weitergeleitet wird, die jeweils unmittelbar nach der Komprimierung gelöscht werden? Anstatt das gesamte Verzeichnis zu archivieren, komprimiert gzip eine Datei, sobald tar fertig ist und diese Datei in das Archivformat stellt. joelostblom vor 9 Jahren 0
Die tar-to-gzip-Pipeline ist ein Stream ... Sobald tar einige Bits schreibt, beginnt gzip, diese zu komprimieren, ohne zu wissen, was eine Datei ausmacht. Die `--remove-files`-Markierung bewirkt, dass tar jede Datei löscht, sobald tar mit der Bearbeitung fertig ist. BowlesCR vor 9 Jahren 1