Auf einem Server habe ich ein Verzeichnis /opt/kafka/data/topics
.
$ du -hs /opt/kafka/data/topics
52M /opt/kafka/data/topics
Wenn ich dieses Verzeichnis wie tar
$ tar czfv /tmp/topics.tar.gz /opt/kafka/data/topics
Ich bekomme eine Dateigröße, die Sinn macht
$ ls -alh /tmp/topics.tar.gz
-rw-r--r-- 1 user user 11M Jan 12 15:15 kafka
Wenn ich jedoch topics.tar.gz
auf meinen lokalen OS X-Computer herunterlade und ihn extrahiere, belegt er 10 GB!
Bei /opt/kafka/data/topics
genauerer Betrachtung der Inhalte auf dem Server ist mir aufgefallen, dass dementsprechend ls
viele 10MB-Dateien enthalten sind:
$ find /opt/kafka/data -type f -exec ls -alh {} \;
... [output]
-rw-r--r-- 1 user user 10M Jan 12 02:45 /opt/kafka/data/topics/user-entities-KTABLE-REDUCE-STATE-STORE-0000000178-changelog-1/00000000000000000000.index
-rw-r--r-- 1 user user 10M Jan 12 02:45 /opt/kafka/data/topics/user-entities-KSTREAM-KEY-SELECT-0000000123-repartition-2/00000000000000000012.index
... [and many more]
du
meldet, dass jede dieser 10 MB-Dateien 0 Byte groß ist:
$ du -h /opt/kafka/data/topics/user-entities-KTABLE-REDUCE-STATE-STORE-0000000178-changelog-1/00000000000000000000.index
0 /opt/kafka/data/topics/user-entities-KTABLE-REDUCE-STATE-STORE-0000000178-changelog-1/00000000000000000000.index
Also, was ist los? Offensichtlich fehlt mir hier etwas:
du
meldet insgesamt 52 Millionen. Dies ist sinnvoll, da das/opt/kafka/data
gemountete Gerät nur 5 GB hat,df
nur 2% voll ist und alles noch funktioniert.tar
gzipst den Inhalt auf 10M. Das macht auch Sinn.ls
meldet, dass sich viele der Dateien auf 10 MB Festplatte befinden, und wenn ich das Archiv extrahiere, erhalte ich 10 GB.du
meldet, dass jede dieser Dateien 0 Byte groß ist.mount
meldet das/dev/sdc on /opt/kafka/data type ext4 (rw,relatime,data=ordered)
Nichts passt zusammen. Gibt es eine Art transparente Komprimierung auf der Festplatte, die mir nicht bekannt ist?
ls
) sind spärlich. Sie werden von als 0 Bytes gemeldet du
und sind in der Tat leer
tar --sparse
Option beim Erstellen des Archivs? Hilft es? Link .
ls
10 MB gemeldet, aber du
0 Byte?
man tar
unter OS X eine Option -S
zum Extrahieren enthält: (x mode only) Extract files as sparse files. For every block on disk, check first if it contains only NULL bytes and seek over it otherwise. This works similiar to the conv=sparse option of dd.
Dies kann hilfreich sein.