Wieder räume ich meinen Desktop auf, weil mir der Festplattenspeicher ausgeht und jedes du -sh ~
Mal, wenn ich anrufe , dauert es sehr lange, die aktuelle Größe des Verzeichnisses zu berechnen.
Aus meiner Sicht kann ich keinen Grund erkennen, warum das ext4-Dateisystem die Informationen über die Verzeichnisgröße nicht zwischenspeichert und aktualisiert, wenn eine Datei erstellt / gelöscht wird. Die Informationen würden dann dem System und schließlich dem Benutzer zugänglich gemacht. Natürlich müsste es die Daten der Verzeichnisgröße über den Verzeichnisbaum verbreiten, aber ich kann mir keine Situation vorstellen, in der es auf einem normalen Linux-Desktop zu Problemen kommen würde.
Wo habe ich das falsch verstanden?
linux
filesystems
ext4
du
d33tah
quelle
quelle
TRIM
. Der Kernel kann nur SATA-Befehle an die Festplatte senden.Antworten:
Ein einfacher Cache würde nicht funktionieren. In einem Cache wird überprüft, ob Sie bereits die Antwort haben, und nur erneut verarbeitet, wenn Sie dies nicht tun. In diesem Fall würde jedoch ein einzelner fehlender Eintrag andere unbrauchbar machen. Daher müssten alle Verzeichnisgrößen ständig aktualisiert werden.
Unterschätzen Sie auch nicht die möglichen Auswirkungen Ihres Vorschlags. Als das Journaling von Dateisystemen neu war, gab es viel Widerstand, weil die Aktualisierung des Journals zu teuer war. Auch die meisten Dateisysteme erlauben Optionen wie
noatime
,nodiratime
undrelatime
dass diese Art von medatata Aktualisierung reduzieren. Beachten Sie, dass alle diese (Journale und Zeitaktualisierungen) zeitlich gebunden sind. Sie alle benötigen eine bestimmte Anzahl von Blockzugriffen (und werden normalerweise durch die erweiterte E / A-Planung „ausgeblendet“). Die Aktualisierung der Größe jedes Verzeichnisses im Pfad bedeutet jedoch, dass ein unbekannter Wert vorliegt Anzahl der Zugriffe.Schließlich gibt es in POSIX-Dateisystemen kein echtes "enthaltendes Verzeichnis". Ein Dateieintrag in einem Verzeichnis verweist auf eine Inode (die Plattenstruktur, auf der die Dateiinformationen gespeichert sind), es gibt jedoch keinen Verweis von der Inode zurück auf das Verzeichnis. Dies ermöglicht die Funktion "Feste Verbindung", bei der mehr als ein Eintrag (normalerweise in verschiedenen Verzeichnissen) auf den gleichen Inode verweist. Selbst wenn Sie eine Liste von Verzeichnissen geführt haben, die auf den Inode verweisen, multiplizieren Sie die (bereits große) Anzahl von Aktualisierungen. Schlimmer noch, jetzt müssen Sie den Überblick behalten, wenn Sie bereits jedes Verzeichnis aktualisiert haben, da Sie irgendwann in der Kette einen gemeinsamen Vorfahren erhalten, der nicht das Doppelte der aktualisierten zählen sollte. Oder sollte es? Vielleicht müssen Sie zwei Größen in jedem Verzeichnis behalten , eine, die alle "echten" Dateien zählt.
Es scheint doch nicht so nützlich zu sein.
quelle
symlink(2)
link(2)
Es gibt noch einen anderen Grund.
du
Dies wird nicht berücksichtigt, wenn sich ein Teil des Subsystems auf einem anderen Volume befindet, das in dem von Ihnen gemessenen Verzeichnis angehängt ist.Selbst wenn die Nutzung pro Volume ausgewertet
du
würde , würde es daher nicht eingesetzt. Auf der anderen Seitedf
nutzt solche Informationen ....quelle