Was bestimmt eine Verzeichnisgröße?


10

Ich weiß, dass die Größe eines Verzeichnisses selbst etwas anderes ist als die Größe der darin enthaltenen Dateien.

Ich stelle mir ein Verzeichnis als eine Liste der Verzeichnisse und Dateien vor, daher sollte die Größe eines Verzeichnisses mit der Anzahl der darin enthaltenen Dateien / Verzeichnisse in Beziehung stehen, mit einem Minimum von 4096 Bytes aufgrund der Einschränkung der Blockgröße.

Aber in meinem System habe ich viele gut bestückte Verzeichnisse mit 4096 Bytes und einige Verzeichnisse, die wesentlich weniger gefüllt sind und etwa 10 Megabyte groß sind. Können Sie mir bitte erklären, warum dies passiert?


1
Für die weitere Lektüre ist dies sehr informativ: askubuntu.com/a/404716/380067
kos

3
Es geht nicht nur um die Anzahl der Einträge im Verzeichnis, sondern auch um die Länge ihrer Namen.
Kasperd

Antworten:


13

Das verwendete Dateisystem und die maximale Anzahl von Entitäten in diesem Verzeichnis zu einem bestimmten Zeitpunkt bestimmen die Größe. Sobald die für das Verzeichnis reservierte Standardgröße erschöpft ist, wird mehr Speicherplatz für das Verzeichnis zugewiesen. Wenn jedoch die Anzahl der Entitäten abnimmt, wird der zugewiesene Speicherplatz nicht automatisch freigegeben. Wenn ein Verzeichnis also zu einem bestimmten Zeitpunkt 10 Millionen Entitäten hat, bleibt es gleich groß, wenn 9.999.999 davon gelöscht würden. Dies führt zu interessanten Situationen wie in diesem Unix- und Linux-Beitrag .

$ mkdir foo; touch foo/{1..100000}; stat -c %s foo
2179072
$ rm foo/*; stat -c %s foo
2179072

Dies gilt nicht unbedingt für andere Dateisysteme. Die ext{2,3,4}Dateisysteme sind betroffen. NTFS ist in geringerem Maße. tmpfsund btrfs nicht. ZFS ist eher konservativ, ich habe eine Ausgabe 2für den zweiten statBefehl erhalten.

Verbunden:


Groß! Ich fragte mich immer noch, wie das sein könnte.
Kos

XFS ist nicht betroffen! sollte hinzufügen
Edward Torvalds
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.