Gibt es eine Möglichkeit, einen Verzeichniseintrag zu verkleinern?
Meine Dovecot-Maildir-Verzeichnisse haben sich von Standard 4096 auf mehrere Megabyte vergrößert, und es gibt Probleme mit Festplattenkontingenten.
Die einzige Möglichkeit, die ich gefunden habe, besteht darin, das Verzeichnis zu löschen und neu zu erstellen. Ich hoffe, dass es irgendwo eine magische Funktion gibt - ich bin offen für alles, außer für handcodierte Assembler.
Bearbeiten: Für die Nachwelt, um Dirents> 4096 zu finden:
find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr
Antworten:
Siehe auch rm in einem Verzeichnis mit Millionen von Dateien . tangential verwandt, aber wir diskutieren es dort.
Soweit mir bekannt ist, gibt es zumindest unter ext2 / 3 keine (Online-) Möglichkeit, sie vor dem Löschen + Neuerstellen zu verkleinern. Mehrere Quellen schlagen
e2fsck -D
vor, dass sie nicht montiert sind , obwohl ich keine persönlichen Erfahrungen mit dieser Option behaupten kann.Einige Referenzen zur weiteren Lektüre:
quelle
Ich musste kürzlich ein NFS-Verzeichnis löschen und neu erstellen, um seine Größe zu verringern, nachdem es zuvor aufgebläht war. Dabei habe ich einen ziemlich effizienten Weg gefunden, dies mit rsync und harten Links zu tun. Diese Methode vermeidet das Kopieren der eigentlichen Dateien und erreicht gleichzeitig das Ziel, das Verzeichnis mit demselben Inhalt neu zu erstellen.
Da wir während unseres Wartungsfensters Ausfallzeiten benötigen, um diesen Vorgang auszuführen, war es für uns wichtig, das neu erstellte Verzeichnis so schnell wie möglich verfügbar zu machen. Wenn Ihnen die Einfachheit wichtiger ist, ändern Sie den ersten Verschiebungsbefehl in einen 'rm -rf' im Quellverzeichnis und überspringen Sie den anderen 'rm -rf'-Befehl.
Ich habe diese Befehle aus einem größeren Prozess extrahiert und die Verzeichnisnamen abstrahiert. Ich entschuldige mich, wenn ich bei dieser Übersetzung einen Fehler gemacht habe.
Dann entfernen wir später das Verzeichnis. Je nach Größe müssen Sie möglicherweise eine ausgefeiltere Technik verwenden, um dies zu tun. Beispielsweise kann die Verwendung von rsync mit dem Flag --delete zum Synchronisieren eines leeren Verzeichnisses mit diesem Verzeichnis effizienter sein.
quelle
Ich würde es so machen.
cp -al
oldirnewdir
&& mv
olddirtempname
&& mv
newdirolddir
&& rm -r
tempnameDabei ist olddir das Verzeichnis, in dem Sie verkleinern möchten. newdir und tempname sind temporäre Dateinamen
cp -al
Erstellt Links zum Inhalt von olddir in newdir und die nächsten drei Befehle tauschen sie mit newdir aus und bereinigen.quelle