Lieblings-Rsync-Tipps und Tricks

57

Je mehr ich benutze, rsyncdesto mehr wird mir klar, dass es sich um ein Schweizer Taschenmesser für die Dateiübertragung handelt. Es gibt so viele Möglichkeiten. Ich habe kürzlich herausgefunden, dass Sie gehen können --remove-source-filesund eine Datei nach dem Kopieren aus dem Quellcode gelöscht wird, was es ein wenig bewegter macht, als ein Programm zu kopieren. :)

Was sind deine liebsten kleinen Rsync-Tipps und Tricks?

Rory
quelle

Antworten:

19

Versuchen Sie, rsync Version 3 zu verwenden, wenn Sie viele Dateien synchronisieren müssen! V3 erstellt seine Dateiliste schrittweise, ist viel schneller und benötigt weniger Speicher als Version 2.

Abhängig von Ihrer Plattform kann dies einen großen Unterschied machen. Unter OSX Version 2.6.3 dauerte der Versuch, einen Index von 5 Millionen Dateien zu erstellen, mehr als eine Stunde oder stürzte ab, während die von mir kompilierte Version 3.0.2 sofort mit dem Kopieren begann.

robcast
quelle
Beachten Sie, dass bei Verwendung einiger Optionen ( --delete-beforez. B.) das alte Verhalten "Liste zuerst erstellen" verwendet wird, damit diese Optionen ordnungsgemäß funktionieren. Wenn dieses Verhalten nicht angezeigt wird, überprüfen Sie, ob das Andere Optionen, die Sie verwenden, sind dafür bekannt, dass dies nicht möglich ist. Dies kann nützlich sein, wenn Sie rsync interaktiv für einen großen Baum verwenden und den ersten Scan erzwingen möchten, damit die Ausgabe --progresskorrekt ist (dh die Anzahl der zu vergleichenden Objekte steigt nie, da nach dem ersten Scan keine neuen Objekte gefunden werden ).
David Spillett
18

Mit --link-destauf platzsparende Snapshot - Backups zu erstellen, wobei Sie mehrere vollständige Kopien der Daten ertstellten Sicherheitskopien (eine für jeden Backup - Lauf) zu haben scheinen , aber Dateien , die sind nicht fest verbunden spart Platz statt der Schaffung neuer Kopien zwischen den Läufen ändern.

