Zwei Storage-Server offline syncronisieren

PipeL1n3

New Member
Hi!

Habe mir heute was verrücktes überlegt!
Ich betreibe hier privat einen Storage-Server wo jeder Bewohner seinen Kram ablegt, aber auch ein riesiger Pool an gemeinsam genutzten Dateien hat sich angesammelt. Nun werde ich den Haushalt aber bald verlassen und will natürlich alle meine, sowie die gemeinschaftlichen Dateien mitnehmen, sodass ich quasi mein Storage wie gewohnt benutzen kann. Das wollen die anderen natürlich auch so, also muss ein zweiter Server her.

Jetzt zu meiner Idee:
Momentan hab ich im Storage 9TB Speicherplatz zur verfügung, der auch zu gut 3/4 belegt ist. Da ich auf nichts verzichten möchte, werde ich einen zweiten Server mit identischen Storage aufbauen. Nun möchte ich diese aber auch syncronisieren, sodass neu hinzukommende Dateien auf beiden Servern vorhanden sind und das in beide Richtungen. Also sowohl von Server A zu Server B als auch Server B zu Server A.
Nun zum knackpunkt: Beide Systeme werden Räumlich voneinander getrennt betrieben (also in einer anderen Stadt!). Gleichzeitig möchte ich NICHT irgendwelche Daten über das Internet syncronisieren. Jetzt wäre meine Idee, eine Festplatte in einem USB3.0 externem Gehäuse als Austausch gerät heranzuziehen. Nun habe ich auf dieser aber nur 1TB zur Verfügung (und möchte möglichst auch keine 10TB Platte kaufen müssen zu diesem Zweck), sodass quasi eine Dateiliste von System A erstellt werden müssten, dann die Platte an System B angeschlossen wird, dort wird ebenfalls eine Dateiliste erstellt und dann alle Dateien, die System B neuer als System A hat auf die Platte zu kopieren. Nun soll dann die Festplatte wieder zu System A mitgenommen werden und dort werden erstens die neuen Dateien aufs System übernommen und zweitens eine aktualisierte Dateiliste erstellt (da sich ja mittlerweile neue Dateien darauf befinden könnten) und diese wieder mit der Dateiliste von System B verglichen und dann wieder die neuen Dateien auf die Platte übertragen und das Spiel kann dann immer so weiter gehen.

Denke das ist verständlich und aufjedenfall umsetzbar. Klar könnte ich das ganze als shell-script verwirklichen und über cron pläne automatisieren. Nur bin ich mir da nicht sicher, wie ich die Dateiliste sollte. Sicher ist das ich Hash-Werte zur Verifierung benutzen möchte, ob sich denn Dateien überhaupt unterscheiden, denn Name, Verzeichnisbaum und ggf. sogar das Änderungsdatum könnten ja übereinstimmen, nur der Inhalt nicht.
Jetzt denke ich aber, dass es bestimmt einen einfacheren Weg gibt, als diese Pfriemel-Lösung, schliesslich gibt es sehr gute und professionell gepflegte Backup-Software. Evtl. kann man die Dateiliste und die Hashs ja sogar auf Dateisystemebene abgreifen, sodass diese nicht erst aufwendig berechnet werden muss bzw. bei jedem erstellen das ganze Dateisystem neu "kartografiert" werden muss. Benutze zurzeit XFS und möchte dies auch weiterhin tun.

Angeschaut habe ich mir mal Gluster, aber bisher keine Funktion in den Docs gefunden, die syncronisierung über ein offline-Medium zu verwirklichen, zumal dieses nicht die gespiegelten Daten selbst enthält sondern nur eine Auflistung dieser.

Hoffe jemand hat da nen geistesblitz, der mich da weiterbringt.
Ich bin wie gesagt nicht auf den Kopf gefallen was Linux und Storage angeht, aber in diese Richtung musste ich mich bisher nicht vertiefen, sodass ich jetzt ziemlich ratlos dastehe.

