2023 Restic Backup

2023-02-05 linux

In meinem Heim Netzwerk werkelt ein alter Mac Mini mit Debian Linux und Docker CE.

Im folgenden Artikel möchte ich euch zeigen wie ich restic verwende um unsere Apple Rechner zu sichern.

Restic verwende ich beruflich bereits seit einigen Jahren. Dabei gefällt es mir sehr das restic in GO geschrieben ist. GO Programme sind statisch compiliert und haben keiner weiteren Abhängigkeiten auf dem System auf dem sie laufen sollen.

Backup Target

Restic kann auf verschiedenste Backup Server sichern. Ich habe mich für rest-server entschieden. rest-server stammt auch vom Restic Entwickler und besteht aus einem einfachen Webserver der ausschließlich für Restic bestimmt ist.

Da Backups von Restic bereits auf dem Client verschlüsselt werden, ist keine weitere TLS Verschlüsselung nötig.

rest-server installiere ich als Docker Container als Compose Stack.

https://hub.docker.com/r/restic/rest-server

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
version: "3"
services:
  rest-server:
    container_name: rest-server
    image: restic/rest-server
    dns:
      - 192.168.9.1
    ports:
      - "9090:9090"
    environment:
      TZ: 'Europe/Berlin'
      OPTIONS: '--listen :9090 --no-auth --prometheus --prometheus-no-auth'
    volumes:
      - '/backup/restic:/data'
    restart: unless-stopped

Das Filesystem /backup ist eine externe 2TB USB Platte mit Ext4 formatiert.

Eingehangen wird die Disk über ihre UUID in der ``/etc/fstab```

Backup OSX

Zusätzlich zum TimeMachine Backup von OSX sichere ich mein Home Verzeichnis via Restic. So habe ich die Daten auch automatisch in einem anderen Bereich des Hauses abgelegt.

Von https://github.com/restic/restic/releases hole ich mir das Restic Binary für darwin_amd64 passend für mein Macbook Pro. Das Macbook meiner Frau läuft auf ARM M1 und bekommt somit die Version für darwin_arm64.

Platz fürs Backup ist ~/restic in meiunem Home Verzeichnis. Dort lege ich die folgenden Dateien an

  • ~/restic/repo enhält die URL zum rest-server Repository
  • ~/restic/pwd enthält das Passwort mit dem die Backups verschlüsselt werden
  • ~/restic/excludes enthält die Verzeichnisse die nicht gesichtert werden sollen
  • ~/restic/backup.sh fasst alle Operationen in einem Script zusammen
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
curl -I http://mini.fritz.box:9090/pitchfork/ > /dev/null
RC=$?

if [ "$RC" -gt "0" ];then
   osascript -e 'display notification "restic repo not reachable" with title "restic"'
fi

DIR=$( dirname -- "$0"; ) # Directory where this script is located
cd $DIR

FORGET="--keep-hourly 12 --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --keep-yearly 75"
OPT="--password-file pwd --repository-file repo"
EX="--exclude-file exclude"

osascript -e 'display notification "restic Backup started" with title "restic"'
./restic $OPT init
./restic $OPT $EX backup $HOME
./restic $OPT forget $FORGET 
./restic $OPT prune 
./restic $OPT snapshots 
osascript -e 'display notification "restic Backup done" with title "restic"'

Ablauf im Script

Zeile 2-7: Prüfen ob das Repository erreichbar ist und ggf. aussteigen

Zeile 9-10: Das Verzeichnis ermitteln in dem das Script gespeichert ist

Zeile 17: Das Repository initialisieren Zeile 18: Backup starten Zeile 19: Alte Backups löschen Zeile 20: Repository aufräumen Zeile 21: Snapshots ausgeben

osascript verwende ich für Desktop Nachrichten auf dem Mac

Das Script wird über cron nun stündlich aufgerufen. Ist das Repo erreichbar wird ein Backup ausgeführt und ein neuer Snapshot gespeichert

Forensik

Da ich nun stündliche Snapshots meines Home Verzeichnisses habe, erkennt man auch wo sich Daten ändern.

Über restic diff lassen sich zwei Snapshots vergleichen und man erkennt sehr schön was sich geändert hat.

Laufzeit

In meinem Home Verzeichnis liegen 60GB die restic vergleichen muss. Das dauert etwa 60 Sekunden. Gesichert wird dann nur was sich wirklich verändert.