Vor Datenverlusten schützen genau drei Maßnahmen:
Wer seine Daten nicht regelmäßig sichert, kann sie auch gleich löschen. Datensicherung dient dazu, verlorene Daten zurück zu holen oder ungewollt veränderte wieder herzustellen.
Von virtuellen Servern kann man Snapshots anfertigen, die sich im Fall von Datenverlusten vollständig oder teilweise wieder zurück sichern lassen. Daten auf Speichermedien können durch Kopien auf andere Speichermedien gesichert werden. Man kann Datenbestände immer komplett duplizieren oder nur jeweils ein Delta, also veränderte bzw. neu hinzugekommene Daten sichern (inkrementelle Sicherungen). Sinnvoll ist es, mehrere Sicherungen aufzubewahren, um bei einem erst später festgestellten Problem auf einen früheren Stand zurück sichern zu können. Hierbei ist zwischen dem Sicherheitsgedanken und den Speicherplatzanforderungen abzuwägen. Ich bewahre in der Regel 7 Sicherungen auf und kann so bis zu einer Woche recovern.
In meinem Fall gibt es folgende Sicherungsanforderungen:
Snapshots sind Momentaufnahmen von Servern. Die Konfiguration sowie der Inhalt aller oder einzelner Laufwerke eines Servers werden gesichert und der Server kann so wieder hergestellt werden. Proxmox bietet mit dem Proxmox Backup Server (PBS) eine komfortable Möglichkeit, virtuelle Maschinen und LXCs zu sichern und das vor allem zu automatiseren. Die Installation und Einrichtung des PBS ist hier beschrieben: Proxmox/Proxmox Backup Server. Ein Snapshot eines Servers, der nicht virtualisiert ist, erfordert 3rd-Party-Produkte. Das stelle ich zunächst zurück.
Laufwerke des Hosts, die an VMs durchgereicht wurden, können mit Snapshots der VMs nicht mitgesichert werden. Einen PBS habe ich einmal mit einer NAS-Freigabe von 4 TB gesprengt, obwohl die Freigabe nur Spurenelemente von Daten enthielt. Daher sichere ich solche Freigaben nun mittels Duplicati. Details zur Installation und Einrichtung einer Sicherung findet man hier: https://tutorials.kernke.koeln/serveranwendungen/duplicati.html
Für die Sicherung der Nextcloud-Daten habe ich folgendes ausgetüftelt: Zunächst dumpt der Nextcloud-Server einmal in der Nacht, getriggert per Cron die Datenbank lokal ab. Dann holt ein virtueller Server in meinem Netzwerk die Daten nachts per Rsync ab und dieser virtuelle Server wird mit dem PBS gesichert. Der Datenaustausch zwischen dem virtuellen Server ist natürlich per SSH-Key und VPN-Tunnel gesichert. Mittels Wireguard wird zunächst ein VPN-Tunnel zwischen dem Nextcloud-Server und dem virtuellen Server im lokalen Netzwerk hergestellt. Dann wird der SSH-Zugriff zwischen dem lokalen Server und dem Nextcloud-Server per SSH-Key eingerichtet, damit ein Datenaustausch ohne Passworteingabe möglich ist. Schließlich wird ein Cronjob definiert, der die Daten abholt. Das sieht zum Beispiel für die Daten in "/var/www/nextcloud" so aus:
0 3 * * * hanswurst rsync -avE -e "ssh -p 4711" hanswurst@172.33.0.1:/var/www/nextcloud /backup/ncbup
So werden die Daten aus dem Verzeichnis "/var/www/nextcloud" jede Nacht um 3:00 Uhr vom entfernten Nextcloud-Server abgeholt und in ein Verzeichnis "/backup/ncbup" gesichert. Das gleiche geschieht mit dem Data-Verzeichnis und dem DB-Dump. Diese Daten werden jeweils nur einmal auf dem lokalem Server vorgehalten. Von diesem werden aber 7 Snapshots vorgehalten. So habe ich auch von der Nextcloudsicherung bis zu 7 Versionen. Schlau, was?
Für den Fall, dass ein Katastrophenereignis das komplette Homelab zerstört, müssen wichtige Daten auch noch außerhalb der eigenen vier Wände gesichert werden. Wenn z.B. eine Atombombe Köln von der Landkarte tilgt, dann bleiben wenigstens meine Urlaubsfotos für die Nachwelt erhalten ;-)
Für Offsite-Sicherungen nehme ich duplicati, weil es verschlüsselte, komprimierte, inkrementelle Sicherungen ermöglicht. Zwar ermöglicht duplicati auch die Sicherung auf ein entferntes Sicherungsziel, es unterstützt aber kein SMB-Protokoll und für SFTP ist eine Authentifizierung mit SSH-Key ohne Passwort nicht möglich. Daher sichere ich in SMB-Shares auf dem entfernten Sicherungsziel, die ich über einen VPN-Tunnel im lokalen Netz gemounted habe. Details dazu sind im Artikel zu duplikati beschrieben: https://tutorials.kernke.koeln/serveranwendungen/duplicati.html