Viele Grüße!
, PipeL1n3
 
Ich vermute mal, daß du viel zu kompliziert denkst. ;)

Gleichzeitig möchte ich NICHT irgendwelche Daten über das Internet syncronisieren.

Könntest du diese Intention näher begründen?
Kannst du auch bitte noch angeben, welches OS auf dem Storage eingesetzt wird?
Diese Infos könnten hilfreich bei der Auswahl eines Lösungsansatzes sein.
 
Nach der Initialkopie und nach jedem Update kannst Du eine Zeitstempeldatei anlegen. Alles was neuer ist(ctime!), kommt auf die externe Platte.

Kollisionen(geänderte Dateien auf beiden Servern) musst Du aber irgendwie abfangen.

Gleiche Inhalte können sich ansammeln. Ein fdupes von Zeit zu Zeit könnte helfen(Wenn fdupes die Menge noch packt).
 
Last edited by a moderator:
M.E. sind Synchronisationslösungen, die nicht automatisch funktionieren, nicht sinnvoll dauerhaft verwendbar. Ich würde daher übers Internet syncen (spricht nichts dagegen, wenn die Übertragungsstrecke verschlüsselt ist).

In Deinem Fall gibt es einfach zu viele Einschränkungen. Eine 10TB Platte wäre eine Möglichkeit, die Sache deutlich einfacher zu gestalten, denn dann müssten beide Server nur den gesamten Datenbestand mit dieser Platte abgleichen.

Ansonsten würde ich z.B. 2x NAS Systeme empfehlen, die miteinander syncen können. Mit 2x Synology NAS Systemen ist so etwas auch ordnerbasiert und automatisiert übers Internet ohne Probleme möglich.
 
Willst du die Dateien nicht über Internet synchronisieren oder sollen die Server keine Internet-Verbindung zueinander haben?
Falls nur (zB wegen Datenverbrauch oder Bandbreite) die Synchronisierung ausgeschlossen ist, so wäre eventuell rsync --compare-dest hilfreich wenn jeweils der andere Server read-only als lokaler (NFS)-Dateipfad gemounted ist.

Funktionsweise ungefähr: Du vergleichst /home mit /other-server und die geänderten Dateien werden in /usb-festplatte abgelegt. Dann wird die Festplatte in den anderen Server gesteckt und mit rsync die neuen Dateien überschrieben. Dann wird hier die gleiche Prozedur wiederholt und für den anderen Server eine Kopie der Änderungen erstellt. Dabei werden dann jeweils die 9TB voll eingelesen so dass du - so oder so - nicht all zu oft rüberlaufen musst da die Server eh konstant mit dem Einlesen und Last-Schrotten ihrer Platten beschäftigt sind :D

Eine Master-Master Replikation ohne Live-Verbindung kann nur zu Bauchschmerzen, Problemen, Datenverlust und ähnlichem führen. Ich würde es keineswegs empfehlen!
 
Im übrigen gibt es eine Entsprechung des alt-ehrwürdigen Archiv-Bits unter DOS/Windows auch auf Linux. Das nodump-Attribut. Man kann es für einen Dateibaum setzen und sobald eine Datei verändert wird, wird es automatisch gelöscht(zumindest bei bei ext4). Alle Dateien ohne nodump-Attribut sind dann der Teil, den man kopieren möchte.

Da ich den vorliegenden Fall eher bei Replizierung/Datensicherung der eigenen DVD-Sammlung sehe - sprich Dateien mit statischem Charakter - erscheint eine Truck-Based-Replication durchaus sinnvoll. Persönlich wäre mir das allerdings zu anstrengend.

Sich häufige ändernde Dateien würde ich grundsätzlich nicht direkt in beide Richtungen Synchronisieren. Da können immer wieder Bearbeitungskonflikte auftreten, die dann manuell gelöst werden müssen. (2 Bearbeiten das gleiche Dokument -> der letzte gewinnt; oder: Einer kopiert Dateien über eine unbemerkte Änderung des anderen). Da würde ich eher getrennte Bereiche für Server A und Server B deklarieren, die dann jeweils nur in eine Richtung repliziert werden.
 
