Einfache verteilte, getrennte Möglichkeit, ein Verzeichnis zu synchronisieren

Einfache verteilte, getrennte Möglichkeit, ein Verzeichnis zu synchronisieren

Ich möchte regelmäßig Backups meines Home-Verzeichnisses auf meinem Ubuntu-Laptop (Rechner X) erstellen. Angenommen, ich habe Zugriff auf zwei verschiedene Remote-Server (Linux), auf denen ich Backups erstellen kann, die Rechner A und B. Rechner X ist der Master und soll mit A und B synchronisiert werden. Ich könnte einfach regelmäßig rsync von X nach A und dann von X nach B ausführen. Das ist alles, was ich brauche.

Ich bin jedoch neugierig, ob es eine bandbreiteneffizientere und damit schnellere Möglichkeit gibt, dies zu tun. Angenommen, X wird über Breitbandleitungen für Privathaushalte betrieben und da ich die Bandbreite nicht aufbrauchen möchte, würde ich die Übertragung von X begrenzen. A und B werden die ganze Zeit online sein, X jedoch nicht, daher möchte ich auch die Übertragungszeit von X reduzieren, sodass A und B möglicherweise mehr Zeit für die Übertragung haben. Außerdem wird X nicht die ganze Zeit verbunden sein.

Wie geht das am besten? rsync von X nach A, dann von A nach B? Das richtige Timing könnte problematisch werden. Ich möchte keine alten Dateien behalten, also würde ich diese --delOption verwenden, wenn ich rsync verwenden würde. Könnte das bedeuten, dass etwas von A nach B übertragen, dann von B gelöscht und dann wieder von A nach B übertragen wird? Das ist nicht optimal.

Ich weiß, dass es schicke verteilte Dateisysteme wie Gluster gibt, aber ich denke, das ist in diesem Fall übertrieben und passt möglicherweise nicht zur getrennten Natur der Systeme.

Antwort1

Dafür gibt es clevere und einfache Möglichkeiten. Ich würde mich, wann immer möglich, für die einfache Variante entscheiden.

Könnten Sie X -> A und dann A -> B machen?

Es gibt auch Methoden wieEinklang, aber das scheint nur auf eine Replik zu gehen, und es ist bidirektional, was für ein Backup nicht so nützlich zu sein scheint. Wenn jedoch sowohl A als auch B Dinge auf Unison ausführen, scheint es, als könnte Client X dann auf A sichernoderB, und es würde gut zum anderen gelangen.

Antwort2

Sie möchten, dass X die Synchronisierung mit A initiiert, das dann die Daten von X abruft und nach Abschluss an B weiterleitet. Ein Skript auf A könnte einfach prüfen, ob irgendwo eine Datei vorhanden ist, die von X auf A hochgeladen wird, wenn es online und bereit für eine Synchronisierung ist. Wenn es mit dem Abrufen von X fertig ist, sollte es an B weiterleiten und die Datei nach Abschluss entfernen. Alternativ könnten Sie fast dasselbe Skript auf A und B haben, aber wenn A mit dem Abrufen von X fertig ist, legt es eine Datei auf B ab, die es anweist, mit A zu synchronisieren. Wenn Sie mehr als 2 Maschinen zu synchronisieren hätten, wäre dies der richtige Weg, da die Synchronisierung dann einfach durch alle kaskadiert werden kann (möglicherweise in einer verteilten Baumstruktur statt linear).

Antwort3

Wäre Dropbox für Sie geeignet?

Antwort4

Ich denke, die Lösung von Michael Graff ist die beste Idee. rsync X -> A. Dann A -> B.

Wenn Sie einen anderen Vorschlag wünschen, der die Rechenzeit verkürzen würde, könnten Sie sich xdelta ansehen (http://xdelta.org/). Es handelt sich im Wesentlichen um dieselbe Lösung wie das Multi-Hop-Rsync, mit dem Vorteil, dass Sie sich die Zeit sparen, die Delatas bei jedem Hop berechnen zu müssen. Wenn es sich um große Dateien handelt, kann dies eine erhebliche Zeitersparnis bedeuten.

Jim C. http://www.kleobackup.net

verwandte Informationen