Linux: Serverbackup – verschlüsselte & inkrementelle Sicherung mit Duplicity

Ein Grundsatz beim Betreiben eines Servers oder Datenspeichers lautet: Backup, Backup, Backup. Auch wenn der Server monate- oder jahrelang ohne Ausfälle läuft, kann der Ausfall und Datenverlust schneller eintreffen als Gedacht. Gerade in Momenten, wo ein Server und dessen Hardware stark beansprucht wird, kommt es gerne nach längeren Laufzeiten zu hardwareseitigen, als auch softwareseitigen Ausfällen. Liegt kein Backup vor, ist die Katastrophe perfekt! Festplatten-Ausfälle sind meist die Ausnahme, vor allem da heutzutage jeder Server mit mehreren Festplatten in einem RAID-Verbund ausgestattet ist. Vielmehr werden Bedienungsfehler oder ein unachtsames Kommando mit einem Root-User unter Linux zum Verhängnis und plötzlich sind Daten verloren. Bildersammlungen, Musikarchive, (MySQL-)Datenbanken oder auch Internetseiten sind von jetzt auf gleich komplett gelöscht. Würde ein Backup vorliegen, wären die Daten in überschaubarer Zeit wiederhergestellt.

Nicht nur ein Backup zählt, sondern regelmäßige Backups und inkrementelle Backups beugen solchen Katastrophen des Datenverlustes vor. Für Serverbetreiber ist ein automatisches Backup Pflicht, um im Fehlerfall schnell wieder den gewohnten Service und Datenbestand zur Verfügung zu stellen.

Ein geeignetes Backup-Tool unter vielen ist die Software "Duplicity" und steht in vielen Paketquellen von Linux-Distributionen wie Ubuntu, Debian, etc. zur Verfügung. Der große Vorteil von Duplicity ist, dass das Backup über zahlreiche Transferprotokolle übertragen werden kann. Unterstützt werden Protokolle wie HTTP, FILE, FTP, IMAP(S), RSYNC, SCP, Amazon-S3, SSH, WEBDAV, und viele Weitere.
Die Sicherheitskomponente wird ebenfalls mitgeliefert, denn alle erzeugten Backups mit Duplicity werden mit einem GPG-Schlüssel versehen und damit verschlüsselt. Wer seine Backups dann über ein Protokoll wie SCP, RSYNC, SSH oder HTTPS an den Backup-Server überträgt, brauch sich keine Sorgen um das Abhören / Lauschen des Datentransfers zu machen.

Das Einsparen von Speicherplatz und Datenverkehr (Traffic) auf und zu dem Backup-Server spielt auch eine große Rolle. Ein tägliches FULL-Backup erzeugt oftmals sehr viel Datenverkehr und belegt schnell mehere TerraByte an Speicherplatz. Auch hier ist Duplicity eine gute Wahl, denn die Backup-Software unterstützt inkrementelle Backups und es lassen sich nach einem definierten Zeitraum bzw. einer Zeitspanne, z.B. 1 Monat, ein neues FULL-Backup erstellen. - Und das alles automatisiert.

Duplicity unter Linux (Ubuntu/Debian) installieren

Das Paket "duplicity" kann direkt aus den Paketquellen wie zum Beispiel Ubuntu und Debian Canonical installiert werden. Sofern der Datenverkehr zum Backup-Server über ein FTP-Protokoll statt finden soll, muss noch das Paket "ncftp" dazu installiert werden.

sudo apt-get install duplicity
sudo apt-get install ncftp

Einfaches Backup des Verzeichnis "/etc" und Transfer via FTP

export PASSPHRASE=SELFGENERATEDUNIQEPASSPHRASEFORGPGENCRYPTION
export FTP_PASSWORD=FTPUSERPASSWORD
duplicity /etc ftp://ftpuser@ftp.domain.tld/etc
unset PASSPHRASE
unset FTP_PASSWORD

