Wir verwenden rsnapshot für Backups. Es speichert viele Schnappschüsse der gesicherten Datei, löscht jedoch alte. Das ist gut. Es dauert jedoch ungefähr 7 Stunden, um rm -rf
einen massiven Verzeichnisbaum zu erstellen. Das Dateisystem ist XFS. Ich bin mir nicht sicher, wie viele Dateien es gibt, aber wahrscheinlich sind es Millionen.
Gibt es überhaupt etwas zu beschleunigen? Gibt es einen Befehl, der genauso rm -rf
funktioniert und nicht stundenlang dauert?
find . -delete -name directory
und es ist viel schneller alsrm -rf
.Antworten:
Nein.
rm -rf
Führt eine rekursive Tiefendurchquerung Ihres Dateisystems durch und ruft dabeiunlink()
jede Datei auf. Die zwei Operationen, die den Prozess langsam laufen lassen, sindopendir()
/readdir()
undunlink()
.opendir()
undreaddir()
sind abhängig von der Anzahl der Dateien im Verzeichnis.unlink()
ist abhängig von der Größe der zu löschenden Datei. Die einzige Möglichkeit, dies zu beschleunigen, besteht darin, entweder die Größe und Anzahl der Dateien zu verringern (was meines Erachtens nicht wahrscheinlich ist) oder das Dateisystem durch ein Dateisystem mit besseren Eigenschaften für diese Vorgänge zu ersetzen. Ich glaube, dass XFS gut für unlink () in großen Dateien ist, aber nicht so gut für große Verzeichnisstrukturen. Möglicherweise ist ext3 + dirindex oder reiserfs schneller. Ich bin nicht sicher, wie gut JFS abschneidet, aber ich bin mir sicher, dass es viele Benchmarks für die Leistung verschiedener Dateisysteme gibt.Bearbeiten: Es scheint, dass XFS beim Löschen von Bäumen furchtbar ist , ändern Sie also definitiv Ihr Dateisystem.
quelle
unlink
nichts zum eigentlichen Inhalt, aber um einenunlink
Systemaufruf durchzuführen , muss der Dateisystemcode trotzdem mehr Arbeit leisten, wenn der entfernte Link der letzte zu der Datei ist und wenn er aktuell nicht geöffnet ist. Dies hängt natürlich vom Dateisystem ab, aber es kann dann einen sehr erkennbaren Unterschied geben, wenn die entfernte Datei sehr groß ist.Verschieben Sie alternativ das Verzeichnis zur Seite, erstellen Sie es mit demselben Namen, denselben Berechtigungen und demselben Besitz neu und starten Sie alle Apps / Dienste neu, die sich mit diesem Verzeichnis befassen.
Sie können dann das ursprüngliche Verzeichnis im Hintergrund "nice rm", ohne sich über einen längeren Ausfall Gedanken machen zu müssen.
quelle
Stellen Sie sicher, dass Sie die richtigen Mount-Optionen für XFS festgelegt haben.
Wenn Sie -ologbufs = 8 verwenden, verdreifacht logbsize = 256k mit XFS wahrscheinlich Ihre Löschleistung.
quelle
Wenn Sie die rm effektiv auf Dateiebene ausführen, dauert es lange. Deshalb sind blockbasierte Schnappschüsse so gut :).
Sie könnten versuchen, das rm in separate Bereiche aufzuteilen und es parallel auszuführen, aber ich erwarte möglicherweise keine Verbesserung. Es ist bekannt, dass XFS Probleme beim Löschen von Dateien hat. Wenn dies ein großer Teil Ihrer Arbeit ist, ist möglicherweise ein anderes Dateisystem eine gute Idee.
quelle
Es ist gut, ionice für solche IO-intensiven Operationen zu verwenden, unabhängig vom verwendeten Dateisystem.
Ich schlage diesen Befehl vor:
Für Hintergrundoperationen auf Servern mit hoher E / A-Belastung ist dies eine gute Option.
quelle
Ich weiß, das ist alt, aber ich dachte, ich werfe einen Vorschlag ein. Sie löschen diese Dateien nacheinander, und die Ausführung paralleler rm-Vorgänge kann zu einer Beschleunigung führen.
http://savannah.nongnu.org/projects/parallel/ parallel kann häufig anstelle von xargs verwendet werden
Also, wenn Sie alle Dateien in Deltedir löschen
Dann hätten Sie nur leere Verzeichnisstrukturen zum Löschen.
Hinweis: Sie werden wahrscheinlich immer noch die oben genannten Einschränkungen des Dateisystems treffen.
quelle
Wäre es hier eine alternative Möglichkeit, die Daten so zu trennen, dass Sie das eigentliche Dateisystem verschrotten und neu erstellen können, anstatt das rm auszuführen?
quelle
Wie wäre es, wenn Sie die Feinheit des Befehls verringern? Mögen:
quelle