Das 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.