Drücke „Enter”, um zum Inhalt zu springen.

Beiträge verschlagwortet als “Backup”

Backup Schritt 2+3: Vergleichen und Auswählen

Jan 0

Heute gibt es mal wieder was zu sehen. Nachdem ich das letzte Mal den Grundstein für meine Backup-Software gelegt habe, ging es jetzt darum, Stück für Stück die Software zu erweitern. Schritt 2 sieht vor, dass ich überprüfen möchte, ob meine Sicherung erfolgreich war. Wie macht man das am besten? Einfach vergleichen, ob die Dateigröße übereinstimmt? Nein, dass ist zu simpel - ich möchte wirklich sicher sein. Meine erste Idee war, dass ich beide Dateien (aus Quelle und Ziel) wirklich Byte für Byte miteinander vergleiche. Aber eine kleine Internetrecherche brachte mich auf eine andere Idee: Aus dem Inhalt beider Dateien einen MD5-Hash berechnen und den miteinander vergleichen. Die Chance, dass hier das Gleiche entsteht, ist zwar vorhanden, aber mit dem Risiko kann ich leben. Außerdem habe ich dann die Möglichkeit wenn ich später noch das inkrementelle Backup einbaue, dass ich an jedes Paket eine Datei mit den MD5-Hashes anhänge und mir den Vorteil erkaufe, nicht nur nachsehen zu müssen, ob an der Datei geändert wurde, sondern auch inhaltliche Änderungen registriere.

Und dann war mal wieder die Oberfläche dran. Ich musste wieder einige Klassen in meine gemeinsam genutzte Bibliothek verschieben, Namespaces korrigieren und dann konnte ich mich darum kümmern, dass ich das Quellverzeichnis auswählen kann. Und nun das Ergebnis von Schritt 3: Ich kann das Quellverzeichnis auswählen:

Im Zusammenhang mit dem MD5-Hash ist mir natürlich aufgefallen, dass ich da etwas mit dem Feuer spiele. Denn wenn ich große Dateien (z.B. 1GB) miteinander vergleiche, dann steigt mir das Programm mit einem Fehler aus: Out of memory. Bei 16GB Hauptspeicher etwas merkwürdig, aber um solche Fehler will ich mich erst kümmern, wenn das Backup bei mir in Echtbetrieb geht.

Backup Schritt 1: Einfach mal sichern

Jan 0

Ich habe mir am Sonntag ein bisschen Zeit genommen und mit der Programmierung angefangen. Klingt doch gar nicht so kompliziert: mal einen Ordner kopieren. Am Anfang habe ich erstmal ein paar Komponenten, die ich schon in der Plattenverwaltung verwende, in eine gemeinsam genutzte Bibliothek verschoben und musste natürlich in der Plattenverwaltung ein paar Referenzen korrigieren. So nach 2-3 Stunden hatte ich dann eine Oberfläche mit einem Button und eine wieder funktionierende Plattenverwaltung.

Für den Anfang stand ja folgendes fest:

  • kein Oberflächen-Schnick-Schnack - Button und fertig
  • Quelle und Ziel sind im Code verankert
  • Backup läuft synchron, d.h. keine Aktualisierung der Oberfläche während kopiert wird

Datenmodell brauchte ich diesmal nicht und konnte gleich loslegen. In meinem Kopf stiegen die Aufgaben wie kleine Bläschen hoch. Verzeichnis rekursiv auslesen, Liste von Dateien erstellen, Dateien kopieren. Schon allein für das Auslesen gibt es mehrere Wege und Strategien. Ich entschloss mich für die ausführliche Version, die mir zu einer Datei gleich die Attribute (Ist ein Verzeichnis? Ist eine temporäre Datei?) mitliefert. Strategie ist "Tiefe zuerst", d.h. erstmal alle Verzeichnisse durchklappern und dort die Dateien einsammeln. Dann wurde es kurz kniffelig. Ich musste ja den Quellpfad nehmen und mit dem Zielpfad mischen. Also wenn ich z.B. den Ordner C:\Users\jan\Pictures nach E:\ sichern will, muss ich die Datei C:\Users\jan\Pictures\Island\tolles_bild.jpg nach E:\Pictures-2016-09-14_19-34\Island\tolles_bild.jpg kopieren. An der Stelle vielen mir drei Szenarios ein: 1. Verzeichnis nach Verzeichnis (easy - der Standardfall), 2. Verzeichnis nach Laufwerk (etwas Spaß mit den Pfadtrennern, aber auch noch einfach) und 3. irgendwas mit Netzwerkpfaden (erstmal nicht ausprobiert). Dass an den Zielpfad das Datum und die Uhrzeit rangeklebt wird, ist zwar etwas vorgegriffen, aber dann hab ich es schon mal drin.