Last edited by a moderator:
Könntest du diese Intention näher begründen?
Kannst du auch bitte noch angeben, welches OS auf dem Storage eingesetzt wird?
Diese Infos könnten hilfreich bei der Auswahl eines Lösungsansatzes sein.

Hi, danke erstmal für die Antworten.

Grund dafür, dass es keine Syncronisation über die Internetverbindung sind 1. natürlich der Datensicherheit wegen, ja man kann verschlüsseln, aber ich möchte diesen Weg gerne vermeiden, selbst wenn es nur Meta-Daten sind. 2. Habe ich am aktuellen Standort nur "Holz"-Internet :rolleyes: Sprich: Die Leitung ist mit dem täglichen Gebrauch der Bewohner schon zu sehr ausgelastet, da möchte ich nichtnoch mehr Last dazupacken. Auch nachts fällt aus, da dort sowieso schon die ständigen Game-Updates von Steam usw. ablaufen. 3. Sind generell keine Dienste dieser Server online erreichbar, alles intranet only, das möchte ich auch ganz gerne beibehalten, da schläft man besser! ;)

Edit1: Achja! Das OS ist natürlich Linux, aktuell in form von CentOS 7

Edit2:
Sich häufige ändernde Dateien würde ich grundsätzlich nicht direkt in beide Richtungen Synchronisieren. Da können immer wieder Bearbeitungskonflikte auftreten, die dann manuell gelöst werden müssen. (2 Bearbeiten das gleiche Dokument -> der letzte gewinnt; oder: Einer kopiert Dateien über eine unbemerkte Änderung des anderen). Da würde ich eher getrennte Bereiche für Server A und Server B deklarieren, die dann jeweils nur in eine Richtung repliziert werden.
Ich könnte mich auch mit einer Lösung anfreunden, die nur neu hinzugekommene Dateien berücksichtigt, tatsächlich gibt es nur sehr wenige Dateien, an denen Änderungen vorgenommen werden und diese sind dann Teil des persönlichen Bereichs der einzelnen Benutzer. Da ich eigentlich nur den gemeinsam genutzten Bereich und meinen Persönlichen Bereich zu spiegeln brauche, kann ich mich daher ganz gut mit ausschliesslich spiegeln neuer Dateien anfreunden.

Edit3:
Funktionsweise ungefähr: Du vergleichst /home mit /other-server und die geänderten Dateien werden in /usb-festplatte abgelegt. Dann wird die Festplatte in den anderen Server gesteckt und mit rsync die neuen Dateien überschrieben. Dann wird hier die gleiche Prozedur wiederholt und für den anderen Server eine Kopie der Änderungen erstellt. Dabei werden dann jeweils die 9TB voll eingelesen so dass du - so oder so - nicht all zu oft rüberlaufen musst da die Server eh konstant mit dem Einlesen und Last-Schrotten ihrer Platten beschäftigt sind :D
Auf die Idee rsync zu benutzen bin ich auch schon gekommen, allerdings wird das wie du bereits sagst, massive Last am Storage Server auslösen und jeder durchlauf warscheinlich mehrere Stunden dauern. Ist also keine brauchbare Lösung, besser wäre ein Journaling-basierte Vorgehensweise. Daher erhoffte ich eigentlich man könnte es brauchbares aus den XFS Metadaten auslesen, schliesslich sind dort ja alle infos vorhanden. Evtl. könnte man quasi ein Snapshot der Dateisystem-Metadaten erstellen und diesen mit einem Snapshot des anderen Servers vergleichen. Dann die Dateien, die nicht in beiden auftauchen auf das externe Drive kopieren.

Ich werde mir eure Antworten nochmal genauer Anschauen und mir weiterhin meine Gedanken machen! Natürlich bin ich weiterhin dankbar für jeden weiteren Denkanstoss.
 
