Wo speichert ext4 Verzeichnisgrößen? Sind sie im Verzeichnis inode gespeichert?
Wenn ich du -h
es zum Beispiel ausführe , wird die Größe der Verzeichnisse sofort zurückgegeben, daher glaube ich nicht, dass es sie zu diesem Zeitpunkt berechnet.
Ich benutze ext4 unter Linux.
du
sich sofort anfühlt, liegt es daran, dass die Dateien vom Kernel zwischengespeichert werden. Sie können dies sehen, wenn Sie versuchen, es mehrmals auf einem kürzlich gemounteten Dateisystem auszuführen - nach dem ersten Ausführen ist es viel schneller.Antworten:
Die Verwendung von
strace
scheint darauf hinzudeuten, dass die Dateigrößen tatsächlich berechnet werden, indem die Dateien im Verzeichnis abgefragt werden.Beispiel
Sagen wir ich fülle ein Verzeichnis mit 3 1MB Dateien.
Wenn wir nun den
du -h
Befehl verfolgen :Betrachten Sie die resultierende
strace
Protokolldateidu.log
:Beachten Sie die
newfstatat
Systemaufrufe? Diese erhalten der Reihe nach die Größe jeder Datei.Zusätzlicher Hintergrund
Wenn Sie interessiert sind, hier ist ein bisschen mehr zu diesem Thema.
Der
stat
Befehl bietet keine Möglichkeit, etwas anderes als die Größe eines Dateisystemobjekts (Verzeichnis oder Datei) abzufragen.Beachten Sie, dass es 4096 Bytes ist. Das ist die tatsächliche Größe des Verzeichnisses selbst, nicht was es enthält.
Verweise
quelle
stat
Es gibt einfach keine Möglichkeit, mehrere Größen zurückzugeben. Daher kann nur die Größe des Verzeichnisses selbst zurückgegeben werden , nicht der Inhalt. Und auch "Verzeichnisgröße einschließlich Inhalt" wird weniger klar, wenn Sie Dateien fest verknüpft haben.