Während meiner unfreiwilligen letzten Tage Zuhause habe ich über meine Backupstrategie nachgedacht und einiges umgestellt. Vorher war es, joa, da. Aber weder gab es eine einheitliche Strategie noch eine zentrale Sammelstelle für die Backups. Meine neue Strategie nutzt etckeeper (Arch Wiki Link weil bessere Erklärung), restic, Gitea und Minio. Auf restic bin ich schon in zwei früheren Beiträgen (Gründe für und Umgang mit restic und Backup des Homedirs) ausführlich eingegangen. Die folgende Grafik beschreibt meine Vorgehensweise, um die es in diesem Beitrag gehen wird. Ziel war es, neben der Vereinheitlichung des Backups, auch dafür zu Sorgen, dass ein Backup immer mehrfach vorhanden ist und es eine zentrale Sammelstelle gibt.
etckeeper
etckeeper erstellt aus lokalen Ordnern ein Git Repository, in meinem Fall ist es auf jedem Server /etc, und weitere Ordner bei Bedarf. Vor jeder Änderung, wie z.B. System Updates, wird ein git commit erstellt. Natürlich lassen sich auch manuell commits machen. Zusätzlich wird nach jedem Commit automatisch zu einer selbst gehosteten Gitea Instanz gepusht. So habe ich eine vollständige Versionierung des /etc Ordners lokal sowie in Gitea.
Gitea
Natürlich muss auch von besagter Gitea Instanz ein Backup existieren. Sonst kann bei Verlust der Instanz kein System seine lokalen Git Repos mehr zentral pushen. Das lokale Backup wird per restic erstellt und das restic Repository wird mit dem Minio Client zu einer selbst gehosteten Minio Instanz gepusht.
restic
restic löst ab jetzt vollständig mein backupfolders Script ab. Dateien/Ordner, die nicht per Git versioniert werden (müssen) werden lokal mit restic gesichert. Das lokale Repository wird mit dem Minio Client zu meinem Minio Server gepusht.
Minio
Minio bietet eine Amazon S3 kompatible Schnittstelle an. Es dient bei mir als zentrale Sammelstelle aller restic Repositories. Minio legt dabei die Dateien unverändert auf dem Storage ab und man könnte die Daten so wie sie sind woanders hin schieben. In meinem Fall ist der Storage ein zfs Dataset. Leider fehlt mir noch eine Möglichkeit, diesen zentralen Storage an anderer Stelle zu sichern damit auch hiervon ein Backup existiert.
SQL Backups
Von MySQL und PostgreSQL Datenbanken mache ich weiterhin einen SQL Dump und speichere diesen in einem restic Repository. Die Scripte dazu gibt es wie gewohnt in meinem Scripts Github Repository (MySQL Backup / PostgreSQL Backup). Das restic Repository wird dann wie oben beschrieben mit dem minio Client zu meiner Minio Instanz gepusht.
Fazit
Meine neue Backupstrategie ist jetzt viel einfacher und einheitlicher. Nur die Sicherung des zentralen Backup Storage fehlt mir noch. Da an dieser Stelle nur verschlüsselte restic Repositories liegen, kann ich mir vorstellen, dass ganze entweder per zfs send zu einem anderen Host mit ZFS Datastore zu replizieren oder z.B. auf einen Online Storage (wie Wasabi) zu pushen.