Die "PASSPHRASE" ist ein langer selbst generierter Schlüssel, der für die Verschlüsselung des Backups mit Duplicity genutzt werden soll. Es ist zu empfehlen den Schlüssel länger als 12 Zeichen zu wählen. Für den Datenverkehr wird der FTP-Benutzername "ftpuser" und das FTP-Passwort "FTP_PASSWORD" benötigt. Das FTP-Passwort wird in eine Variable gespeichert, damit es beim Transfer nicht via "top" oder "ps aux" auslesbar ist. Der Befehl "duplicity" führt das Backup mit den gegebenen Parametern durch. Gesichert wird in diesem Beispiel der Ordner "/etc".

Wiederherstellung einer Datei aus dem Backup mit Duplicity:

export PASSPHRASE=SELFGENERATEDUNIQEPASSPHRASEFORGPGENCRYPTION
export FTP_PASSWORD=FTPUSERPASSWORD
duplicity --file-to-restore etc/rc.local ftp://ftpuser@ftp.domain.tld/etc /home/yourUser/rc.local
unset PASSPHRASE
unset FTP_PASSWORD

Wiederherstellung eines Verzeichnisses aus dem Backup mit Duplicity:

export PASSPHRASE=SELFGENERATEDUNIQEPASSPHRASEFORGPGENCRYPTION
export FTP_PASSWORD=FTPUSERPASSWORD
duplicity etc/ ftp://ftpuser@ftp.domain.tld/etc /home/yourUser/myBackupFolderForETC
unset PASSPHRASE
unset FTP_PASSWORD

Backup von vor 3 Tagen wiederherstellen (Parameter -t)

export PASSPHRASE=SELFGENERATEDUNIQEPASSPHRASEFORGPGENCRYPTION
export FTP_PASSWORD=FTPUSERPASSWORD
duplicity -t 3D etc/ ftp://ftpuser@ftp.domain.tld/etc /home/yourUser/myBackupFolderForETC
unset PASSPHRASE
unset FTP_PASSWORD

Ein sehr ausführliches Backup-Skript ist in dem Wiki von Hetzner zu finden.

Die Option –full-if-older-than erstellt nach der angegebenen Zeitspanne automatisch ein neues Full-Backup. Ist der Zeitraum zum letzten vollständigen Backup noch nicht überschritten, werden weiterhin inkrementale Backups erstellt. Der Parameter "remove-older-than" aus dem Duplicity Skript von Hetzner, sorgt dafür, dass Backups die älter als 2 Monate sind, gelöscht werden.

Dateien oder Verzeichnisse, die vom Backup ausgeschlossen werden sollen, werden in dem Duplicity-Skript mit dem Parameter "exclude-filelist" an Duplicity übergeben.
Es ist möglich für jedes Verzeichnis eine Ausschlussliste anzulegen. Für das Wurzelverzeichnis (/) sind die Ausschlüsse in der Datei /usr/local/etc/duplicity-exclude.conf abgelegt. Für alle weiteren Verzeichnisse unter /usr/local/etc/duplicity-exclude-$DIR.conf Zum Beispiel für das "Home-Verzeichnis" in "/usr/local/etc/duplicity-exclude-home.conf".

Beispiel einer Ausschlussliste für "/":
- /dev
- /proc
- /sys
- /tmp
- /etc
- /home
- /srv
- /var/cache

Inkrementelle Sicherung automatisch (jede Nacht) ausführen

Für automatische und regelmäßige Backups mit Duplicity eignet sich ein täglicher Cronjob. Das Bash/Shell-Skript kann unter /etc/cron.daily (täglich), /etc/cron.weekly (wöchentlich) oder /etc/cron.monthly (monatlich) abgelegt werden. Für den Ausführzeitpunkt kann auch eine Crontab (cron.d) verwendet werden. Dazu muss eine Datei unter /etc/cron.d/ erstellt werden.
Der Beispiel-Cronjob wird jede Nacht um 00:05 Uhr ausgeführt.

# /etc/cron.d/duplicity-backup
0 5 * * * root /usr/local/sbin/duplicity-backup.sh >/dev/null 2>&1

Tags: , , , , , , , ,

Hinterlasse eine Nachricht