Dateien mit rsync schneller löschen

2. Juni 2013 at 19:38

terminal2Das Linux Tool ‚rsync‘ ist vielen Admins bekannt. Man kann damit Dateien lokal oder über eine SSH-Verbindung schnell und einfach abgleichen. Daher wird Rsync gerne für Backups oder Testumgebungen genutzt.

Einen sehr kreativen Einsatz von Rsync habe ich kürzlich kennen gelernt: Rsync kann große Mengen von Dateien schnell löschen. Überraschenderweise sogar schneller, als das rm-Kommando.

Hier der Versuch:

Im ersten Schritt erstellen wir ein Testverzeichnis und legen dort 100.000 Dateien an. Dann löschen wir die Dateien mit rm auf die übliche Art und Weise wieder und messen dabei die Zeit:

# Testverzechnis anlegen
mkdir /tmp/test-speed-rm

# 100.000 Dateien anlegen
for NUM in $(seq 1 100000); do touch /tmp/test-speed-rm/testfile-$NUM; done

# Dateisystem-Caches leeren
sync

# Alle Dateien mit 'rm' löschen und Ausführungsdauer ausgeben
time rm /tmp/test-speed-rm/*

Das Ergebnis auf meinem System:

real 0m10.382s
user 0m10.235s
sys 0m0.136s

Nun wiederholen wir den Test, doch diesmal legen wir zusätzlich ein leeres Verzeichnis an und benutzen dann rsync, um das leere Verzeichnis in das volle Verzeichnis synchronisieren zu lassen. Rsync wird feststellen, dass im Zielverzeichnis viele Dateien sind, die im Quellverzeichnis nicht vorhanden sind, und diese dann löschen:

# Altes Testverzeichnis komplett löschen (gleiche Ausgangssituation für beide Tests!)
rm -rf /tmp/test-speed-rm

# Testverzechnis anlegen
mkdir /tmp/test-speed-rm

# 100.000 Dateien anlegen
for NUM in $(seq 1 100000); do touch /tmp/test-speed-rm/testfile-$NUM; done

# Dateisystem-Caches leeren
sync

# Leeres Verzeichnis anlegen
mkdir /tmp/empty

# Mit RSYNC das leere Verzeichnis in das zu löschende Verzeichnis synchronisieren
time rsync -a --delete /tmp/empty/ /tmp/test-speed-rm/

Überraschenderweise löscht Rsync viel schneller:

real 0m4.398s
user 0m0.468s
sys 0m3.854s

Wirklich interessant, während rm inode für inode löscht und dabei knapp 10 Sekunden benötigt, schafft rsync die gleiche Arbeit in einem Rutsch in nur etwas über 4 Sekunden.

Übrigens: Auch ‚find -delete‘ oder ‚find | xargs rm‘ funktionieren nicht schneller. Bei größeren Dateimengen scheint rsync wirklich das schnellste Tool zu sein.