Frage

Ich habe ein Verzeichnis Ich bin Archivierung:

$ du -sh oldcode
1400848
$ tar cf oldcode.tar oldcode

So ist das Verzeichnis 1.4GB. Die Datei ist wesentlich kleiner, aber:

$ ls -l oldcode.tar
-rw-r--r-- 1 ieure ieure 940339200 2002-01-30 10:33 oldcode.tar

Nur 897mb. Es ist nicht in irgendeiner Weise komprimiert:

$ file oldcode.tar
oldcode.tar: POSIX tar archive

Warum ist Datei der Teer kleiner, als es Inhalt ist?

War es hilfreich?

Lösung

Sie erhalten einen Unterschied wegen der Art, wie das Dateisystem funktioniert.

Auf den Punkt gebracht Ihre Festplatte ist aus Clustern. Jeder Cluster hat eine feste Größe von - sagen wir mal - 4 Kilobyte. Wenn Sie eine 1 kb-Datei in einem solchen Cluster 3kb gespeichert werden ungenutzt. Die genauen Details variieren mit der Art von Datei-System, das Sie verwenden, aber die meisten Dateisysteme funktionieren auf diese Weise.

3 kb verschwendeten Speicherplatz ist nicht viel für eine einzelne Datei, aber wenn man viele sehr kleine Dateien haben die Abfälle ein erheblicher Teil der Festplattennutzung werden kann.

Innerhalb der tar-Archiv die Dateien nicht in Clustern gespeichert, sondern nacheinander. Das ist, wo der Unterschied kommt.

Andere Tipps

Da sie keine Kenntnis von dem, was Teer Sie verwenden oder welche Art von Unix-System Sie verwenden, hier ist meine Vermutung: OLDCODE enthält zahlreiche kleinere Dateien, die, wenn sie von ihnen selbst Speicherplatz ineffizient verwenden, da Speicherplatz durch einige zugeordnet ist Art Block, anstatt Byte für Byte. In der TAR-Datei, sind sie verketteten und die maximale Nutzung des Speicherplatzes machen sie zugeordnet sind.

Das hat etwas mit der Blockgröße des Dateisystems zu tun. Mann 1 du auf MacOSX 10.5.6 heißt es:

  

Das ich Dienstprogramm zeigt das Dateisystem Blocknutzung für jede Datei Argument und für jedes Verzeichnis in der Hierarchie-Datei in jedem Verzeichnis Argumente verwurzelt. Wenn keine Datei angegeben wird, wird die Sperrung der Nutzung der Hierarchie im aktuellen Verzeichnis verwurzelt angezeigt.

[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x   2 mirko  wheel   68 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
[mirko@borg foo]$ du -sh
0B  .
[mirko@borg foo]$ touch foo
[mirko@borg foo]$ ls -la
total 0
drwxr-xr-x   3 mirko  wheel  102 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
-rw-r--r--   1 mirko  wheel    0 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
0B  .
[mirko@borg foo]$ echo 1 > foo
[mirko@borg foo]$ ls -la
total 8
drwxr-xr-x   3 mirko  wheel  102 Jan 30 21:20 .
drwxrwxrwt  10 root   wheel  340 Jan 30 21:16 ..
-rw-r--r--   1 mirko  wheel    2 Jan 30 21:20 foo
[mirko@borg foo]$ du -sh
4.0K    .

Wie Sie auch eine Datei von 2 Bytes sehen einen ganzen Block von 4kb nimmt. Es gibt einige Dateisysteme, die diese Platzverschwendung vermeiden, indem Sie Teilblockzuordnung .

Es gibt 2 Möglichkeiten.

Kleine Dateien

Wahrscheinlich es nicht kleiner als sein Inhalt. Als Nils Pipenbrinck schrieb , du zeigt die Menge an Speicherplatz das Dateisystem zuordnet, die da Dateien im Dateisystem Blöcke gespeichert werden, ist mehr als die logische Größe der Datei.

Um die logische Größe der Datei, die Verwendung du --apparent-size anzuzeigen. In diesem Fall sollte das Ergebnis kleiner als die TAR-Datei.

Sparse-Dateien

Tar-Dateien können Sparse-Dateien speichern. Wenn die Tarball wurde mit erstellt --sparse , die Löcher in der sparse-Dateien aufgezeichnet werden, so könnte der Tarball kleiner sein als die logische Größe der Dateien.

Wenn die Kargheit Informationen in Ihrer extrahierten Kopie irgendwie verloren wurden (zB wenn Sie den Tarball auf ein Dateisystem extrahieren, die nicht Sparse-Dateien nicht unterstützt, oder wenn es mit Reißverschluss und dann entpackt, etc.), dann wird df der Bericht erweiterte Größe.

du zählt Plattenblocks, nicht Größe duder Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top