Backup-Programm schreiben - Wie genau?



  • Hallo,

    wie genau hat ein Backup-Programm auszusehen?

    Ich hab das jetzt so betrachtet: Man gibt Source und Destination an, dabei werden - sagen wir mal - jede 5te Minute die Sources ins Destination gepackt. Wenn da jetzt im Destination ein File ist, das nicht in der Source vorkommt, soll sie gelöscht werden, lieg ich da richtig?

    Oder wäre es doch besser, das File innerhalb der Destination stehen zu lassen?

    Oder soll das eine Einstellung werden?

    Mit rsync komm ich grad noch nicht so klar, darum wollte ich was eigenes kleines bauen.

    Gibt es sonst noch irgendwelche Vorschläge, wie das Backup-Programm auszusehen hat?



  • backupper schrieb:

    Mit rsync komm ich grad noch nicht so klar, darum wollte ich was eigenes kleines bauen.

    Ist klar, da baut man sich schnell was eigenes.

    Was hat die Frage mit C++ zu tun?



  • manni66 schrieb:

    Ist klar, da baut man sich schnell was eigenes.

    In der Tat. So kompliziert ist das nicht. Rumkopieren/löschen von Dateien mit Boost.Filesystem, geht ganz leicht von der Hand.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum Themen rund um die IT verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Wenn's so einfach ist, wieso musst du dann diese Fragen stellen? Gehört zu einem guten Backupprogramm eventuell doch mehr als nur das Kopieren von Dateien?



  • SeppJ schrieb:

    Wenn's so einfach ist, wieso musst du dann diese Fragen stellen?

    Ich baue gerne ein Programm, das die Meinung von anderen erfahrenen(eren) Programmierern representiert.

    SeppJ schrieb:

    Gehört zu einem guten Backupprogramm eventuell doch mehr als nur das Kopieren von Dateien?

    Ja, so ähnlich war die letzte Frage.
    Fällt mir grad nichts dazu ein, was es denn sonst noch können soll, als einen Ordner zu "synchronisieren" sag ich mal.
    Was darf es denn noch sein?



  • rsync hat auch Netzwerkfuntkionalitäten, Black-List, White-List, wie Soft- und Hard-Links behandelt werden sollen usw.
    Lies dir einfach mal die Man-Page durch.

    Moderne Backup-Programme sichern pro Datei eine Historie. Also nur eine Version einer Datei zu haben, ist tendenziell gefährlich, da die letzte Version evtl. Mist ist.



  • Heißt das, ich sollte wohl immer so ne Art Ordner dazubauen, dessen Namen ein Datum ist, und da dann reinkopiert wird? Oder wie ist das mit der Historie zu verstehen? Eigentlich machts Sinn, andererseits ist die Festplatte damit schneller voll. Man nehme allein schon ein Verzeichnis, das 50 GiB hat. Ja, von daher ist eine Historie - so wie ich sie interpretiert habe - nicht sinnvoll. Könnte man aber eventuell eine Einstellung daraus machen.

    Noch was - soll ich im Destination vor dem Datei reinkopieren checken, ob die Datei identisch ist? Denn wenn sie ja schließlich identisch ist, muss mans doch nicht rumkopieren und wenn dann trotzdem eine Änderung vorgenommen wird, wird dann kopiert. Oder einfach nur drauf kopieren? Gibt es da Performance-Unterschiede? Ich denk mal schon. Was sind Vor- und Nachteile der beiden Möglichkeiten?

    Ja, sowas wie ein --follow-symlinks könnt ich auch mit Leichtigkeit einbauen.


  • Mod

    Speichere Unterschiede.

    Und ja, das alles ist wesentlich komplizierter, als es zunächst klingt. Dein Vorhaben ist, gelinde gesagt, sehr ambitioniert, sofern am Ende kein Müll raus kommen soll. Deshalb auch der etwas amüsierte Ton der Antworten, weil solch eine krasse Diskrepanz zwischen der tatsächlichen Schwierigkeit und der von dir angenommenen Schwierigkeit besteht, insbesondere da du anscheinend noch gar nicht so richtig über mögliche Vorgehensweisen nachgedacht hast.

    Überleg vielleicht mal so: Wenn's mit ein bisschen Kopiererei getan wäre, wieso gibt es dann so aufwändige Programmpakete für Backups, anstatt dass jeder ein kleines Shell-Script nimmt?



  • Hi

    Datensicherung ist etwas bei dem Jeder für seine persönlichen Zwecke entscheiden muss wie am sinnvollsten vorzugehen ist.

    Wenn man Linux als OS verwendet ist es gar nicht so wild ein sinnvolles Backup-System zu erstellen. Bevor man dies macht muss man sich ein paar Fragen stellen:

    Wie ist die Infrastuktur der zu sichernden Maschinen?
    Welche Dateien sollen gesichert werden?
    Welche Größe wird für die backups angesetzt?
    Wohin soll gesichert werden?
    Welches Protokoll soll zur Sicherung verwendet werden?
    Wie oft soll gesichert werden?
    Welche Ausnahmeregeln existieren?

    Ich kann mal erzählen wie mein System aufgebaut ist und welche Daten ich sicher, um ein Gefühl für obige Fragen zu bekommen:

    Für meinen Computer habe ich zwei physikalische Server am laufen. Auf einem ist nur ein Debian 8 mit dem Programm Shorewall installiert. Dies ist im wesentlichen ein Skipt mit welchem sehr elegant IP-Tabellen und Zugriffsegeln gesetzt werden. Der Server dient einfach als Firewall. Dahinter befindet sich ein zweiter physikalischer Server, auch mit einem Debian 8, welcher via Xen zur Verwaltung fünf virtueller Server dient.

    Einer dieser vituellen Server ist mein 1. backup-Server. Darauf ist von mir Own Cloud eingerichtet. In meinem Computer befindet sich im Home Ordner mittels encfs ein verschlüsseltes Verzeichnis, welches immer in die Cloud aktualisiert wird. Dies betrifft aber nur meine persönlichen Daten. In meinem Client ist auch ein Dopbox Ordner. Dazu später mehr.

    Der zweite virtuelle Server dient nur als Login Server, welcher als einziger ssh erlaubt (auch wenn gewisse "Fan-Boys" das nicht wahr haben wollen, aber ssh stellt eine enorme Sicherheitslücke dar!).

    Server drei ist ein DHCP-und Image-Server, der meinem Computer über MAC Adresse und Host Namen meine statische IP zuordnet. Desweiteren habe ich auf diesem Server das phantastische Programm FOG am laufen. Das ist wie CloneZilla, aber um ein vielfaches besser. Dies verwende ich um Images von meinem Rechner zu erzeugen und um flexibel andere Systeme zu verwalten. Ich kann aufs Klo gehen und von meinem Handy aus mein Linux durch bsp. ein Windows 10 ersetzen. Bei 8,2 GB pro Minute Transferrate ist das i.d.R. fertig bevor ich zurück in meinem Zimmer bin 🙂

    Auf Server vier läuft cups um meinen Drucker anzusteuern. So etwas will ich nicht (gehört auch nicht darauf) auf meinem Client haben.

    Server 5 dient nur zum Monitoring. Darauf ist Nagios 4 installiert. Wenn igendeiner meiner Dienste abstüzt erhalte ich eine email auf mein Handy und es werden automatisiert Notfallroutinen gestartet. Ein Monitoring Dienst ist etwas enorm wichtiges! Würde ich schwer empfehlen. Insbesondere muss man dann nicht log Dateien "durch-grepen" wenn mal was ist, was meiner Erfahrung nach der pure Tod ist...

    Und jetzt kann man sich überlegen wie man über die OwnCloud hinaus Daten sichert. Da gibt es viele Ansätze. Anfangs dachte ich auch von den Server Images zu erstellen. Habe mich aufgrund des hohen Traffic und des Festplattenverbrauchs, der daraus entstehen würde aber dagegen entschlossen. Für mich (!) bin ich zum Schluss gekommen, dass ich auf meinem Client einen Backup Ordner habe. Darin speicher ich nur die wenigen .conf Dateien ab, mit welchen ich das System schnell wieder aufsetzen könnte. Damit sind diese Dateien auf dem OwnCloud als auch auf dem DHCP Server gesichert. Desweiteren sind diese .conf Dateien auch in einem encfs verschlüsseltem Dropbox Ordner. Die kostenlose Variante reicht da mehr als aus.

    Über eine externe Festplatte mache ich von Zeit zu Zeit redundante Kopien um auf wirklich sicher zu gehen das kein Verlust entsteht. Ich mache das nicht oft genug um einen cron Job aufzusetzen, aber so sichere ich nunmal meine Daten.

    Für dich kann das alles entweder genau die Lösung sein, oder völlig unbrauchbar. Vielleicht willst du jede Nacht automatisch Backups über das Netzwerk machen? Vielleicht auch nicht. Was ich sagen will: Beantworte die oben gestellten Fragen und dann kann man sich Gedanken machen welche Lösung für dich am besten ist.

    Der Betrieb in dem ich bin nutzt beispielsweise IBM's TSM als Backup Lösung. Für mich privat wäre das nichts, mein Chef hingegen feiert es. Kommt immer auf den Blickwinkel an 😉

    Grüße



  • SeppJ schrieb:

    Speichere Unterschiede.

    Dies war mein Vorhaben, jedoch aufgegeben, weil ich mit binären Dateien nicht mehr wirklich klar komme. Mit Text-Dateien und Zeilenunterschieden ging das noch ziemlich einfach von der Hand. Den rsync-Code lesen hat mir nicht sonderlich weitergeholfen, was wohl beweist, dass meine Zeit in diesem Fall noch nicht gekommen ist. Ist auch eine ziemlich langweilige Aufgabe wie ich finde, deshalb auch keine Lust mich jetzt tagelang damit auseinanderzusetzen.

    Überleg vielleicht mal so: Wenn's mit ein bisschen Kopiererei getan wäre, wieso gibt es dann so aufwändige Programmpakete für Backups, anstatt dass jeder ein kleines Shell-Script nimmt?

    Naja, mit Bash fühle ich mich sehr unwohler als mit C++. Ich trau dem Bash nicht so recht. Ich hab viel mehr Ahnung über mein Vorgehen, wenn ich C++ nehme.

    Und ja, das alles ist wesentlich komplizierter, als es zunächst klingt. Dein Vorhaben ist, gelinde gesagt, sehr ambitioniert, sofern am Ende kein Müll raus kommen soll. Deshalb auch der etwas amüsierte Ton der Antworten, weil solch eine krasse Diskrepanz zwischen der tatsächlichen Schwierigkeit und der von dir angenommenen Schwierigkeit besteht, insbesondere da du anscheinend noch gar nicht so richtig über mögliche Vorgehensweisen nachgedacht hast.

    Warum hat mir niemand die inotify-Bibliothek vorgeschlagen. Mein momentaner Stand wäre, dass ich einen Ordner erstmal rüberkopiere und dann mit der inotify-Bibliothek auf Veränderungen checke und diese dann umsetze. Dazu noch ein Problem: Was, wenn eine Änderung vorgenommen werden soll und zum gleichen Augenblick man den Computer ausschaltet. Dann geht diese Änderung verloren. Und wie check ich das für den nächsten Programmstart?

    cpp_Jungspund schrieb:

    Wie ist die Infrastuktur der zu sichernden Maschinen?

    Sollte auf allen System laufen. Aber lass das mal meine Sorge sein, ist auch nicht so schlimm wenn es schlussendlich nur auf meinem System läuft. 😉

    Welche Dateien sollen gesichert werden?

    Dateien aller Art. Außer Block- und Character-Special-Dateien und so, ich weiß nicht ob die so einfach mir nichts dir nichts kopierbar sind.

    Welche Größe wird für die backups angesetzt?

    Für größere Dateien hab ich ne Art Vergleich/Kopier-Funktion geschrieben, die jeweils immer nur 4KiB ausliest und darauf rumoperiert.

    Wohin soll gesichert werden?

    Irgendwo hin 😉 Internet ausgeschlossen.

    Welches Protokoll soll zur Sicherung verwendet werden?

    Da ich mit meinem Dateiunterschied-Parser leider nicht so weit gekommen bin, am liebsten ein eigenes, einfacheres.

    Wie oft soll gesichert werden?

    Soll einstellbar ein.

    Welche Ausnahmeregeln existieren?

    Öhm... Ich muss auf Permission denied und Rekursion aufpassen. Und ein --follow-symlinks einbauen. Welche Ausnahmeregeln gibts denn sonst noch?

    Desweiteren hätte ich gerne ein Programm auf Dropbox-Niveau nur ohne Internet. Ich lass das mit dem Versioning mal außen vor, weil ist mir aktuell noch zu hart. Wie macht das die Dropbox eigentlich, dass die so schnell die Dateien synchronisiert kriegt? Ich hätts gern genauso flott. Mir fällt inotify ein, aber da gibt es noch einige Inkonsistenzen.



  • Das macht Hilfe nicht einfacher.... Ziemlich aussagelos, leider.


Anmelden zum Antworten