{"id":953,"date":"2013-06-02T19:38:06","date_gmt":"2013-06-02T18:38:06","guid":{"rendered":"http:\/\/www.butschek.de\/?p=953"},"modified":"2013-06-02T19:38:06","modified_gmt":"2013-06-02T18:38:06","slug":"mit-rsync-loschen","status":"publish","type":"post","link":"https:\/\/www.butschek.de\/2013\/06\/02\/mit-rsync-loschen\/","title":{"rendered":"Dateien mit rsync schneller l\u00f6schen"},"content":{"rendered":"

\"terminal2\"Das Linux Tool ‚rsync‘ ist vielen Admins bekannt. Man kann damit Dateien lokal oder \u00fcber eine SSH-Verbindung schnell und einfach abgleichen. Daher wird Rsync gerne f\u00fcr Backups oder Testumgebungen genutzt.<\/p>\n

Einen sehr kreativen Einsatz von Rsync habe ich k\u00fcrzlich kennen gelernt: Rsync kann gro\u00dfe Mengen von Dateien schnell l\u00f6schen. \u00dcberraschenderweise sogar schneller, als das rm-Kommando.<\/p>\n

Hier der Versuch:<\/p>\n

Im ersten Schritt erstellen wir ein Testverzeichnis und legen dort 100.000 Dateien an. Dann l\u00f6schen wir die Dateien mit rm auf die \u00fcbliche Art und Weise wieder und messen dabei die Zeit:<\/p>\n

# Testverzechnis anlegen\r\nmkdir \/tmp\/test-speed-rm\r\n\r\n# 100.000 Dateien anlegen\r\nfor NUM in $(seq 1 100000); do touch \/tmp\/test-speed-rm\/testfile-$NUM; done\r\n\r\n# Dateisystem-Caches leeren\r\nsync\r\n\r\n# Alle Dateien mit 'rm' l\u00f6schen und Ausf\u00fchrungsdauer ausgeben\r\ntime rm \/tmp\/test-speed-rm\/*<\/pre>\n

Das Ergebnis auf meinem System:<\/p>\n

real 0m10.382s\r\nuser 0m10.235s\r\nsys 0m0.136s<\/pre>\n

Nun wiederholen wir den Test, doch diesmal legen wir zus\u00e4tzlich 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\u00f6schen:<\/p>\n

# Altes Testverzeichnis komplett l\u00f6schen (gleiche Ausgangssituation f\u00fcr beide Tests!)\r\nrm -rf\u00a0\/tmp\/test-speed-rm\r\n\r\n# Testverzechnis anlegen\r\nmkdir \/tmp\/test-speed-rm\r\n\r\n# 100.000 Dateien anlegen\r\nfor NUM in $(seq 1 100000); do touch \/tmp\/test-speed-rm\/testfile-$NUM; done\r\n\r\n# Dateisystem-Caches leeren\r\nsync\r\n\r\n# Leeres Verzeichnis anlegen\r\nmkdir \/tmp\/empty\r\n\r\n# Mit RSYNC das leere Verzeichnis in das zu l\u00f6schende Verzeichnis synchronisieren\r\ntime rsync -a --delete \/tmp\/empty\/ \/tmp\/test-speed-rm\/<\/pre>\n

\u00dcberraschenderweise l\u00f6scht Rsync viel schneller:<\/p>\n

real 0m4.398s\r\nuser 0m0.468s\r\nsys 0m3.854s<\/pre>\n

Wirklich interessant, w\u00e4hrend rm inode f\u00fcr inode l\u00f6scht und dabei knapp 10 Sekunden ben\u00f6tigt, schafft rsync die gleiche Arbeit in einem Rutsch in nur etwas \u00fcber 4 Sekunden.<\/p>\n

\u00dcbrigens: Auch ‚find -delete‘ oder ‚find | xargs rm‘ funktionieren nicht schneller. Bei gr\u00f6\u00dferen Dateimengen scheint rsync wirklich das schnellste Tool zu sein.<\/p>\n","protected":false},"excerpt":{"rendered":"

Das Linux Tool ‚rsync‘ ist vielen Admins bekannt. Man kann damit Dateien lokal oder \u00fcber eine SSH-Verbindung schnell und einfach abgleichen. Daher wird Rsync gerne f\u00fcr Backups oder Testumgebungen genutzt. Einen sehr kreativen Einsatz von Rsync habe ich k\u00fcrzlich kennen gelernt: Rsync kann gro\u00dfe Mengen von Dateien schnell l\u00f6schen. \u00dcberraschenderweise sogar schneller, als das rm-Kommando. […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,5],"tags":[45,104,105,66],"_links":{"self":[{"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/posts\/953"}],"collection":[{"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/comments?post=953"}],"version-history":[{"count":10,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/posts\/953\/revisions"}],"predecessor-version":[{"id":966,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/posts\/953\/revisions\/966"}],"wp:attachment":[{"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/media?parent=953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/categories?post=953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.butschek.de\/wp-json\/wp\/v2\/tags?post=953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}