Samstag, 27. Juni 2015

Aufbewahrung von Versionen mit rsync

Für die Sicherung meiner Daten nutze ich rsync. Ich habe dazu 2 Skripte:

  1. rsync aller wichtigen Datenverzeichnisse von meinem Notebook per SSH auf einen Server, der bei mir zu Hause steht. Diese Sicherung führe ich häufig durch.
  2. Der Server verfügt über 2 identische Platten, von denen jedoch normalerweise nur eine eingebaut ist. Die andere liegt an einem sicheren Ort. Hin und wieder hole ich die zweite Platte, stecke diese ein und führe dann mit rsync einen Abgleich von der ersten auf die zweite Platte durch. Danach geht die Platte wieder zurück auf den Lagerplatz.

Falls hier wirklich mal die ganz Bude abbrennen sollte kann ich mit der Offline-Platte zumindest wieder an einem definierten Punkt beginnen. Ich hoffe natürlich, dass ich die nie brauche.

Seit ich mein eigenes Document Management System einsetze und den überwiegenden Teil der Papierdokumente vernichte hat sich mein Anspruch an die Datensicherung etwas erhöht. Bisher löscht rsync gelöschte Dateien auch in der Sicherung (Option --delete). Geänderte Dateien werden in der Sicherung einfach überschrieben.
Ich wollte nun eine minimale Versionierung in der Sicherung haben.

GIT


Ich habe erst einen Versuch mit GIT gemacht. Das Erstellen eines lokalen Repositories ist ganz einfach und das initiale Hinzufügen der bereits vorhandenen Dateien ebenfalls. Danach wird es aber schwieriger:

  1. Neu hinzugekommene Dateien müssen mit git add XYZ in das Repository aufgenommen werden
  2. Gelöschte Dateien müssen mit git rm XYZ aus dem Repository entfernt werden
  3. Zum Festschreiben aller Änderungen muss außerdem ein git commit aufgerufen werden.

Die ersten beiden Punkte bedeuten Zusatzaufwand für jede Datei und das ist beim Umgang mit Dokumenten nicht praktikabel.

rsync --backup und --backup-dir


Ich bin dann auf zwei rsync Optionen gestossen:

  1. --backup: Weist rsync an, Sicherungskopien geänderter und gelöschter Dateien zu erstellen
  2. --backup-dir: Gibt an in welchem Verzeichnis die Kopien abgelegt werden. Das Verzeichnis ist relativ zum Zielpfad

Ich habe mein rsync Skrip entsprechend angepasst:


# Datum ermitteln fuer backup change Verzeichnis
DATE=`date +%Y_%m_%d-%H_%M_%S`
REVISION_DIR="revisions_$DATE"

# rsync starten (mit --backup und --backup-dir)
rsync -e ssh -avzP --delete --backup --backup-dir=$REVISION_DIR /home/peter/DocumentManagement/archiv peter@parmesan:/data/disk1/home/peter/archiv_backup/


Zunächst wird ein Verzeichnisname für das BACKUP-DIR erzeugt. Über date +%Y_%m_%d-%H_%M_%S wird dazu Datum+Uhrzeit in eine Variabel geschrieben. REVISION_DIR enthält den fertigen Verzeichnisnamen.
Das Listing des Sicherungsverzeichnis auf dem Server sieht so aus:

peter@parmesan:~/archiv_backup$ ls -1
archiv
revisions_2015_06_27-22_05_28
revisions_2015_06_27-22_06_35

Im Unterverzeichnis archiv befindet sich der aktuell gesicherte Stand. Die revisions_... Unterverzeichnisse enthalten jeweils geänderte und gelöschte Dateien des jeweiligen Sicherungslaufs. rsync baut auch in den BACKUP-DIRs die gesamte Verzeichnisstruktur bis zu den entsprechenden Files auf.

FAZIT: Über die rsync Optionen --backup und --backup-dir konnte ich meine Sicherung so anpassen, dass generell keine Dateien überschrieben oder gelöscht werden.
Für jeden Sicherungslauf wird ein Backup-Verzeichnis erstellt und dort werden die Ursprungsversionen aller veränderten und gelöschten Dateien gesichert.

2 Kommentare:

  1. Bei rsync-Backups finde ich Hardlinks auch eine sehr nette Geschichte. Dann gibt man ein Referenz-Verzeichnis an (z.B. das des Vortags) und dann werden die Dateien nicht X-mal kopiert sondern bei Gleichheit nur mit einem Hardlink aneinandergebunden. Der Inhalt verschwindet dann wenn der letzte Hardlink entfernt wird. Damit sparen wir bei den Serverbackups Platz ohne Ende, da sich ja in den meisten Fällen die Dateien nicht ändern. Und trotzdem haben wir ein konsistentes Backup.

    AntwortenLöschen
  2. Habe mich an die Hardlink Optionen nicht rangetraut. Aber anhand Deines Kommentars habe ich es verstanden. Das Ergebnis ist ähnlich mit folgendem Unterschied:

    1. Mit der von mir eingesetzten Lösung (Optionen --backup und --backup-dir) exisiert am Ziel immer nur ein vollständiges Verzeichnis mit dem Stand des letzen rsync.
    Die revisions_... Verzeichnisse enthalten nur die Dateien, die beim ensprechenden rsync entfernt oder verändert wurden.

    2. Bei der Hardlink Variante würde jeder rsync eine vollständige Verzeichnisstruktur (mit Timestamp im Namen) aufbauen.
    Gleiche Dateien sind aber nur einmal im Dateisystem gespeichert und werden über Hardlinks mehrfach referenziert.

    Der belegte Speicherplatz müsste bei beiden Varianten ähnlich sein.

    AntwortenLöschen