Ich verwende seit kurzem Restic (Restic auf Github) für einen Teil meiner Backups und bin bisher sehr zufrieden .
Vorgeschichte:
Ich wollte neben meinen „normalen“ Backups, welche ich auf einem NAS im LAN speichere, auch Geo-Redundanz für den Fall das mir mal die Bude abbrennt.
Zumidest von den wichtigsten Dingen (z.B.: Familenfotos & Videos, Dokumente, etc.) sollte ein externes Backup vorhanden sein.
Überlegungen:
Nun ist es aus Sicht des Datenschutzes schlecht die Daten unverschlüsselt einfach in die Cloud zu laden.
Es ist recht schwer einen vertrauenswürdigen Dienst zu finden und wirklich sicher was mit den Daten gemacht werden ist man nie.
Warum Restic?
Restic bietet:
- Verschlüsselung der Daten
- Deduplizierung
- immer Vollbackups
- man kann Snapshots auch per z.B.: SFTP lokal mounten
- verdammt schnell
- Verifizierung der Daten mit Hashsummen
- leicht zu konfigurieren
Installation
Eine gute Installationsanleitung findet man [Hier]
Ich verwenden am liebsten Git für so etwas:
$ git clone https://github.com/restic/restic
$ cd restic
$ go run build.go
Wenn man nun die, bei der Installation, entstandene Binary nach /bin kopiert ist das Tool systemweit verfügbar.
Einrichten des Backups
Um das Backup auf dem Backend (egal ob lokal oder remote) einzurichten, verwendet man:
lokal:
restic init --repo /Pfad/zum/backup
remote:
restic -r sftp:remoteserver.tld:/Pfad/zum/backup init
Bei der Einrichtung wird auch das Passwort zum Verschlüsseln gesetzt.
WICHTIG: Dieses Passswort ist extrem wichtig und sollte auf keinen Fall verloren gehen, da sonst kein Zugriff auf die Backups möglich ist.
Daten sichern
Um nun ein Backup eines Orfners zu erstellen, verwendet man:
lokal:
restic -r /Pfad/zum/backup backup ~/work
remote:
restic -r sftp:remoteserver.tld:/Pfad/zum/backup backup ~/work
Die Dauer des Backup-Vorgangs richtet sich nach der Größe und Bandbreite zum Backup-Standort.
Auflisten der Snapshots
Um zu prüfen welche Backups vorhanden sind, verwendet man:
lokal:
restic -r /Pfad/zum/backup snapshots
remote:
restic -r sftp:remoteserver.tld:/Pfad/zum/backup snapshots
Mounten des Backups
Eine sehr tolle Funktion ist das Mounten des Backups, selbst von entfernten Servern.
Dies ist vor allem dann wichtig, wenn man z.B. nur eine Datei benötigt und nicht das komplette Backup wiederhergestellt haben möchte.
lokal:
restic -r /Pfad/zum/backup mount ~/tmp/meinbackup
remote:
restic -r sftp:remoteserver.tld:/Pfad/zum/backup mount ~/tmp/meinbackup
Wiederherstellen des Backups
Der wohl wichtigste Punkt ist die Wiederherstellung der Daten vom Backup.
Dies geschieht mit:
lokal:
restic -r /Pfad/zum/backup restore latest --target /tmp/restore-art
remote:
restic -r sftp:remoteserver.tld:/Pfad/zum/backup restore latest --target /tmp/restore-art
Ich habe hier natürlich nur die rudimentärsten befehle aufgelistet. Man kann natürlich noch exclude, hosts, etc. hinzufügen…
Eine ausführliche Anleitung mit den möglichen Optionen findet man in der Dokumentation
Enviroment Variablen festlegen
Wenn man ein Backup-Script verwenden möchte, dass selbstständig Backups macht, dann ist es nicht sinnvoll jedes Mal das Passwort für das restic-Repository eingeben zu müssen.
Man kann den Backup-Pfad und das restic-Passwort auch als Eviroment-Variable anlegen, damit diese dann im entsprechenden Shell-Script verwendet werden können.
Wenn man dies global für den Benutzer tun möchte, dann trägt man folgende Zeilen in die entsprechende .bashrc des Benutzers ein:# Repo definieren und PW hinterlegen
export RESTIC_REPOSITORY=/home/backup
export RESTIC_PASSWORD=12345678
#Was soll gesichert werden?
backup_pfad=/media/NAS
Alternativ kann man das natürlich auch nur im Shell-Script selber so hinterlegen.
Der entsprechende Befehl zum starten des Backups wäre dann: restic -r $RESTIC_REPOSITORY backup $backup_pfad