Vorgeschichte

Ich habe über viele Jahre hinweg eigentlich nur zwei Backup-Lösungen benutzt: Für Server war dies duplicity mitsamt dem Wrapper duply, und für PCs und Laptops, an die man eine (verschlüsselte) USB-Platte anstecken kann war dies rsnapshot.

Die Programme haben beide leicht unterschiedliche Szenarien bedient: Für meine Server war mir ein langes Vorhalten von Backups eher weniger wichtig, eine Woche hat mir da vollkommen ausgereicht. Was mir dagegen durchaus wichtig war - da Backup-Space bei mir immer eher knapp bemessen ist und meist auf irgendwelchen sehr billigen vServern liegt - war Kompression. Beides hat duplicity geleistet, und dank kurzer Vorhaltezeiten war es auch kein Problem wenn regelmäßig Metadaten neu synchronisiert werden mussten. Zudem laufen diese Backups mitten in der Nacht, somit ist mir die Geschwindigkeit herzlich egal.

Zuhause dagegen ist mir der Speicherplatz eigentlich egal, und ich habe da Daten auch stets lieber länger als kürzer aufgehoben, wofür sich rsnapshot mit seiner Funktion, Dateien mit Hardlinks zu synchronisieren, sehr geeignet hat. Durch den Wegfall der Kompression lief das Backup zudem deutlich schneller, was für mich dann schon relevant ist.

borgbackup für Server

Für meine Server habe ich mit BorgBackup eine derzeit gut funktionierende Lösung gefunden: Repository für die Backups ist wie erwähnt ein vServer mit einem unprivilegierten Benutzer. Dieser wird doppelt abgesichert, zunächst einmal über einen match-Block in der globalen /etc/ssh/sshd_config:

1
2
3
4
5
6
# BEGIN: match User borgbackup
Match User borgbackup
    ForceCommand borg serve --restrict-to-path ~
    KbdInteractiveAuthentication no
    PasswordAuthentication no
# END: match User borgbackup

Und zum anderen durch einen Eintrag in seiner ~/.ssh/authorized_keys:

1
command="borg serve --restrict-to-path ~/main" ssh-rsa AAAA[...]

Das eigentliche Backup-Skript, kondensiert auf das wichtigste, sieht folgendermaßen aus:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
borg create                         \
    --verbose                       \
    --stats                         \
    --show-rc                       \
    --compression lzma,6            \
    --exclude-caches                \
    $HOST_EXCLUDES                  \
                                    \
    ::'{hostname}-{now:%Y-%m-%d}'   \
    /etc                            \
    /home                           \
    /root                           \
    /opt                            \
    /srv                            \
    /usr/local                      \
    /var/cache/debconf              \
    /var/spool/cron                 \
    /var/spool/postfix              \
    $HOST_INCLUDES

borg prune                          \
    --verbose                       \
    --list                          \
    --prefix '{hostname}-'          \
    --show-rc                       \
    --keep-daily    7               \
    --keep-weekly   4               \
    --keep-monthly  6               \

Bisher funktioniert das ganz gut, und ich hatte auch mit der Größe der lokal vorliegenden Chunk-Caches noch kein Problem.

Die Verschlüsselung der Backup-Repositories überlasse ich hierbei übrigens BorgBackup: Das entsprechende Secret ist Teil eines crypto-Volumes, welches ich nach einem Reboot per Hand entsperren muss und welches danach via 9p an alle VMs weiter gereicht wird.

Zur Geschwindigkeit kann ich dagegen nicht wirklich etwas sagen, das läuft wie erwähnt alles mitten in der Nacht.

restic für “dahoam”

Zu Hause verwende ich für Backups seit Kurzem restic. Die Backups speichert restic dabei auf einer externen, LUKS-verschlüsselten USB-Festplatte. Das erlaubt mir, für die Passphrase einfach ein Textfile zu verwenden - gelingt es jemandem, die externe Backup-Platte zu entschlüsseln, dann habe ich sowieso schon “verloren”.

Der Kern des restic-Aufrufs sieht dabei seinem Kollegen BorgBackup nicht unähnlich:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# backup
sudo restic -r $repo --password-file $passwordfile backup \
  --files-from $includefile \
  --exclude-file $excludefile\
  --exclude-caches

# cleanup
sudo restic -r $repo --password-file $passwordfile forget \
  --hostname $HOSTNAME \
  --keep-weekly 12 \
  --keep-monthly 36 \
  --keep-yearly 10

Ich bin von der Geschwindigkeit von restic bisher wirklich sehr angetan und kann es hier wie gesagt verschmerzen, keine Kompression zu haben.

Ich hoffe, damit meine Backups nun erstmal halbwegs im Griff zu haben. Als zusätzliche Maßnahme sichere ich mir alle paar Monate noch meine Cloud-Inhalte (dank Google Takeout nicht besonders schwer), Photos von meinem Handy/Tablet usw. usf.

Und bisher war ich auch schon mehrmals sehr glücklich, Backups zu haben :-)