16.072014

Inkrementelle Backups mit Attic

Seit Jahren dreht die Festplatte des Heimrechners munter Ihre Scheiben zum Takt von Prozessorlüfter und CD-Laufwerk. Fällt irgendwann das unterschwellige Surren weg so dauert es nicht lange bis der nun stetig bleicher werdende Nutzer erkennt: Festplatte hinüber - meine Daten sind weg. Wild werden dann andere Speicherorte nach Backups durchforstet und immer wieder drängt sich eine Frage in den Vordergrund: "Warum habe ich keine regelmäßigen Backups erstellt?".

In Zeiten von Apples TimeMachine und Windows Dateiversionsverlauf fühlt sich der Linux-Nutzer etwas ausgeschlossen. Jede Distribution hat eine eigene Lösung zum Sichern der Daten und wer nicht auf Diensten wie DropBox und Google Drive vertrauen möchte tut sich schwer daran eine distributionsübergreifende Lösung zu finden.

In diesem kurzen Blogeintrag möchte ich Attic hervorheben. Attic ist ein ausgezeichnetes Tool um inkrementelle Backups zu erstellen und zu verwalten.

Attic ist ein Backup Programm, welches in Python geschrieben ist. Es unterstützt von sich aus Verschlüsselung von Backups und speichert die Daten nicht nur komprimiert sondern erkennt duplizierte Sequenzen in Dateien und nutzt diese Informationen um sehr effizient Dateien zu speichern. Kleine Änderungen an großen Dateien benötigen somit nur wenig Speicherplatz, selbst wenn es sich um Binärdaten handelt. Somit ließen sich theoretisch sogar inkrementelle Backups ganzer Festplatten Images erstellen.

Zunächst einmal muss Attic natürlich installiert werden. Moderne Distributionen bieten oft schon ein passendes Packet an, wer aber ein etwas angestaubtes Linux verwendet muss auch nicht lang probieren.

Attic benötigt Python >= 3.2 sowie msgpack-python >= 0.1.10 und OpenSSL >= 1.0.0

Die folgenden Beispiele sind mit Ubuntu 12.04 getestet. Zunächst installieren wir also Attic. Da ich Attic mittels pip installieren möchte und für Python3 keine entsprechende Version bereitsteht nutze ich VirtualEnv. Ein weiterer Stolpersteine der bei der Installation von Attic auftreten kann ist das Fehlen der Datei acl.h. Hierzu installiere ich auch noch libacl1-dev.

> apt-get install python3 python3-dev python-virtualenv libacl1-dev

Nun erstelle ich eine virtuelle Python Umgebung mit python3.2 und aktiviere diese. Danach installiere ich Attic:

> virtualenv -p python3.2 attic-env
> . attic-env/bin/activate
> pip install attic

Zunächst muss ein Repository (vergleichbar mit den Repositories bei Git) angelegt werden, in dem die Backups gespeichert werden. Das Verzeichnis kann natürlich an einem beliebigen Ort erstellt werden. Wir nutzen für dieses kleine Beispiel das Verzeichnis ./backup.attic

> attic init backup.attic

Attic unterstützt auch entfernte Repositories mittels ssh. Besonders schnell laufen diese, wenn Attic auch auf dem Zielrechner installiert ist. Andernfalls ist es natürlich immer möglich das entsprechende Ziel direkt zu mounten.

Nun erstellen wir unser initiales Backup. Der Vorgang dauert beim ersten mal, abhängig von der Datenmenge, recht lange. Die Syntax zum erzeugen eines einzelnen Backups in ein bestehendes Repository lautet:

attic create <repository>::<backup-name> <quellverzeichnis>/

Attic sichert rekursiv alle Daten beginnend mit dem Quellverzeichnis. Dem create Befehl kann auch mittels Parametern mitgeteilt werden, dass bestimmte Daten ignoriert werden sollen. Der Name des Backups sollte hierbei aussagekräftig gewählt werden (Etwa der Zeitpunkt des backups). Für unser Beispiel währe das dann:

> attic create backup.attic::2014-07-11 testdir/

Mit attic list kann man sich nun alle Backups eines Repositories anzeigen lassen und attic info trifft aussagen über einzelne Backups:

> attic list backup.attic

2014-07-11  Fri Jul 11 17:01:53 2014
> attic info backup.attic::2014-07-11

Name: 2014-07-11
Fingerprint: <FINGERPRINT>
Hostname: <HOSTNAME>
Username: konni
Time: Fri Jul 11 17:01:53 2014
Command line: attic create backup.attic::2014-07-11 testdir/
Number of files: <#FILES>

              Original size   Compressed size   Deduplicated size
This archive:      37.00 MB          36.54 MB            35.49 MB
All archives:      37.00 MB          36.54 MB            35.49 MB

Fügen wir nun einige Dateien dem Testverzeichnis hinzu und erstellen ein neues Backup, so ist leicht zu sehen, dass attic nur die neuen Information speichert:

> attic info backup.attic::2014-07-11-2

Name: 2014-07-11-2
Fingerprint: <FINGERPRINT>
Hostname: <HOSTNAME>
Username: konni
Time: Fri Jul 11 17:05:50 2014
Command line: attic create backup.attic::2014-07-11-2 testdir/
Number of files: <#FILES>

              Original size   Compressed size   Deduplicated size
This archive:      71.78 MB          67.57 MB            31.06 MB
All archives:     108.78 MB         104.11 MB            66.55 MB

Der list Befehl zeigt nun wie erwartet 2 Backups:

> attic list backup.attic

2014-07-11    Fri Jul 11 17:01:53 2014
2014-07-11-2  Fri Jul 11 17:05:50 2014

Möchte man nur eine bestimmte Anzahl an Backups vorrätig halten so hilft der prune Befehl. Um beispielsweise für den aktuellen Tag jeweils pro Stunde ein Backup, für jeden Tag der aktuellen Woche ein Backup und zusätzlich noch für jede der letzen 4 Wochen ein Backup vorzuhalten und die übrigen zu löschen:

attic prune -H 23 -d 7 -w 4 backup.attic

Praktisch wird das zusammenspiel von create und prune, wenn man einen passenden cronjob schreibt. Inspirieren kann man sich von der Attic Onlinedokumentation oder aber auch von Peter Olson Backup-Script

Zum Abschluss bleibt noch zu sagen, wie man wieder an die Backups rankommt. attic extract entpackt den Inhalt eines Backups in einen angegebenen Pfad während attic mount mittels fuse ein Backup direkt mounted.

Für eine vollständige Auflistung der Befehle lohnt sich ein Blick auf der Seite der Software: https://attic-backup.org

Und somit bleibt mir nur noch euch eine von nun an unbeschwerte Woche zu wünschen.