Konzept für ein regelmäßiges System Backup

Veröffentlicht

Ausganssituation

Lange Zeit habe ich nach einem Backup-Konzept gesucht, das meinen Ansprüchen gerecht wird. Leider ohne Erfolg. Das war auch für meine privaten Projekte natürlich nicht akzeptabel. Nachdem ich in meinen Raspberry Pi mittlerweile ziemlich viel Arbeit gesteckt habe, möchte ich diese natürlich nicht wieder verlieren. Beispielsweise läuft darauf ein kleiner Smart Home Server. Also habe ich mir kurzerhand ein eigenes Konzept zur regelmäßigen Erstellung von Backups zusammengestellt und umgesetzt. In den folgenden Abschnitten werde ich dir beschreiben, wie ich dabei vorgegangen bin regelmäßig ein Linux System Backup zu generieren und werde auch alle Skripte und Befehle bereitstellen.

Bei Fragen oder Anregungen kannst du mir dazu gerne einen Kommentar hinterlassen.

NFS bereitstellen

Als Speicherort für die Backups kommt bei mir eine Synology DiskStation als NAS zum Einsatz. Natürlich gibt es auch noch Alternativen von Qnap, Western Digital und Anderen. Da ich jedoch ein Modell von Synology verwende, werde ich anhand dessen die Vorgehensweise beschreiben.

  1. Im ersten Schritt muss du ein Verzeichnis in „Gemeinsamer Ordner“ anlegen. Gehe dazu in Systemsteuerung -> Gemeinsame Dateien -> Gemeinsamer Ordner. Hier klickst du auf „Erstellen“ und kannst anschließend einen Namen vergeben, sowie einige Parameter setzen. Für das Beispiel kannst du erst einmal alles  in den Standard-Einstellungen belassen und den Ordner „backup“ nennen.
  2. Nun muss du festlegen, von wo im lokalen Netzwerk auf dein neu erstelltes „Network File System“ (kurz NFS) zugegriffen werden darf. Natürlich sollte die Adresse, die du hier eingibst der deines Systems entsprechen mit dem du später auf den NFS zugreifen möchtest. Die einfachste Möglichkeit ist über die Freigabe einer IP-Adresse. Du kannst aber auch mit Platzhaltern und Netzwerksegmenten arbeiten. Klicke also auf deinen neu erstellten Ordner und anschließend auf Bearbeiten. Ein neues Fenster öffnet sich, in dem du in den Tab „NFS-Berechtigungen“ navigierst. Wenn dein System, das die Backups erstellen soll, eine feste IP Adresse hat, genügt es diese hier einzutragen.
syno_backup_nfs
syno_backup_nfs_permission

Damit hast du es auch schon geschafft. Dein System ist nun in der Lage diesen Ordner zu mounten.

NFS mounten

In diesem Schritt wechselst du zu deinem Linux System von dem du regelmäßige Backups erstellen möchtest. Wenn es über eine visuelle Ausgabe verfügt, kannst du das natürlich ganz einfach darüber machen. Verwendest du hingegen, wie ich, einen Raspberry Pi ohne visuelle Ausgabe, dann kannst du dich von einem anderen Rechner im selben Netzwerk per SSH (sofern du es auf deinem Ziel System konfiguriert hast) damit verbinden. Arbeitest du auf einem Unix-System, dann orientiere dich dabei einfach an Code 1, wobei du den User und IP-Adresse getrennt durch ein „@“ verwendest. Die Buchstaben x und y musst du durch die IP-Adresse eine Linux Systems ersetzen.

Code 1 – SSH Verbindung aufbauen

ssh pi@192.168.xxx.yyy

Anschließend wirst du aufgefordert das Kennwort des Users einzugeben. Wundere dich nicht. Während deiner Passwort-Eingabe wird in dem Terminal nichts erscheinen. Das normal. Meldest du dich das erste Mal auf diesem System an, musst eventuell noch zustimmen, um dem System zu vertrauen.

Erstelle nun ein Verzeichnis, in dem du das NFS mounten möchtest. In diesem Beispiel kannst du, wie in Code 2 beschrieben, einfach ein Verzeichnis /mnt/backup erstellen.

Code 2 – Verzeichnis für Backups erstellen

mkdir /mnt/backup

Als nächstes kannst du mit dem Mounten des NFS für dein System Backup fortfahren. Damit dies direkt bei Start deines Systems gemacht wird, kannst du mit Code 3 „fstab“ öffnen und hier deinen zu mountenden NFS eintragen.

Code 3 – Öffne fstab in Editor

sudo nano /etc/fstab

Mit diesem Befehl öffnet sich ein Texteditor, in dem die Informationen deines zuvor erstellten NFS Verzeichnisses auf deinem NAS einträgst. Anschließend sollte deine fstab in etwa aussehen, wie in Code 4. Die Buchstaben x und z müssen durch die IP-Adresse deines NAS ersetzt werden.

Code 4 – Editiere fstab

proc /proc proc defaults 0 0
PARTUUID=abc-01 /boot vfat defaults 0 2
PARTUUID=abc-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
# automount NFS synology
192.168.xxx.zzz:/volume1/backup /mnt/backup nfs nouser,rsize=8192,wsize=8192,atime,auto,rw,dev,exec,suid 0 0

Vergiss nicht deinen Eintrag mit Strg+O zu speichern, bevor du den Text-Edit mit Strg+X wieder verlässt.

Wenn du alles richtig gemacht hast, wird das NFS ab dem nächsten Neustart automatisch gemountet. Du kannst von nun an jedoch auch Code 5 verwenden, um sofort alle deine in fstab eingetragenen Volumes zu mounten.

Code 5 – Mounte alle fstab Einträge

sudo mount -a