Last edited by a moderator:
Ist zwar eine Windows SW, aber Du wirst ja eh über ein anderes Gerät syncen müssen: https://allwaysync.com/features

Das kann über ein "Intermediary Device" syncen. Hierzu bräuchtest Du aber wohl doch eine 10TB Festplatte, oder Du syncst halt nur einzelne Ordner.

Allwaysync verwende ich schon seit Jahren (habe Pro gekauft, ist aber für Dich sicher erst mal nicht nötig) und es ist wirklich mein "One Stop Shop" im Bezug auf Sync.
 
aber Du wirst ja eh über ein anderes Gerät syncen müssen: https://allwaysync.com/features

Ach ja ? Wieso ? :confused:



Aktueller Lösungsansatz momentan:
Werde auf beiden Servern den mlocate Dienst laufen haben.
Beim Anschliessen des externen Drives wird dann ein Datenbank-Update angestossen (dauert im Versuchstest eben ca. 4 min, ist also vertretbar). Dann wird die Auflistung der Verzeichnisstruktur in ein File auf das externe Device geschrieben und mit dem des anderen Servers verglichen. Dann werden alle Dateien, die nicht in beiden Verzeichnisstrukturen vorhanden sind auf das externe Drive kopiert (mit vermerk der Senderichtung). Danach werden dann ggf. die Daten, die in "Empfangs-Richtung" bereits auf der Externen Platte liegen übernommen und danach der Speicherplatz wieder frei gemacht.

So werden natürlich nur neu hinzukommende Dateien/Ordner berücksichtigt, aber das wird mir genügen.
Nur wo ich mir gerade noch den Kopf zerbreche ist, wie ich Dateien vom System löschen kann, ohne das ich die beim nächsten Sync zurückbekomme.

Ist zwar etwas anders als ich mir das Anfangs vorstellte, aber vorerst die einfachste Lösung. Schade, dass es dort keine "fertige" und professionell erprobte Methode gibt. Obwohl es doch eigentlich eine Lösung geben muss für quasi ein zurückgestelltes Backup, wenn z.b. die Backup-Site vorübergehend offline ist, oder? Dann müsste ja (bei einem inkrementellen Backup) die Daten irgendwo zwischengepuffert werden, bis die Backup-Site wieder online ist. Dieser zwischenpuffer könnte ja die externe Platte dann sein.
 
1. natürlich der Datensicherheit wegen, ja man kann verschlüsseln, aber ich möchte diesen Weg gerne vermeiden, selbst wenn es nur Meta-Daten sind.

Man kann nicht nur, man sollte auch verschlüsseln. Wer heutzutage noch freiwillig auf Verschlüsselung verzichtet, dem ist nicht mehr zu helfen ;)
Aber wenn die Datenübertragung verschlüsselt ist, bist du auch auf der sicheren Seite, was deine Bedenken bezüglich der Datensicherheit angeht.

2. Habe ich am aktuellen Standort nur "Holz"-Internet :rolleyes: Sprich: Die Leitung ist mit dem täglichen Gebrauch der Bewohner schon zu sehr ausgelastet, da möchte ich nichtnoch mehr Last dazupacken. Auch nachts fällt aus, da dort sowieso schon die ständigen Game-Updates von Steam usw. ablaufen.

Über welche Datenmengen sprechen wir hier eigentlich, die pro Zeiteinheit (z.B. Tag, Woche oder Monat) synchronisiert werden sollen?
Wenn die Datenmenge nicht zu hoch sein sollte, könnte man trotzdem eine Online-Sync in Erwägung ziehen, man muß dann halt nur dem Sync-Prozeß ein Bandbreitenlimit mitgeben.

3. Sind generell keine Dienste dieser Server online erreichbar, alles intranet only, das möchte ich auch ganz gerne beibehalten, da schläft man besser! ;)

