Firewire2002
Registered User
Ich hab diese rsync Variante eben mal ausprobiert und muss schon sagen, das grenzt an Masturbation.
Der strace zeigt auch warum: es sind wesentlich weniger Syscalls notwendig.
Grob skizierter Ablauf bei find+xargs+rm:
Grob skizierter Ablauf bei rsync:
Die Aktionen die rsync durchführt sind in ihrer Anzahl wesentlich geringer als bei der find+xargs+rm Variante. Wenn es der Verzeichnisbaum hergibt, könnte man es auch noch weiter parallelisieren. Dann dürften da ziemlich gute Zeiten zu erreichen sein.
Vorhin im Schnelltest 500.000 Dateien in unter 30 Sekunden gelöscht. Das gefällt mir.
Der strace zeigt auch warum: es sind wesentlich weniger Syscalls notwendig.
Grob skizierter Ablauf bei find+xargs+rm:
- find holt sich alle Dateien aus dem Verzeichnis und holt sich die Informationen dazu (lstat, fstat)
- find übergibt die Liste an xargs
- xargs sucht sich bei jeder Iteration (Anzahl der Teilmenge an Dateien) den Pfad zu rm neu. (PATH Variable!)
- rm startet lädt jedes Mal Libs & Co, macht aber ebenfalls nochmal einen lstat und fstat auf die zu löschenden Daten
- rm löscht sie
Grob skizierter Ablauf bei rsync:
- rsync indiziert das leere Quell-Verzeichnis (nicht viel zu tun, ausser ein lstat auf das Verzeichnis)
- rsync indiziert das Ziel-Verzeichnis und macht lstat und fstats auf die zu löschenden Daten
- rsync setzt ein unlink auf die Files ab
Die Aktionen die rsync durchführt sind in ihrer Anzahl wesentlich geringer als bei der find+xargs+rm Variante. Wenn es der Verzeichnisbaum hergibt, könnte man es auch noch weiter parallelisieren. Dann dürften da ziemlich gute Zeiten zu erreichen sein.
Vorhin im Schnelltest 500.000 Dateien in unter 30 Sekunden gelöscht. Das gefällt mir.