Damit es überhaupt was zu sehen gibt, schon mal die Code-Map des Projekts. Momentan noch sehr übersichtlich...

Handmade Backup

Jan 0

Seit dem Desasterumbau in meinem Rechner, habe ich jede Woche ein Backup zu laufen. Manche Daten sichere ich wöchentlich, manche monatlich. Viele Sicherungen - gerade bei den Fotos - laufen inkrementell. Trotzdem kommt es immer mal vor, dass mehrere Vollsicherungen zu einem Zeitpunkt anstehen. Ich hocke nun auch nicht den ganzen Tag vor dem Rechner, um Backups laufen zu lassen, d.h. ich breche die Sicherungsaufträge ab, weil ich sie später wiederholen möchte. Auch wenn ich den Haken bei "Sicherung wiederholen" in meiner Backup-Software gesetzt habe, wird die Sicherung nicht wiederholt. Was zur Folge hatte, dass ich nachfragte, warum denn die Sicherung nicht wiederholt wird. Als Antwort kam: Wenn der Auftrag gestartet wurde, gilt die Sicherung als gemacht. Entschuldigung, aber häää? Ich schrieb eine Antwort, die besagte, dass ich eine erfolgreiche Sicherung möchte und nicht eine gestartete Sicherung. Nach der Aussage kam nichts mehr...

Und nun? Selbst ist der Entwickler, also starte ich ein neues Projekt: meine eigene Backup-Software. Wie auch bei meiner Plattenverwaltung zählt hier - die Software soll meine Wünsche erfüllen und wer Lust hast, kann sie gern benutzen. Also habe ich mich mal hingesetzt und aufgeschrieben, wie ich meine Backup-Software schrittweise aufbaue:

  1. Ich möchte einen Ordner auf ein anderes Laufwerk sichern.
  2. Ich möchte Quelle und Ziel nach dem Backup miteinander vergleichen und sicher sein, dass beide identisch sind.
  3. Ich möchte den Ordner auswählen, den ich sichern möchte.
  4. Ich möchte das Ziellaufwerk auswählen, wo ich hinsichern möchte.
  5. Ich möchte die Konfiguration beim nächsten Programmstart zur Verfügung haben.
  6. Ich möchte einen Hinweis erhalten, wenn das Ziellaufwerk nicht zur Verfügung steht.
  7. Ich möchte den Fortschritt des Auftrags kontrollieren können.
  8. Ich möchte den Auftrag abbrechen können.
  9. Ich möchte den Status des letzten Auftrags einsehen können (erfolgreich, abgebrochen, fehlerhaft).
  10. Ich möchte mehrere Aufträge mit Konfiguration (Quelle, Ziel) anlegen können.
  11. Ich möchte, dass das Backup zu einer bestimmten Uhrzeit monatlich startet.
  12. Ich möchte, dass der Auftrag wiederholt wird, wenn er nicht erfolgreich durchgeführt wurde.
  13. Ich möchte die Uhrzeit einstellen können und in meinem Auftrag hinlegt haben.
  14. Ich möchte das Intervall einstellen und mit dem Auftrag speichern können.
  15. Ich möchte auf dem Ziellaufwerk Platz sparen und die Sicherung in einer komprimierten Datei ablegen.
  16. Ich möchte die Anzahl meiner Sicherungen limitieren, d.h. alte Sicherungen werden entfernt.
  17. Ich möchte die Anzahl der verbleibenden Sicherungen in meinem Auftrag hinterlegen können.
  18. Ich möchte eine inkrementelle Sicherung erstellen, bevor die nächste Vollsicherung gemacht wird.
  19. Ich möchte die Anzahl der inkrementellen Sicherungen einstellen und mit meinem Auftrag speichern.

Klingt erstmal überschaubar, aber trotzdem steckt da eine ganze Menge Arbeit dahinter.

WordPress Cookie Hinweis von Real Cookie Banner