Man könnte ja die Sync z.B. durch ein VPN tunneln. So wäre nur die Sync selber online erreichbar, der Rest des Systems wäre weiterhin im Intranet.
 
Man kann nicht nur, man sollte auch verschlüsseln. Wer heutzutage noch freiwillig auf Verschlüsselung verzichtet, dem ist nicht mehr zu helfen ;)
Aber wenn die Datenübertragung verschlüsselt ist, bist du auch auf der sicheren Seite, was deine Bedenken bezüglich der Datensicherheit angeht.



Über welche Datenmengen sprechen wir hier eigentlich, die pro Zeiteinheit (z.B. Tag, Woche oder Monat) synchronisiert werden sollen?
Wenn die Datenmenge nicht zu hoch sein sollte, könnte man trotzdem eine Online-Sync in Erwägung ziehen, man muß dann halt nur dem Sync-Prozeß ein Bandbreitenlimit mitgeben.



Man könnte ja die Sync z.B. durch ein VPN tunneln. So wäre nur die Sync selber online erreichbar, der Rest des Systems wäre weiterhin im Intranet.

zu 1: Natürlich würde ich sowas nur mit einer starken Verschlüsselung machen, ich habe es nur überspitzt formuliert.

zu 2: Der Zeitraum wäre mindestens 14 tägig bzw. Monatlich und das Datenaufkommen mindestens 1GB pro Woche, sporadisch aber deutlich mehr (ca. 120 GB pro Woche). Ja das klingt erstmal nicht nach viel, aber bei den im ländlichen Gebiet verbreiteten Internet-Anschlüssen gehen da, besonders auf der Upload-Seite, unter Umständen viele Stunden Vollauslastung mit her. Bzw. mit einem Bandbreitenlimit sogar noch viel mehr Stunden bei nur marginaler Beinträchtigung. Das könnte ich aber per QoS abfangen, indem ich diese spezielle Verbindung nur mit idle-Priorität übertragen lassen.

zu 3: Ich werde die möglichkeit Überdenken, evtl. muss ich zugestehen ist ein Online-Abgleich doch kein no-go. Aber als Technikaffinen Menschen reizt mich die Umsetzung "auf meine Weise". Wenn sich das als problematisch oder erst garnicht durchführbar herausstellt bleiben mir immernoch der online-weg.
 
Last edited by a moderator:
M.E. geht es nicht um offline vs online, sondern um "mit Usermitwirkung" oder "automatisch". Ersteres geht vielleicht eine Zeit lang gut, aber irgendwann vergißt mans und dann ist nicht mehr viel mit "in sync". Daher wäre automatischer Sync (online) zu favorisieren. Die Synclösung sollte in jedem Fall eine Konfliktlösungsmöglichkeit mitbringen.

Online wären in der Tat Resilio oder https://syncthing.net eine Möglichkeit. Bei extrem großen Datenmengen könnten aber beide Lösungen ein Problem haben.

Zu empfehlen wäre ein lokaler Erstsync und dann ein Update übers Internet.
 
M.E. geht es nicht um offline vs online, sondern um "mit Usermitwirkung" oder "automatisch". Ersteres geht vielleicht eine Zeit lang gut, aber irgendwann vergißt mans und dann ist nicht mehr viel mit "in sync". Daher wäre automatischer Sync (online) zu favorisieren. Die Synclösung sollte in jedem Fall eine Konfliktlösungsmöglichkeit mitbringen.

Online wären in der Tat Resilio oder https://syncthing.net eine Möglichkeit. Bei extrem großen Datenmengen könnten aber beide Lösungen ein Problem haben.

Zu empfehlen wäre ein lokaler Erstsync und dann ein Update übers Internet.

