Projekte - Backup-Skript
Auf der Suche nach einer einfachen Backup-Lösung für meinen VDR und Debian-Server bin ich irgendwann auch das Backup-Skript von 321tux.de gestoßen. Nach dem mit Hilfe des Betreibers ein kleineres Problem mit dem Skript gelöst wurde, habe ich begonnen einige Erweiterungen einzubauen.
Folgende Änderungen habe ich eingebaut:
- Neu: Automatisches Ein- und Aushängen des Sicherungs-Ziels
Das Sicherungsziel wir automatisch Ein- und Ausgehängt, wenn in der fstab vorhanden (noauto) - Neu: Entfernen von alten Sicherungen und Log-Dateien nach einstellbarer
Zeit (Tage).
Beispiel (Backups und Logs älter als 90 Tage löschen): -d 90 - Neu: Konfiguration ausgelagert, um den Einsatz auf mehreren Systemen zu
vereinfachen.
Wird automatisch geladen, wenn im selben Verzeichnis. Datei kann mit "-c mybkp.conf" angegeben werden - Neu: Konfiguration vereinfacht. Profilnummer muss nicht mehr von Hand geändert werden
- Neu: Quelle als FTP definierbar
Zum Einhängen wird curlftps benötigt. "source[]" ist dann der lokale Einhängepunkt - Neu: Versand der Logs per eMail. Verschiedene Mailer werden unterstützt.
Aufruf mit Parameter -e my@email.de (oder -e root) - Neu: eMail-Bericht mit Angaben zu Fehlern, Belegung der Sicherungen und der Sicherungsziele (Auflistung abschaltbar)
- Neu: Sicherungsziel kann Profilabhängig definiert werden (mount[])
Automatisches Ein- und Aushängen wird unterstützt, wenn in der fstab vorhanden (noauto)
Das von mir modifizierte Skript kann hier geladen werden:
MV_Backup.zip
Version vom 25.09.2016
Aktuelle Version kann man per GIT beziehen:
https://github.com/MegaV0lt/MV_Backup
Fragen und Anregungen kann man im
DEB kund tun. Anregungen werden auch gerne aufgenommen, falls sie mir als
sinnvoll erscheinen.
Das Backup-Skript bietet darüber hinaus noch ein paar weitere nützliche Funktionen:
- Es lassen sich beliebig viele Backup-Profile konfigurieren (mit unterschiedlichen Verzeichnissen und Einstellungen).
- Es können mehrere oder alle Profile auf einmal gestartet werden -p* -p* / -a; s.u.).
- Optional können zu synchronisierende Verzeichnisse direkt an das Skript übergeben werden (-m; s.u.).
- Nach abgeschlossenem Backup kann der Computer optional automatisch heruntergefahren werden (mit Abbruchmöglichkeit). Dazu sind in der Regel keine Root-Rechte erforderlich (-s; s.u.).
- Dateien und Verzeichnisse lassen sich unkompliziert von der Sicherung ausschließen (<<EOF und EOF; s.u.)
- Aussagekräftige Fehlermeldungen und eine Anleitung erleichtern die korrekte Verwendung des Skriptes.
- Benachrichtigungen mit notify-send oder echo und wall (dadurch kann das Skript auch gut im Hintergrund ausgeführt werden).
Abhängig von den Optionen von rsync sind zudem folgende Dinge möglich und standardmäßig eingestellt:
- Im Quellverzeichnis gelöschte Dateien werden auch im Zielverzeichnis
gelöscht.
Aber: Alle gelöschten und veränderten Dateien werden zuvor in einem separaten Ordner gesichert und müssen dort manuell gelöscht werden ($BAK_DIR; s.u.) - Eine Logdatei, in der alle Aktionen von rsync aufgezeichnet werden, wird angelegt ($LOG; s.u.).
Beispiel für einen fstab-Eintrag einer USB-Platte, die nicht automatisch eingehängt wird:
# USB-Disk (BACKUP_USB)
LABEL=BACKUP_USB /mnt/BACKUP_USB auto defaults,noatime,noauto 0
0
Beispiel bei Aufruf mit -h:
Beispiel eines eMail-Statusberichtes:
Konfiguration
Da die Konfiguration nicht furchtbar kompliziert ist, sollte sie auch ohne größere Erfahrung mit Skripten zu bewältigen sein. Zudem helfen die Kommentare (#) im Skript bei der Einrichtung.
In der Variablen $RSYNC_OPT werden die Optionen gespeichert, mit denen rsync vom Skript aufgerufen wird (siehe auch man rsync). $MOUNT enthält optional den Mountpoint einer externen Festplatte, um überprüfen zu können, ob diese korrekt angeschlossen und eingebunden wurde. $BAK_DIR gibt einen Ordner für gelöschte und veränderte Dateien an, wobei dabei die Variable $TARGET (Zielverzeichnis) verwendet werden kann.
Die Einstellungen der einzelnen Profile werden in sogenannten Arrays gespeichert (n ist dabei durch eine Zahl zu ersetzen):
title[n]="" arg[n]="" source[n]="" target[n]="" log[n]="${target[n]}/${title[n]}_log.txt" exfrom[n]="$(mktemp -t "tmp.rsync.XXXX")" cat > "${exfrom[n]}" <<EOF EOF |
Im Array title[n] wird eine Bezeichnung und in
arg[n] ein Argument (i.d.R. bestehend aus einem
Buchstaben), mit dem das Profil aufgerufen wird, gespeichert. Beide Angaben
werden in der Hilfe und bei der Ausführung des Skriptes angezeigt.
In source[n] stehen die Quellverzeichnisse, wobei
(nur) in diesem Fall Pfadangaben, welche ein Leerzeichen enthalten, von
\” umschlossen werden müssen. Das Zielverzeichnis
wird mit target[n] festgelegt.
Zwischen <<EOF und EOF
kann man Dateien und Verzeichnisse angeben, welche nicht gesichert werden
sollen. Hierbei ist pro Zeile lediglich 1 Pfadangabe erlaubt, wobei
Leerzeichen diesmal nicht besonders behandelt werden dürfen.
Der Pfade zur Logdatei in log[n] und zur temporäre Datei in exfrom[n] müssen nicht zwingend geändert werden.