Riesige Docker-Datei und "tar" -Verhalten

524
Milleu

Als ich eine Sicherung auf meinem Linux-System mit durchführte tar -czv, fiel mir auf, dass der Prozess sehr lange /var/lib/docker/devicemapper/devicemapper/datadauert (viel länger als eine Kopie aller meiner Images und Container dauern sollte), während die Ergebnisdatei nicht anwächst.

Durch Überprüfen dieser Dateigröße wird ls -lheine 100GGröße auf einer 20GPartition angezeigt. Was ist das für eine Datei und was tarmacht sie hier?

3

1 Antwort auf die Frage

2
Kamil Maciorowski

Es sieht so aus, als hätten Sie dort eine spärliche Datei .

Eine dünn besetzte Datei ist eine Art Computerdatei, die versucht, den Dateisystemspeicher effizienter zu nutzen, wenn die Datei selbst meistens leer ist. Dies wird erreicht, indem kurze Informationen (Metadaten), die die leeren Blöcke repräsentieren, auf den Datenträger geschrieben werden, anstatt den eigentlichen "leeren" Speicherplatz, aus dem der Block besteht, wobei weniger Festplattenspeicher benötigt wird. Die volle Blockgröße wird nur dann als tatsächliche Größe auf die Festplatte geschrieben, wenn der Block "echte" (nicht leere) Daten enthält.

Es ist diese Antwort, die besagt:

Das /var/lib/docker/devicemapper/devicemapperVerzeichnis enthält die Sparse-Loop-Dateien, die alle anderen Daten enthalten, die mit dem Andockgerät verbunden werden.

Ihre Datei besteht meistens aus leeren Blöcken (alle Nullen) und kann als spärliche Datei in Ihre kleine Partition passen. tarLiest scheinbar einfach alle Nullen und verarbeitet sie. Sie werden sehr gut komprimiert, sodass die Ergebnisdatei nur wenig wächst, wenn der Nullstromstrom endet.

Es gibt eine Befehlszeilenoption, mit tarder es auf Dateien mit geringer Dichte aufmerksam macht. Es wird hier beschrieben .

-S
--sparse

In Ihrem Fall ist Folgendes sehr wichtig, denke ich:

Beim Extrahieren (…) haben solche Dateien auch Löcher, wo immer sie gefunden wurden. (…) Erwägen Sie die Verwendung --sparsebei Dateisystemsicherungen, um zu vermeiden, dass die erweiterten Formulare der Dateien gespeichert werden, die sparsam im System gespeichert sind.

Ich denke, Sie haben die --sparseOption nicht verwendet, also wird Ihre 100GDatei beim Extrahieren als nicht-dünn erstellt und passt nicht in die 20GPartition.