Damit bist du nun bereit mit dem eigentlichen Backup-Mechanismus fortzufahren. Im nächsten Abschnitt zeige ich dir, wie du nun ein System Backup auf deinem NAS generierst.

Backup Skript

Damit du das System Backup nicht immer manuell durchführen musst, empfiehlt es sich ein Skript dafür zu verwenden. Ich verwende folgendes Skript, um meine Backups zu erstellen.

Code 6 – backup-update.sh

#!/bin/bash
# if not root, run as root
echo "Starting update_backup Script..."
if (( $EUID != 0 )); then
    echo "Script started as $USER. Restart Script as Root!"
    sudo /mnt/backup/backup_update.sh
    exit
fi
echo "Deleting Files older than 180 days..."
find /mnt/backup/Backup_Images/* -mtime +180 -exec rm {} \;
find /mnt/backup/Log_Files/* -mtime +180 -exec rm {} \;
echo "Create Backup with current Timestamp $(date)..."
dd if=/dev/mmcblk0 of="/mnt/backup/Backup_Images/Raspbian_Backup_$(date).img" bs=1M
echo "Stating Update..."
apt-get update
echo "Starting Upgrade..."
apt-get -y upgrade
echo "Starting Dist Upgrade..."
apt-get -y dist-upgrade
echo "Clean and Purge..."
apt-get clean
apt purge -y $(dpkg -l | awk '/^rc/ { print $2 }')

Das Skript arbeitet folgende Schritte ab:

  1. Prüfen, ob das Skript als Root gestartet wurde. Falls nicht, starte es erneut als Root.
  2. Löschen von Backups und dazugehöriger Log Files, die älter als 180 Tage sind.
  3. Erstellen des eigentlichen System Backup.
  4. System auf den aktuellsten Stand bringen.
  5. Aufräumen.

Falls du detaillierte Fragen zu dem Skript hast, beantworte ich dir diese gerne in den Kommentaren.

Nachdem du nun ein Skript hast, das dir deine Backups anfertigt, sollte es nun regelmäßig ausgeführt werden. Dazu kommen wir im nächsten Abschnitt.

Regelmäßiges System Backup

Dein System ist nun in der Lage selbstständig Backups zu erstellen. Im nächsten Schritt solltest du ihm beibringen dies auch regelmäßig zu machen. Hierfür zeige ich dir in den nächsten Schritten, wie du einen Cron Job anlegst.

Öffne mit Code 7 die Crontab und ergänze die Zeilen aus Code 8.

Code 7 – Öffne Cron Tab

crontab -e

Code 8 – Backup Cron Job

0 1 1 * * sudo mount -av > "/mnt/backup/Local_Log_Files/mount_$(date).log"
1 1 1 * * sudo chown pi:pi /mnt/backup/update_backup.sh
2 1 1 * * sudo chmod 755 /mnt/backup/update_backup.sh
5 1 1 * * /mnt/backup/update_backup.sh > "/mnt/backup/Log_Files/update_backup_$(date).log"
0 3 1 * * sudo umount -v /mnt/backup  > "/mnt/backup/Local_Log_Files/umount_$(date).log"

Diese Cron Jobs werden zuerst deinen NFS mounten und die Berechtigungen des Skripts anpassen. Ich passe an dieser Stelle noch einmal die Berechtigungen an, falls ich zuvor auf einem anderen Rechner am Skript Änderungen vorgenommen und es hier ersetzt habe.  Anschließend wird das eigentliche Skript jeden ersten Tag eines Monats um 01:05 Uhr ausgeführt und ein dazugehöriges Log File anlegen. Achte darauf, dass in diesem Beispiel das Skript auf dem NFS liegt. Das bedeutet, der NFS muss gemountet sein, wenn das Skript gestartet wird. Ich habe mich dazu entschieden, um das Skript möglichst einfach von einem anderen Rechner editieren zu können.

Nun bist du für den ärgerlichen Fall eines Ausfalls gerüstet. Sei es aus einem Hardware-Defekt oder wegen einem Software-Fehler. Doch wie kannst du das erstellte Backup nun wiederherstellen? Darum wird es im nächsten Abschnitt gehen.

System Backup wiederherstellen

Du hast nun also ein Backup in Form eines Images. Im Grunde funktioniert das nun genauso, wie das erste Kopieren eines Linux Images auf die SD-Karte des Raspberry Pi. Entweder du verwendest Unix on-board Tool über das Terminal oder du lädst dir ein Programm mit visueller Darstellen, wie Etcher, herunter.

Code 9 – Image mit Unix on-board Tool auf SD Karte kopieren

dd bs=1M if=2017-11-29-raspbian-stretch.img of=/dev/sdX conv=fsync

Dabei musst du natürlich darauf achten, dass du den Namen deines Images und den Pfad deiner SD Karte in Code 9 einträgst.

Abschluss

Vielleicht hast du schon einmal die leidliche Erfahrung gemacht und investierte Arbeit wegen fehlender Backups verloren. Ich hoffe, ich konnte dir mit dieser Anleitung helfen, dich ab sofort auf solche Fälle vorzubereiten. Natürlich kann es immer noch passieren, dass einige Tage verloren gehen. Du musst für dich den Rhythmus finden, in denen du Backups benötigst und die Cron Jobs entsprechend timen. Mir persönlich genügt ein Backup im Monat. Und falls du doch einmal massive Änderungen vornimmst und das nächste, automatische Backup noch eine Weile auf sich warten lässt, dann kannst du das Skript jederzeit manuell anstoßen.

Vielen Dank für’s Lesen und lasse mir gerne Kommentare, Anregungen oder Kritik in den Kommentaren da.

Dein Dominic

Hinterlasse eine Nachricht

Kommentar verfassen

  Subscribe  
Benachrichtigen, wenn