Meine Umgebung ist Ubuntu 15.04 mit Kernel 3.19.0-28-generic und Btrfs v3.17.
Ich habe zwei identische externe USB-Festplatten, die ich mit meinem Backup-Skript verwende. Eine davon ist mit formatiert btrfs
und die andere mit ext4
. Das Quelldateisystem ist immer ext4
. Der rsync
Befehl sieht folgendermaßen aus:
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
Mir ist gerade aufgefallen, dass das durchgeführte Backup btrfs
eineäußerstlange Zeit: Etwas mehr als eine Stunde, im Vergleich zu den 4 Minuten, die es dauert, dieselbe Kopie durchzuführen ext4
.
Um eine Fehlfunktion der Festplatte auszuschließen, habe ich einige Benchmarks mit dd
und dem mit Ubuntu mitgelieferten „Festplatten-Dienstprogramm“ durchgeführt, aber ich habe auf beiden Festplatten die gleiche Leistung erzielt. Der langsame Teil scheint das Hardlinking mit dem vorherigen Backup zu sein. Selbst nach einer Defragmentierung und Bereinigung dauert der folgende Befehl unter etwa 53 Minuten btrfs
, unter jedoch nur 1 Minute ext4
:
cp -arl "$previousBackup" "$destDir"
Bei Recherchen im Internet habe ich Hinweise gefunden, dass die Performance von btrfs
unter Hardlinks leidet, aber das hätte ich nicht erwartet.riesigUnterschied. Ich habe herausgefunden, dass dieser Befehl schneller ist, aber trotzdem über 30 Minuten dauert:
cp -ar --reflink "$previousBackup" "$destDir"
Hat jemand Erfahrung mit diesem Verhalten und kann es bestätigen? Gibt es eine einfache Möglichkeit, es zu korrigieren (z. B. andere Mount-Optionen) oder sollte ich versuchen, so viele Hardlinks wie möglich zu löschen und nur Reflinks zu verwenden?
BEARBEITEN
Ich habe gerade herausgefunden, dass sogarLöschenein Verzeichnis btrfs
benötigt mehr als eine Stunde. Derselbe Vorgang ist auf der „Zwillings“ ext4
-Platte sofort erledigt. Hier liegt offensichtlich ein Problem mit den Metadaten vor.
Antwort1
Sie sagen, Sie kopieren Hardlinks mit Ihremrsync
Befehl, aber wo ist die -H
Flagge? Ich sehe sie nicht in Ihrem Befehl:
rsync --inplace --no-whole-file --link-dest="$previousBackup" "$sourceDir" "$destDir"
So wie ich es verstehe rsync
– in Bezug auf Hardlinks – funktioniert es so, dass ohne das -H
Flag tatsächliche Daten kopiert werden, anstatt des Hardlinks, wie auf derrsync
manpage:
-H, --hard-links
Dies weist rsync an, bei der Übertragung nach fest verknüpften Dateien zu suchen und die entsprechenden Dateien auf der Empfängerseite miteinander zu verknüpfen. Ohne diese Option werden fest verknüpfte Dateien bei der Übertragung so behandelt, als wären sie separate Dateien.
Ich kann mir vorstellen, dass ein solches Verfahren, bei dem viele ähnliche Dateien immer wieder kopiert werden, anstatt sie fest zu verknüpfen, zu längeren Übertragungszeiten führen würde.
Erwägen Sie außerdem die Verwendung des Flags -z
( --compress
):
-z, --compress
Mit dieser Option komprimiert rsync die Dateidaten beim Senden an den Zielcomputer, wodurch die übertragene Datenmenge reduziert wird – was bei einer langsamen Verbindung nützlich ist.
Ja, dies ist eine USB-zu-USB-Übertragung auf demselben System, sodass die Geschwindigkeit wahrscheinlich bereits optimiert ist. Es schadet jedoch nicht, dies zu überprüfen, da es -z
Ihnen vielleicht dabei hilft, natürliche Engpässe bei der USB-Datenübertragung zu überwinden.
Ein schönes, einfaches Tutorial, das diese und andere Flags erklärt.finden Sie hier.