(Eigentlich verwende ich immer noch die Methode rysnc-followed-by-cp -al , mit der das Gleiche erreicht wird, siehe http://www.mikerubel.org/computers/rsync_snapshots/ für einen alten, aber immer noch sehr guten Überblick über beide Techniken und verwandte Themen)

Der Hauptnachteil dieser Technik besteht darin, dass eine Datei, die aufgrund eines Festplattenfehlers beschädigt wurde, in allen Snapshots, die auf diese Datei verweisen, genauso beschädigt ist, aber ich habe auch Offline-Backups, die in angemessenem Maße davor schützen würden. Die andere Sache, auf die Sie achten müssen, ist, dass Ihr Dateisystem über genügend Inodes verfügt, oder dass Ihnen diese ausgehen, bevor Ihnen tatsächlich der Festplattenspeicher ausgeht (obwohl ich noch nie ein Problem mit den ext2 / 3-Standardeinstellungen hatte).

Vergessen Sie auch niemals das sehr sehr Nützliche --dry-runfür ein wenig gesunde Paranoia, besonders wenn Sie die --delete*Optionen nutzen.

David Spillett
quelle
6
+1 für --dry-run
David Z
1
Beachten Sie, dass -n ist die Abkürzung für --dry-run
ctennis
3
Ich halte mich lieber an die langen Namen, besonders in Skripten, die andere möglicherweise beibehalten. Es macht klarer, was ohne Bezugnahme auf die Dokumente gemeint ist.
David Spillett
+1 Ich habe eine Backup-Lösung mit vielen TB über viele Maschinen implementiert, mit der --link-dest-Methode für fest verknüpfte Snapshots, wie oben beschrieben - es hat perfekt funktioniert.
Matja
Wenn Sie --link-dest-Backups mögen , schauen Sie sich Dirvish an , das rsync unter der Haube verwendet
hfs
14

Wenn Sie eine Website mit einigen großen Dateien über einen langsamen Link aktualisieren müssen, können Sie die kleinen Dateien folgendermaßen übertragen:

rsync -a --max-size = 100 KB / var / www / dort: / var / www /

dann mach das für die großen Dateien:

rsync -a --min-size = 100K --bwlimit = 100 / var / www / dort: / var / www /

rsync bietet viele Optionen, die für Websites nützlich sind. Leider verfügt es nicht über eine integrierte Methode zum Erkennen gleichzeitiger Aktualisierungen, sodass Sie Cron-Skripten Logik hinzufügen müssen, um Überschneidungen beim Schreiben großer Dateien zu vermeiden.

Bob
quelle
10

Ich verwende die Option --existing, wenn ich versuche, eine kleine Teilmenge von Dateien aus einem Verzeichnis an einem anderen Speicherort zu synchronisieren.

TCampbell
quelle
Vielen Dank! Das hat mich nur vor lästigen Filterregeln bewahrt.
benzado
8

--rsh gehört mir.

Ich habe es verwendet, um die Verschlüsselung von ssh in etwas schnelleres zu ändern ( --rsh="ssh -c arcfour") und um eine Kette von sshs ssh-agentzu erstellen (empfehle es mit zu verwenden ), um Dateien zwischen Hosts zu synchronisieren, die nicht direkt kommunizieren können. ( rsync -av --rsh="ssh -TA userA@hostA ssh -TA -l userB" /tmp/foobar/ hostB:/tmp/foobar/).

Stephen Paul Lesniewski
quelle
7
--time-limit

Wenn diese Option verwendet wird, stoppt rsync nach T Minuten und beendet sich. Ich denke, diese Option ist nützlich, wenn Sie eine große Menge von Daten während der Nacht synchronisieren (nicht besetzte Stunden) und dann anhalten, wenn es Zeit für Leute ist, das Netzwerk zu benutzen, während des Tages (besetzte Stunden).

--stop-at=y-m-dTh:m

Mit dieser Option können Sie angeben, zu welcher Zeit rsync beendet werden soll.

Batch Mode

Der Batch-Modus kann verwendet werden, um denselben Satz von Updates auf viele identische Systeme anzuwenden.

jftuga
quelle
Nützlich! Ich hatte zuvor den Befehl "at" verwendet, um den Vorgang
Lionel,
Quell-Patches: rsync.samba.org/ftp/rsync/rsync-patches-3.1.0.tar.gz ; Win32-Binärdatei mit Patch: itefix.no/i2/cwrsync
jftuga
2
Leider sind diese Optionen in rsync, das mit Redhat / Centos oder Ubuntu-Distributionen vertrieben wird, nicht verfügbar.
IanB
@Lionel: Wie benutzt du atden Prozess, um ihn zu beenden ?
IMTheNachoMan
6

Wenn Sie sich fragen, wie weit ein langsam laufender rsync gekommen ist und nicht -v zum Auflisten der übertragenen Dateien verwendet hat, können Sie herausfinden, welche Dateien geöffnet sind:

 ls -l /proc/$(pidof rsync)/fd/*

auf einem System, das / proc hat

Zum Beispiel war Rsync gerade für mich aufgehängt, obwohl auf dem Remote-System offenbar noch genügend Speicherplatz vorhanden war. Dieser Trick half mir, die unerwartet große Datei zu finden, an die ich mich nicht erinnerte und die nicht auf das andere Ende passte.

Es erzählte mir auch ein bisschen mehr interessante Informationen - das andere Ende gab anscheinend auf, da es auch eine defekte Socket-Verbindung gab:

/proc/22954/fd/4: broken symbolic link to `socket:[2387837]'
Nealmcb
quelle
5

--archive Dies ist eine Standardoption (jedoch nicht die Standardoption) für sicherungsähnliche Jobs, mit der sichergestellt wird, dass die meisten Metadaten aus den Quelldateien (Berechtigungen, Eigentumsrechte usw.) kopiert werden.

Wenn Sie das jedoch nicht verwenden möchten, möchten Sie häufig noch einbeziehen --times, wodurch die Änderungszeiten von Dateien kopiert werden. Dadurch wird der nächste ausgeführte Rsync-Vorgang (vorausgesetzt, Sie führen ihn wiederholt aus) viel schneller, da Rsync die Änderungszeiten vergleicht und die Datei überspringt, wenn sie unverändert ist. Überraschenderweise (zumindest für mich) ist diese Option nicht die Standardeinstellung.

Andrew Ferrier
quelle
4

Das, das ich am häufigsten verwende, ist definitiv, mit --exclude-fromdem Sie eine Datei angeben können, die auszuschließende Elemente enthält.

Ich finde es auch --chmodsehr nützlich, weil Sie damit sicherstellen können, dass Berechtigungen in einem wünschenswerten Zustand enden, auch wenn Ihre Quelle durcheinander ist.

innaM
quelle
4

--backup-dir = date +%Y.%m.%d--delete Wir löschen, aber machen eine Kopie ... nur für den Fall


quelle
4

Meins ist --inplace. Wirkt Wunder, wenn auf dem Server für Sicherungen ZFS oder btrfs ausgeführt wird und Sie native Snapshots erstellen.

Hubert Kario
quelle
3

Natürlich gibt es auch --deleteDinge, die vom Ziel entfernt werden und nicht in der Quelle gefunden werden können.

innaM
quelle
2

cwrsync - Rsync für Windows http://www.itefix.no/i2/node/10650

Diese Version enthält OpenSSH, sodass Sie Dateien über einen sicheren Kanal übertragen können.

jftuga
quelle
Ich benutze Cwrsync, und es ist großartig. Ich bin froh, dass jemand diese großartige Funktion für Windows bereitgestellt hat.
Andrew Ensley
2
--partial 

Im Falle von Unterbrechungen

--bwlimit=100

Zur Begrenzung der Bandbreite - gut zum Kopieren großer Dateien und Verzeichnisse

rebelbass
quelle
Was ist die Einheit von bwlimit? Bits pro Sekunde, Bytes pro Sekunde?
Timo Kähkönen
@Timo, bwlimit ist in KByte / Sekunde.
Andrew Ferrier
1

Wenn Sie rsync als Daemon auf dem Server eingerichtet haben, können Sie die freigegebenen Module wie jede andere Verzeichnisliste durchsuchen. Dann können Sie sehen, welche Pfade verfügbar sind und welche nicht.

Sybreon
quelle
1

Wenn ich GlusterFs verwende, haben wir einen Engpass mit T-Dateien mit der Größe Null. Für die Synchronisierung zwischen abgestürztem Brick oder Replikat müssen wir verwenden, --min-size=1um keine leeren Dateien von abgestürzten Servern zu synchronisieren

vahid chakoshy
quelle