Warum ist die Größe eines leeren Verzeichnisses in Linux 4 KB? [geschlossen]

7

Ich benutze Ubuntu 14.04 und habe ein leeres Verzeichnis auf / tmp mit dem Befehl mkdir erstellt:

%Vor%

und dann habe ich die Größe mit ls überprüft:

%Vor%

und das Ergebnis zeigt, dass die Größe des Verzeichnisses 4 KB ist, obwohl es innen nichts hat!

Dann habe ich mit touch eine leere Datei erstellt:

%Vor%

und dann habe ich seine Größe überprüft:

%Vor%

Das Ergebnis zeigt, dass die leere Datei von 0B ist, was sich von dem leeren Verzeichnis unterscheidet.

Ich habe gelesen, dass Q & A sagt, dass 4KB die Metadaten des Verzeichnisses sind. Aber wenn es die Metadaten sind, welche Art von Informationen darin gespeichert sind und warum sie so riesig sind und warum eine leere Datei nicht über solche Metadaten verfügt? Wenn es nicht die Metadaten sind, was bedeutet die 4KB?

    
Roy 31.10.2014, 02:26
quelle

2 Antworten

18

Ich werde diese Frage in drei Teile unterteilen, von denen ich zwei beantworten kann ...

Teil 1: Warum ist keine leere Verzeichnisgröße 0?

Weil es . und .. enthält, ist es nicht wirklich leer.

Teil 2: Warum ist 4K das Minimum?

Weil das die Blockgröße des Dateisystems ist . Sie können es kleiner festlegen, wenn Sie das Dateisystem erstellen, aber es gibt Overhead. Das Dateisystem muss für jeden Block ein Frei-oder-in-Benutzung-Flag merken, also kleinere Blöcke = mehr Blöcke = mehr Aufwand. (In den frühen Tagen von ext2 war die Standardblockgröße 1 K. Festplatten waren klein genug, dass der Speicherplatz, der durch das Nicht-Zuweisen eines Vielfachen von 4K für jede Datei gespeichert wurde, wichtiger war als der für die freie Blockzuordnung verwendete Speicherplatz.)

Blockgrößen über 4K sind nicht möglich, da 4K die Seitengröße (die kleinste Einheit des virtuellen Speichers) auf den meisten Prozessoren ist und Linux nicht für Dateisystemblöcke konzipiert wurde, die größer sind als der Arbeitsspeicher Seiten.

Teil 3: Wenn Sie eine normale Datei ls -l haben, erhalten Sie die tatsächliche Anzahl der verwendeten Bytes, aber wenn Sie ls -ld ein Verzeichnis, erhalten Sie die Anzahl der Bytes zugewiesen. Warum?

Dieser Teil weiß ich nicht. Für reguläre Dateien gibt es eine Zuweisungsgröße, die Sie mit ls -s anzeigen können, und die zwei Größen sagen Ihnen tatsächlich verschiedene Dinge. In Verzeichnissen ist die -l size jedoch wie eine redundante Kopie der -s size. Vermutlich könnte der Kernel eine Größe melden, die angibt, wie viel vom 4K-Block tatsächlich verwendet wird, aber nicht. Ich weiß nicht warum.

    
Wumpus Q. Wumbley 31.10.2014, 02:43
quelle
2

Die Metadaten, die ein Verzeichnis enthält, sind eine Folge von Verzeichniseinträgen . Es ist bei der Erstellung nicht leer, da sofort zwei Zentralen erstellt werden: eine für dieses Verzeichnis mit dem Namen "." Und eine für ihr übergeordnetes Verzeichnis namens "..".

    
Ignacio Vazquez-Abrams 31.10.2014 02:39
quelle

Tags und Links