%20Datei%20aus%20einem%20gro%C3%9Fen%20Tar.gz%20extrahieren%2C%20Speicher-%2FFestplattennutzung%3F.png)
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/file
sind 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 tar
Sie verwenden, aber realistisch gesehen würde ich erwarten, dass die meisten Implementierungen das Tarball mit einem relativ kleinen Puffer verarbeiten. Wenn ich GNU tar
auf 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