Wer stand nicht schon einmal vor dem Problem viele Dateien kopieren zu müssen? Sei es zum Austausch von Festplatten oder aus anderen Gründen.
Nachdem ich mir zuletzt mit einem befreundeten Arbeitskollegen 2h in einem Frankfurter McDonalds um die Ohren gehauen habe (3 Uhr Nachts), während ein Linux Server ca. 30GB IMAP Ordner und E-Mails kopierte (mit cp), habe ich mir gedacht es muss einen besseren (schnelleren) Weg geben.
Und je nachdem wie man dieses Thema bisher angeht gibt es den auch, soviel sei schon mal vorab verraten.
Das Testsystem sieht wie folgt aus:
- Debian
- HDD Festplatte
- tar, rsync und cp aus den Debian Packages
Verglichen wird die Performance von:
- tar
- rsync
- cp
Testscript
#!/bin/bash
set -e
clear_cache() {
sync ; echo 3 > /proc/sys/vm/drop_caches
}
d_=$(mktemp -d -p .)
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.11.tar.xz -O- | tar xJ -C $d_ -f -
echo -n "cp performance"
cd_=$(mktemp -d -p .)
clear_cache
time ( cp -Rp $d_ $cd_ )
echo
echo -n "tar performance"
td_=$(mktemp -d -p .)
clear_cache
time ( tar -cp $d_ -f - | ( tar -xp -C $td_ -f - ) )
echo
echo -n "rsync performance"
rd_=$(mktemp -d -p .)
clear_cache
time ( rsync -a $d_ $rd_ )
echo
rm -rf $d_ $cd_ $td_ $rd_
Das Ergebnis sieht dann wie folgt aus:
cp performance
real 1m9.003s
user 0m0.808s
sys 0m6.372s
tar performance
real 1m26.742s
user 0m1.392s
sys 0m8.408s
rsync performance
real 0m59.525s
user 0m7.328s
sys 0m7.780s
Als dieser Beitrag 2008 entstanden ist, war die Performance von cp deutlich schlechter als heute. Nichtsdestotrotz ist es egal was man macht, solange es mit Files zu tun hat sollte man zuerst an rsync denken.
Ach ja wie löscht man unter Linux am schnellsten den Inhalt eines sehr großen (Anzahl) Verzeichnisses? Natürlich auch mit rsync :)
rsync -a --delete $(mktemp -d)/ loesch_mich/