
Ich habe dies auf meiner CentOS 7.3-Instanz ausgeführt.
[user01@ ~]$ rm -rf my-very-own-directory/
[user01@ ~]$ mkdir my-very-own-directory/
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 6 Blocks: 0 IO Block: 4096 directory
[user01@ ~]$ mkdir my-very-own-directory/00
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 16 Blocks: 0 IO Block: 4096 directory
[user01@ ~]$ date > my-very-own-directory/date.txt
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 32 Blocks: 0 IO Block: 4096 directory
[user01@ ~]$ echo "content" > my-very-own-directory/content
[user01@ ~]$ stat my-very-own-directory/ | grep "Size"
Size: 47 Blocks: 0 IO Block: 4096 directory
- Ersterstellung => Größe = 6
- Fügen Sie einen Eintrag mit 2 Bytes Namenslänge hinzu => Größe ist 16 (6 + 8 + 2)
- Fügen Sie einen weiteren Eintrag mit 4 Bytes Namenslänge hinzu => Größe ist 32 (16 + 8 + 8)
- Fügen Sie einen weiteren Eintrag mit 7 Bytes Namenslänge hinzu => Größe ist 47 (32 + 8 + 7)
2 Fragen:
- Ein erstelltes Verzeichnis hat eine Größe von 6. Warum?
- Jeder neue Eintrag im Verzeichnis, sei es eine Datei oder ein Unterverzeichnis, vergrößert die Größe von „mein-ganz-eigenes-Verzeichnis“. Die Frage ist, die Größe erhöht sich um 8 + (Länge des Dateinamens / Verzeichnisnamens). Warum 8?
Antwort1
Das Verzeichnisformat hängt vollständig vom Dateisystem ab.
Ein Verzeichniseintrag muss mindestens den Dateinamen und eine Inode-Nummer enthalten.
Um dieLinux- ext4
Dateisystem(und ältere Versionen) beispielsweise hatte der ursprüngliche Verzeichniseintrag die Inode-Nummer (4 Bytes), die Dateinamenlänge (2 Bytes) und die Gesamtlänge des Eintrags (2 Bytes) sowie den Dateinamen selbst. (Wenn ich mich richtig erinnere, wird die Gesamtlänge explizit angegeben, um Auffüllungen und dergleichen zu ermöglichen.)
Aktuelle Versionen (ab ext3
) unterstützen auch eine baumartige Speicherung, die schnellere Suchvorgänge in Verzeichnissen mit einer großen Anzahl von Dateien ermöglicht, aber natürlich ein komplizierteres Format hat.
Allerdings ext4
wird auf die Größe eines Verzeichnisses nur als Vielfaches der Blockgröße angezeigt, d. h. ein leeres Verzeichnis hat eine Größe 4096
und diese vergrößert sich nicht, bis genügend Dateien erstellt werden, um die Zuweisung eines neuen Datenblocks dafür zu erfordern.
RHEL 7 verwendet XFS als Standarddateisystem. Dies ist möglicherweise das Dateisystem, das Sie verwenden.XFS hat eine Reihe von Verzeichnisformaten, und die für kleine Verzeichnisse verwendete Kurzform hat im Wesentlichen denselben Mindestsatz aus Inode-Nummer + Dateiname + Dateinamenlänge + Gesamtlänge.