Antworten:
Dies ist die Größe des Speicherplatzes auf der Festplatte, auf der die Metainformationen für das Verzeichnis gespeichert werden (dh die Tabelle der Dateien, die zu diesem Verzeichnis gehören). Wenn es sich also um 1024 handelt, bedeutet dies, dass 1024 Bytes auf der Festplatte für diesen Zweck verwendet werden (es werden immer vollständige Blöcke zugewiesen).
Die "Größe eines Verzeichnisses", mit der gedruckt wird, ls -l
ist (wie bei jedem Dateityp) der Wert, der vom stat()
Aufruf in gemeldet wird statbuf.st_size
.
Was dies st_size
für Verzeichnisse bedeutet, hängt vollständig vom Dateisystemtyp ab. Wenn Sie den Dateisystemtyp nicht kennen und dessen Konzepte nicht verstehen, können Sie aus dem Wert in nichts ableiten st_size
.
In dem historischen UNIX-Dateisystem, das derzeit üblicherweise benannt wird v7-fs
, wurden Verzeichnisse mit 16-Byte-Einträgen wiederholt, die eine 16-Bit-Inode-Nummer und 14-Byte-Dateinamen enthielten. Die "Größe" eines Verzeichnisses war in Bezug auf die read(2)
Operation bedeutsam und wuchs oder blieb immer so, wie sie ist. Die .
und ..
-Einträge werden erstellt, indem sie manuell mit dem aktuellen und dem darüber liegenden Verzeichnis verknüpft werden. Die Anzahl der Links für ein vernünftig leeres Erstverzeichnis beträgt 2.
In dem BSD-4.2-Dateisystem, das seit 1989 (SVr4) aufgerufen wird ufs
, sind Verzeichnisse eine Reihe von Datensätzen variabler Länge, die ein Format verwenden, das nicht als stabil eingestuft wird, sodass Benutzerbereichsbefehle dieses Format nicht lesen dürfen. Die angegebene "Größe" ist die Größe in Bytes wie in v7-fs, die Größe wächst normalerweise oder bleibt unverändert, aber neuere Versionen des Dateisystems können die Größe unter bestimmten Umständen verringern - aber nicht immer, wenn Sie dies erwarten. Die für ein leeres Verzeichnis gemeldete Linkanzahl beträgt 2 wie bei v7-fs
.
In WOFS
dem Dateisystem, das ich zwischen Sommer 1988 und Mai 1991 entworfen und implementiert habe, geben Verzeichnisse immer die "Größe" 0 an und haben niemals einen Inhaltstyp, der mit dem read(2)
Aufruf gelesen werden kann . Dies liegt daran, dass WOFS
es sich um das erste Copy-on-Write-Dateisystem handelt und dass in WOFS
Dateien das Verzeichnis angegeben wird, in dem sie sich befinden, anstatt im Verzeichnis aufgeführt zu werden. Wenn Sie ein WOFS
Verzeichnis mit lesen readdir()
, erhalten Sie nur Daten für die vorgesehenen Einträge, jedoch niemals für .
und ..
. Die Linkanzahl eines leeren Verzeichnisses in WOFS
ist 1 und das gesamte Verhalten ist vollständig POSIX-kompatibel.
In ZFS
, das wurde nach dem Lesen der WOFS
Papiere umgesetzt. ZFS
ist ein Copy-on-Write-Dateisystem und seine Autoren bestreiten nicht, dass sie Konzepte kopiert haben WOFS
. Verzeichnisse auf ZFS berichten über den number of directory entries
in st_size
, so dass die gemeldeten „Größe“ hat keine wirkliche Bedeutung in Bezug auf den besetzten Speicherplatz aus den Verzeichnisdaten. In einem ZFS-Verzeichnis gibt es keine .
und ..
-Einträge. Wenn Sie jedoch aufrufen readdir()
, werden diese Einträge gefälscht und für die ersten beiden Vorgänge zurückgegeben. ZFS ist der einzige FS in der Liste, der Verzeichnisse mit fester Verknüpfung nicht unterstützt, aber die gemeldete Verknüpfungsanzahl für Verzeichnisse ist immer 2. Diese beiden Unregelmäßigkeiten in ZFS werden implementiert, um die Verwirrung in historischen Nicht-POSIX-Programmen zu verringern.
Ähnlich wie ZFS kopiert WAFL einige, aber nicht alle Ideen von WOFS
. Netapps WAFL
wurde 3 Jahre nach WOFS
Veröffentlichung des Papiers geschrieben, WAFL ist Copy-on-Write, aber WAFL scheint "Größen" -Werte zu melden, die unter der Annahme, dass das Verzeichnis Inhalt hat, die "echte Verzeichnisgröße" sein können.
Ein Verzeichnis reserviert mindestens 4096 Bytes für Metadaten über sich und seinen Inhalt.
Außerdem sind 4096 Bytes die Standardzuordnungseinheit (Block) für das Dateisystem ext2 / ext3 / ext4 und daher kann ein Verzeichnis nicht kleiner sein.
Auf verschiedenen Dateisystemen finden Sie möglicherweise Verzeichnisse mit unterschiedlichen Standardgrößen, die auf die Standardblockgröße des Dateisystems zurückzuführen sind.
Die Größe von Verzeichnissen kann auch dynamisch ansteigen, wenn sie gefüllt werden. Sobald der für Metadaten reservierte Speicherplatz gefüllt ist, kann er nicht mehr neu zugewiesen werden, ohne das Verzeichnis zu entfernen.
Ein Verzeichnis ist wie ein Telefonbuch nur ein Verzeichnis. Es ist nur eine Datei mit einer Liste von Zahlen und einem Namen daneben. Jede Nummer verweist auf eine Datei im Dateisystem (eine Inode-Nummer) und der Name ist der Dateiname.
Sie benötigen Speicherplatz, um diese Daten zu speichern. Wie diese zugeordnet und vergrößert und verkleinert werden, hängt vom Dateisystem ab.