Backup mit rsync erstellen

Ich besitze ein Synology-NAS, das mit zwei 2 TB Festplatten bestückt ist, die im RAID-1 laufen. Auf diesem NAS sind Bilder, Musik, Videos und Dokumente abgelegt. Der Ausfall einer Festplatte ist mit dem RAID-1 für den Heimgebrauch ordentlich genug abgesichert. Aber was, wenn durch einen kapitalen Schaden (Blitzschlagt zum Beispiel) beide Festplatten zerstört werden?

Um einem kompletten Datenverlust zu entgehen habe ich mir auf einem alten PC einen Ubuntu 12.04 Server installiert. In diesem Rechner werkeln drei Festplatten: eine kleine Platte fürs OS, zwei 1 TB Platten für die Daten, die im RAID-0 gekoppelt sind und so ca. 2 TB Platz bieten. Natürlich ist ein RAID-0 ziemlich unglücklich für einen Sicherungsrechner, aber mir reicht das so aus. Da der Backupserver nur im Bedarfsfall gestartet wird, ist ein HDD-Ausfall auch nicht sehr wahrscheinlich. Ich nutze ihn einmal ca. alle zwei Monate, um das NAS zu synchronisieren. Meine Fotos werden zudem noch in eine Cloud gesichert (Strato HiDrive), da das definitiv die wichtigsten Daten sind.

Voraussetzungen

Um meinen Backupserver nachzubauen wird das o.g. Ubuntu 12.04 in der Serverversion installiert. Außerdem wird ein Webserver nebst PHP (inkl. GD Library) und cifs und rsync benötigt.

Backupskript

Für die Sicherung verwende ich folgendes Skript:

#!/bin/bash

mount -t cifs -o credentials=/media/synology/.gastcredentials //files.bluescreengenerator.local/photo /media/synology/photo/

if [ $? -eq 0 ]; then
    echo "Zur Zeit läuft ein Backup des Bilder-Ordners." > /var/www/status.txt

    rsync -av --progress --delete /media/synology/photo/ /var/backups/photo/

    umount /media/synology/photo/

    echo > /var/www/status.txt
    chown -R user.user /var/backups/photo
    echo "Der rsync-Job fuer den Photoordner ist erledigt. MfG Backup" | mail -s "Photo Backup erledigt" root

else
    echo "Fehler beim Mounten!"
fi

In Zeile drei wird der zu sichernde Ordner auf dem NAS in das Filesystem des Backupservers via cifs gemountet. In Zeile 5 wird überprüft, ob das Mounten erfolgreich war. Wenn nicht, wird kein Backup gestartet. Das hat den Sinn, dass beim fehlgeschlagenen Mount der Quellordner leer ist und der Zielordner, der ggf. schon Daten der letzten Sicherung enthält, ebenfalls geleert wird.

Wenn das Mounten OK war wird zunächst der Status in eine Textdatei geschrieben. Das wird in der webbasierten Übersichtsseite (dazu schreibe ich später noch was…) angezeigt. Anschließend startet der rsync (Zeile 8), der die Daten aus /media/synology/photo nach /var/backups/photo synchronisiert. Danach wird der NAS-Ordner wieder sauber ausgehängt, die Statusdatei geleert und eine Mail an root generiert. Außerdem weise ich allen synchronisierten Daten noch meinen Standarduser als Besitzer und Gruppe zu. Da das Skript als root ausgeführt wird, würden ihm sonst alle Daten “gehören” und ich hätte keine Schreibrechte als normaler User. Für jeden Ordner auf dem NAS verwende ich ein eigenes, entsprechend angepasstes (Pfade, Statusmeldung/E-Mail) Skript fürs Backup.

Darstellung via PHP Webinterface

Um den Status der Synchronisation und eine schnelle Übersicht über die Festplattenbelegung zu erhalten, habe ich ein kleines PHP-Skript zusammengefrickelt. Beispielhaft sieht die Übersicht so aus:

Dieser Screenshot ist während des Backups des “Video”-Ordners entstanden. Der rote Text wird beim Start des Backupskripts in die Datei “status.txt” geschrieben, die im PHP-Skript eingebunden wird.

Die Weboberfläche besteht aus zwei PHP-Dateien. Die index.php stellt dabei die Seite dar und berechnet den freien und belegten Speicherplatz. Die graph.php zeichnet lediglich das Diagramm und bedient sich dafür der jpGraph-Library. Wer das Skript übernehmen möchte kann das gerne tun. Es muss lediglich jedes Vorkommen der Pfadangabe angepasst werden, unter der das Backup erstellt wird (bei mit /var/backups).

Download

Backup NAS RAID rsync

Vorheriger Post
Nächster Post