Verzeichnis mit 980 MB Metadaten, Millionen von Dateien, wie lösche ich es? (ext3)

Verzeichnis mit 980 MB Metadaten, Millionen von Dateien, wie lösche ich es? (ext3)

Mögliches Duplikat:
rm auf einem Verzeichnis mit Millionen von Dateien

Hallo,

Ich stecke also in diesem Verzeichnis fest:

drwxrwxrwx 2 dan users 980M 2010-12-22 18:38 sessions2

Der Inhalt des Verzeichnisses ist klein – nur Millionen winziger kleiner Dateien.

Ich möchte es aus dem Dateisystem löschen, aber es gelingt mir nicht. Mein erster Versuch war:

find sessions2 -type f -delete

Und

find sessions2 -type f -print0 | xargs -0 rm -f

musste aber gestoppt werden, da beides zu einem enormen Speicherverbrauch führte. An einem Punkt waren 65 % des Systemspeichers belegt.

Ich dachte also (zweifellos fälschlicherweise), dass es damit zu tun hatte, dass dir_index auf dem System aktiviert war. Vielleicht versuchte find, den gesamten Index in den Speicher zu lesen?

Also habe ich (dummerweise) Folgendes gemacht:tune2fs -O^dir_index /dev/xxx

Okay, das sollte es also sein. Habe den findobigen Befehl noch einmal ausgeführt und ... dasselbe. Verrückter Speicherverbrauch.

Ich bin schnell losgerannt, tune2fs -Odir_index /dev/xxxum dir_index wieder zu aktivieren, und bin auf „Server Fault“ gestoßen!

2 Fragen:

1) Wie werde ich dieses Verzeichnis auf meinem Live-System los? Es ist mir egal, wie lange es dauert, solange es wenig Speicher und wenig CPU verbraucht. Übrigens nice find ...konnte ich durch die Verwendung die CPU-Auslastung reduzieren, sodass mein Problem im Moment nur die Speichernutzung ist.

2) Ich habe dir_index für etwa 20 Minuten deaktiviert. Zweifellos wurden in der Zwischenzeit neue Dateien in das Dateisystem geschrieben. Ich habe dir_index wieder aktiviert. Bedeutet das, dass das System die Dateien, die vor der Wiederaktivierung von dir_index geschrieben wurden, nicht finden wird, da ihre Dateinamen in den alten Indizes fehlen werden? Wenn ja und ich weiß, dass diese neuen Dateien nicht wichtig sind, kann ich dann die alten Indizes beibehalten? Wenn nicht, wie erstelle ich die Indizes neu? Kann dies auf einem Live-System durchgeführt werden?

Danke!

Antwort1

Siehe diese Frage:rm auf einem Verzeichnis mit Millionen von Dateien

Dies war meine Antwort, aber es gab auch andere tolle Antworten:

Wäre es möglich, alle anderen Dateien dieses Dateisystems an einem temporären Speicherort zu sichern, die Partition neu zu formatieren und dann die Dateien wiederherzustellen?

Antwort2

Ich würde dazu neigen, das aktuelle Verzeichnis aus dem Weg zu räumen, ein neues Verzeichnis zu erstellen und dann das alte zu entfernen:

mv dirname dirname.old; mkdir dirname ls -ld dirname dirname.old # Überprüfen Sie, ob die Berechtigungen korrekt sind rm -rf dirname.old

Dies hat den zusätzlichen Vorteil, dass in Ihrem Verlauf kein „rm -rf dirname“ landet, das Sie möglicherweise versehentlich erneut ausführen. :-)

„rm -rf“ sollte das Verzeichnis mit nur sehr geringem Speicheraufwand entfernen. Aber auch die zuvor ausgeführten „find“-Befehle sollten nicht viel Speicheraufwand verbrauchen. Wie messen Sie den Speicherverbrauch?

Sie messen diesen Speicherverbrauch nicht, indem Sie sich die Spalte „frei“ der Ausgabe des Befehls „free“ ansehen, oder? Weil Linux ungenutzten Speicher für das Festplatten-Caching verwendet und die oberste Spalte unter „frei“ dies nicht berücksichtigt. Sehen Sie den Speicherverbrauch in einem der Programme? In welchem? „ps awwlx --sort=vsz“ zeigt Ihnen die Programme mit großem Speicherverbrauch, sortiert mit den großen am Ende …

Antwort3

Ihr Problem ist, dass Sie es an xargs weiterleiten. Das verbraucht wahrscheinlich Ihren gesamten Speicher. Find hat eine Löschoption.

find sessions2 -type f -delete

Antwort4

Hmm, eine verrückte Idee, ich weiß nicht, ob das funktionieren würde. Was wäre, wenn Sie versuchen, es stapelweise zu tun? Benennen Sie zuerst das Verzeichnis um und erstellen Sie ein neues, leeres Verzeichnis, damit neue Dateien nicht im Weg sind. Geben Sie dann den Inhalt des Verzeichnisses in eine Textdatei aus. Gehen Sie dann diese Datei durch und entfernen Sie 100 Dateien auf einmal, schlafen Sie zwischendurch und synchronisieren Sie?

verwandte Informationen