Einrichten
Dieses Backupscript erstellt ein Grundbackup und eine tägliche Sicherung der geänderten Daten. Dazu bedient es sich des Programmes tar und des Dienstes anacron. Der Dienst anacron sorgt dafür, dass immer ein Backup nach dem ersten Rechnereinschalten des Tages gemacht wird. Somit ist sichergestellt, das nicht vergessen wird ein Backup anzulegen bzw. dass ein Backup nicht angelegt wird, weil die Ausführungszeit vor Einschalten des Rechners liegt, was z.B. der Fall bei cron wäre. Nach jedem Backupvorgang wird eine Mail an root gesendet, in der mitgeteilt wird ob das Backup von Erfolg gekrönt war oder ob ein Fehler aufgetreten ist.
- Das Backup-Script in /etc/dron.daily/ erstellen und ausführbar machen
- Dieses Script erstellt ein Full Backup und 30 Tage lang inkrementelle Backups
- Den Ort /mnt/Backup bereit stelleln (USB Platte)
Damit arbeiten
Ein Backup erstellen
Es wird automatisch ein tägliches Backup erstellt.
Eine Datei suchen
Sucht Datei in allen Archiven (dauert sehr lange)
BACKUPDIR=media/backup ls -l ${BACKUPDIR} for archiv in ${BACKUPDIR}/backup-*.tgz; do tar -tzf $archiv -C / | grep Name_der_Datei; doneSucht in einem bestimmten Archiv (hier backup-003.tgz)
tar -tzf backup-003.tgz | grep Name_der_Datei
Eine Datei zurück spielen
for archiv in ${BACKUPDIR}/backup-*.tgz; do tar -xzf $archiv -C / home/user/pfad/zur/datei/Name_der_Datei done
Alle Dateien zurück spielen
Alle ersetzen und Originale Überschreiben
BACKUPDIR=/media/backup # Pfad zum Backupverzeichnis for archiv in ${BACKUPDIR}/backup-*.tgz; do tar -xzf $archiv -C / done
Das Script
Das Backup Script für den User andre:
#!/bin/bash #=================================================================== # Script fuer inkrementelles Backup mit $ROTATE taegigem Vollbackup # Version 1.0 #=================================================================== ### Einstellungen ## BACKUPDIR="mnt/Backup/andre" # Pfad zum Backupverzeichnis ROTATEDIR="mnt/Backup/rotate/andre" # Pfad wo die Backups nach 30 Tagen konserviert werden TIMESTAMP="timestamp.dat" # Zeitstempel SOURCE="home/andre" # Verzeichnis(se) welche(s) gesichert werden soll(en) MAILTO="andre@creutz.net" # zu benachrichtigende Mailadresse USER="Andre" # Username in der Mail EXCLUDE="--exclude=home/andre/.*" # Verzeichnisse/Dateien welche nicht gesichert werden sollen ! Achtung keinen Zeilenumbruch ! ROTATE="30" # Rotationstage ### Ab hier nichts mehr aendern DATUM="$(date +%d-%m-%Y)" # Datumsformat einstellen ZEIT="$(date +%H:%M)" # Zeitformat einstellen cd / # Wechsel in root damit die Pfade stimmen mkdir -p ${BACKUPDIR} # Backupverzeichnis anlegen if [ ! -d "${BACKUPDIR}" ]; then # Test ob Backupverzeichnis existiert mail -s "Backupverzeichnis nicht vorhanden!" $MAILTO <<EOM Hallo $USER, das Backup am ${DATUM} konnte nicht erstellt werden. Das Verzeichnis ${BACKUPDIR} wurde nicht gefunden und konnte auch nicht angelegt werden. EOM . exit 1 fi ### Alle Variablen einlesen und letzte Backupdateinummer herausfinden ## set -- ${BACKUPDIR}/backup-???.tgz lastname=${!#} backupnr=${lastname##*backup-} backupnr=${backupnr%%.*} backupnr=${backupnr//\?/0} backupnr=$[10#${backupnr}] ### Backupdateinummer automatisch um +1 bis maximal $ROTATE erhoehen ## if [ "$[backupnr++]" -ge $ROTATE ]; then mkdir -p ${ROTATEDIR}/${DATUM}-${ZEIT} ### Test ob Rotateverzeichnis existiert und Mail an Admin bei fehlschlagen ## if [ ! -d "${ROTATEDIR}/${DATUM}-${ZEIT}" ]; then mail -s "Rotateverzeichnis nicht vorhanden!" $MAILTO <<EOM Hallo $USER, die alten Backups konnten am ${DATUM} nicht verschoben werden. Das Verzeichnis ${ROTATEDIR} wurde nicht gefunden und konnte auch nicht angelegt werden. EOM . exit 1 else mv ${BACKUPDIR}/* ${ROTATEDIR}/${DATUM}-${ZEIT} fi ### Abfragen ob das Backupverschieben erfolgreich war ## if [ $? -ne 0 ]; then mail -s "Backupverschieben fehlerhaft!" $MAILTO <<EOM Hallo $USER, die alten Backups konnte am ${DATUM} nicht verschoben werden. EOM exit 1 else mail -s "Backupverschieben erfolgreich" $MAILTO <<EOM Hallo $USER, die alten Backups wurde am ${DATUM} erfolgreich nach ${ROTATEDIR}/${DATUM}-${ZEIT} verschoben. EOM ### die Backupnummer wieder auf 1 stellen ## backupnr=1 fi fi backupnr=000${backupnr} backupnr=${backupnr: -3} filename=backup-${backupnr}.tgz ### Nun wird das eigentliche Backup ausgefuehrt ## tar -czf ${BACKUPDIR}/${filename} -g ${BACKUPDIR}/${TIMESTAMP} ${SOURCE} ${EXCLUDE} ### Abfragen ob das Backup erfolgreich war ## if [ $? -ne 0 ]; then mail -s "Backup (${SOURCE}) war fehlerhaft!" $MAILTO <<EOM Hallo $USER, das Backup ${filename} am ${DATUM} wurde mit Fehler(n) beendet. EOM else mail -s "Backup (${SOURCE}) war erfolgreich" $MAILTO <<EOM Hallo $USER, das Backup ${filename} am ${DATUM} wurde erfolgreich beendet. EOM fi
Im Internet: http://wiki.ubuntuusers.de/Skripte/inkrementelles_Backup