Meinst du mit Usermitwirkung, das einstöpseln der Platte und den Transport zum jeweils anderen Server? Denn alles andere soll auf jedenfall automatisch ablaufen.
Ich werd mir erstmal weiter überlegen welchen Weg ich nun wähle. Wirklich akut wird das Problem erst in ca. 4 Monaten, vorerst ist es nur ein Konzept.
Evtl. wirds am Ende doch die 10TB externe, obwohl die Recht teuer ist. Dann Verschlüsselt und mit automatischen Sync sobald sie an die Server angeschlossen wird. Vorteil wäre natürlich auch, dass ich auch mal außerhalb der beiden intranet-Umgebungen auf die Daten zugreifen kann (ohne gleich eine VPN-Verbindung aufzubauen), wenn ich die Platte dabei hab.

Vielen Dank für die zahlreichen Antworten und Denkanstöße,
Ich werde Versuchen dran zu Denken, hier Feedback zu geben, sobald ichs Umgesetzt habe!
 
Weiterer möglicher Grund für die HD - mein Prinzip seit langem: "Daten, die nicht gebackupt sind, kann man als gelöscht betrachten". :D

OK, Du hast zwar immerhin ein "Offsite Backup" mit dem anderen Server, aber die Frage ist dann, wie aktuell das ist. Mit der Platte kann man auf jeden Fall öfter ein Backup machen.
 
Weiterer möglicher Grund für die HD - mein Prinzip seit langem: "Daten, die nicht gebackupt sind, kann man als gelöscht betrachten". :D

Backup steht hier ja garnicht zur Debatte. Das erledige ich auf mehrere LTO-5 Bänder im Wechsel, allerdings werden dort nur die wichtigsten Ordner drauf geschrieben, also das was wirklich wehtut wenns mal weg wäre.
Das könnte zwar auch als Übertragungsmedium herhalten, wäre aber erstens komplex, da u.U mehrere Bänder benötigt würden und zweitens teuer, da ich ein zweites LTO Laufwerk bräuchte. Denke das sprengt sowohl den finanziellen, als auch den Aufwands-Rahmen ;)
 
Hi!

Es gibt neuigkeiten! Mittlerweile haben sich die Umstände geändert und es steht nun an beiden Endpunkten mindestens VDSL50 zur Verfügung. Da mir jetzt mindestens 10Mbit/s in beide Richtungen zur Verfügung steht, werde ich den ganzen Quatsch mit offline-Sync vergessen und möchte jetzt nen Sync über die Online Verbindung.

Jetzt kommt die Frage: Wie soll ich vorgehen? Möchte 1. möglichst wenig Last am Festplattensystem verursachen und 2. Die Bandbreite nur in Anspruch nehmen wenn diese auch zur Verfügung steht und keine anderen Dienste ausbremst. Das sollte sich doch über QoS lösen lassen.
 
Grundsätzlich schmeiss ich nochmal SyncThing in den Raum. Das ist ein OSS P2P-SyncProgramm(ähnliche/gleiche Funktion wie das genannte Resilio Sync, nur eben Open Source) mit starker Ende zu Ende-Verschlüsselung. Das teste ich gerade. Hat auch eine Mögichkeit zur Bandbreitenbegrenzung eingebaut.

Jetzt kommt die Frage: Wie soll ich vorgehen? Möchte 1. möglichst wenig Last am Festplattensystem verursachen und 2. Die Bandbreite nur in Anspruch nehmen wenn diese auch zur Verfügung steht und keine anderen Dienste ausbremst. Das sollte sich doch über QoS lösen lassen.

Wenig Last am Festplattensystem

Man kann den Dienst per ionice herunterregeln. Dann haben alle anderen Vorrang. Mit einer guten Synchronisationssoftware wird die Last dabei auch noch minimiert. Ein manueller, regelmässig per cron ausgeführter rsync könnte da erhebliche Last verursachen, da dieser unter Umständen auf beiden Seiten immer auch ganze Dateien liest, um Unterschiede zu berechnen.(Spart Netzerkbandbreite, aber erhöht I/O).

Bandbreite: QoS

Ja, kann man machen. Ich finde das allerdings nicht so trivial; habe aber auch keine bessere Lösung.
 
Last edited by a moderator:
Back
Top