tar – einzelne (kleine) Datei aus einem großen Tar.gz extrahieren, Speicher-/Festplattennutzung?

tar – einzelne (kleine) Datei aus einem großen Tar.gz extrahieren, Speicher-/Festplattennutzung?

Mir ist bewusst, dass Sie eine einzelne Datei aus extrahieren können tar.

tar -xf file.tar.gz /small/single/file

Ich beabsichtige, dies auf einem eingebetteten System mit begrenzter Festplatte/begrenztem RAM auszuführen. Ich möchte wissen, wie dieser Befehl mit großen Tarballs umgeht.

Führt das Extrahieren einer einzelnen Datei dazu, dass der gesamte Tarball in den Speicher dekomprimiert wird? Ich habe nichts dagegen, alles zu dekomprimieren, aber solange dies mit einem kleinen Puffer geschieht.

Nehmen wir an, ich habe 100 MB RAM und 5 MB Festplattenspeicher zur Verfügung. Außerdem /small/single/filesind es weniger als 5 MB. Außerdem ist das Quell-Tarball 500 MB groß. Kann ich es sicher extrahieren /small/single/file?

Antwort1

Die Antwort hängt wahrscheinlich von der Implementierung ab, die tarSie verwenden, aber realistisch gesehen würde ich erwarten, dass die meisten Implementierungen das Tarball mit einem relativ kleinen Puffer verarbeiten. Wenn ich GNU tarauf einem 2GiB bzip2-komprimierten Tarball verwende, um eine einzelne Datei zu extrahieren, erhalte ich

64.07user 4.84system 2:53.45elapsed 97%CPU (0avgtext+0avgdata 4664maxresident)k
4046976inputs+8outputs (0major+1194minor)pagefaults 0swaps

(unter Verwendung von GNU time). Wie Sie sehen, liegt die maximale Residentgröße unter 5 MiB.

Antwort2

Um den RAM-/Festplattenverbrauch zu minimieren, empfehle ich die Verwendung von Pipes wie diesen:

gzip -dc file.tar.gz| tar -f - /small/single/file

verwandte Informationen