Bitte einmal Backupscript prüfen.

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
misim
Beiträge: 15
Registriert: 27.01.2012 09:20:11

Bitte einmal Backupscript prüfen.

Beitrag von misim » 27.01.2012 09:28:18

Hallo,

ich habe hier ein Backupscript angepasst und würde gerne wissen, ob einer von euch noch Probleme sieht.

Code: Alles auswählen

#!/bin/bash
# Script fuer inkrementelles Backup mit 30 taegigem Vollbackup

### Einstellungen ##
BACKUPDIR="store/backup/home"                # Pfad zum Backupverzeichnis
ROTATEDIR="store/backup/home/rotate"     # Pfad wo die Backups nach 30 Tagen konserviert werden
TIMESTAMP="timestamp.dat"                 # Zeitstempel
SOURCE="home"                            # Verzeichnis(se) welche(s) gesichert werden soll(en)
DATUM="$(date +%d-%m-%Y)"             # Datumsformat einstellen
ZEIT="$(date +%H:%M)"                          # Zeitformat einstellen
EMAIL=“admin@domain.de“						# Emailempfänger

### Verzeichnisse/Dateien welche nicht gesichert werden sollen ! Achtung keinen Zeilenumbruch ! ##
###EXCLUDE="--exclude=home/user/Filme --exclude=home/user/Musik --exclude=home/user/Spiele --exclude=home/user/.VirtualBox  --exclude=home/user/.local/share/Trash" ##

### Wechsel in root damit die Pfade stimmen ##
cd /

### Backupverzeichnis anlegen ##
mkdir -p ${BACKUPDIR} 

### Test ob Backupverzeichnis existiert und Mail an Admin bei fehlschlagen ##
if [ ! -d "${BACKUPDIR}" ]; then

mail -s "Backupverzeichnis nicht vorhanden!" ${EMAIL} <<EOM
Hallo Admin,
das Backup am ${DATUM} konnte nicht erstellt werden. Das Verzeichnis ${BACKUPDIR} wurde nicht gefunden und konnte auch nicht angelegt werden.
Mit freundlichem Gruss Backupscript
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 30 erhoehen ##
if [ "$[backupnr++]" -ge 30 ]; 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!" ${EMAIL} <<EOM
Hallo Admin,
die alten Backups konnten am ${DATUM} nicht verschoben werden. Das Verzeichnis ${ROTATEDIR} wurde nicht gefunden und konnte auch nicht angelegt werden.
Mit freundlichem Gruss Backupscript
EOM

 . exit 1
else
mv ${BACKUPDIR}/* ${ROTATEDIR}/${DATUM}-${ZEIT} 
fi

### Abfragen ob das Backupverschieben erfolgreich war ##
if [ $? -ne 0 ]; then

mail -s "Backupverschieben fehlerhaft!" ${EMAIL} <<EOM
Hallo Admin,
die alten Backups konnte am ${DATUM} nicht verschoben werden.
Mit freundlichem Gruss Backupscript
EOM

exit 1
else

mail -s "Backupverschieben erfolgreich" ${EMAIL} <<EOM
Hallo Admin,
die alten Backups wurde am ${DATUM} erfolgreich nach ${ROTATEDIR}/${DATUM}-${ZEIT} verschoben.
Mit freundlichem Gruss Backupscript
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!" ${EMAIL} <<EOM
Hallo Admin,
das Backup ${filename} am ${DATUM} wurde mit Fehler(n) beendet.
Mit freundlichem Gruss Backupscript
EOM

else

mail -s "Backup (${SOURCE}) war erfolgreich" ${EMAIL} <<EOM
Hallo Admin,
das Backup ${filename} am ${DATUM} wurde erfolgreich beendet.
Mit freundlichem Gruss Backupscript
EOM

fi

Emailadresse wird natürlich noch angepasst.
Es sollen vorerst keine Daten ausgeschlossen werden.

Vielen Dank im voraus.

p.s.: bin noch nicht ganz firm in Linux.

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: Bitte einmal Backupscript prüfen.

Beitrag von gbotti » 27.01.2012 10:38:20

Hallo.

Ich persönlich würde für Backups immer absolute Pfade verwenden. Also anstatt "home" "/home" und so weiter. So kann man sich immer sicher sein, dass auch wirklich das gesichert wird, was man gesichert haben möchte. Das hast du zwar mit dem "cd /" abgefangen, aber wer garantiert dir, dass das funktioniert...

Code: Alles auswählen

### Backupverzeichnis anlegen ##
mkdir -p ${BACKUPDIR} 

### Test ob Backupverzeichnis existiert und Mail an Admin bei fehlschlagen ##
if [ ! -d "${BACKUPDIR}" ]; then

mail -s "Backupverzeichnis nicht vorhanden!" ${EMAIL} <<EOM
Hallo Admin,
das Backup am ${DATUM} konnte nicht erstellt werden. Das Verzeichnis ${BACKUPDIR} wurde nicht gefunden und konnte auch nicht angelegt werden.
Mit freundlichem Gruss Backupscript
EOM

 . exit 1
fi
Du lässt das Verzeichnis erstellen, prüfst ab, ob es vorhanden ist. Hier könntest Du noch einbauen, ob das Verzeichnis erstellt wurde.

Code: Alles auswählen

if [ ! -d "${BACKUPDIR}" ]; then
    mkdir -p $BACKUPDIR || echo "Hallo Admin,
das Backup am ${DATUM} konnte nicht erstellt werden. Das Verzeichnis ${BACKUPDIR} wurde nicht gefunden und konnte auch nicht angelegt werden.
Mit freundlichem Gruss Backupscript" | mail -s "Backupverzeichnis nicht vorhanden!" ${EMAIL}
exit 1
fi
Die Dateien, die älter als 30 Tage sind könnte man auch so entfernen:

Code: Alles auswählen

if find $ROTATEDIR -mtime +30 -exec rm {} \;
        echo "Dateien, die älter als 30 Tage sind wurden gelöscht"
fi
Da ich schreibfaul bin mache ich die Abfragen, ob etwas erfolgreich ausgeführt wurde eigentlich immer so:

Code: Alles auswählen

if mv ${BACKUPDIR}/* ${ROTATEDIR}/${DATUM}-${ZEIT}
then
mail -s "Backupverschieben fehlerhaft!" ${EMAIL} <<EOM
...
Hast Du dir auch noch gedanken über ein LOG gemacht, falls das mit dem Mailen mal nicht funktioniert?

Ansonsten... Bist du auf einem guten Weg, unterschätz dich nicht selbst.
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

misim
Beiträge: 15
Registriert: 27.01.2012 09:20:11

Re: Bitte einmal Backupscript prüfen.

Beitrag von misim » 27.01.2012 13:43:27

Vielen Dank für die schnelle Antwort!

nochmal zum Verständnis:
Soll ich auf jeden Fall die Variablen BACKUPDIR, ROTATEDIR und das "cd /" weglassen und die Pfade direkt eintragen?

MfG Matthias

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Bitte einmal Backupscript prüfen.

Beitrag von Cae » 27.01.2012 17:22:03

misim hat geschrieben:Soll ich auf jeden Fall die Variablen BACKUPDIR, ROTATEDIR und das "cd /" weglassen und die Pfade direkt eintragen?
Fast. Also eigentlich nein. ;) Du sollst die Variablen absolut setzen, also nicht z.B. LOGDIR="log/apache2/", sondern LOGDIR="/var/log/apache2/". Es könnte nämlich sein, dass du aus irgendwelchen Gründen nicht nach / wecheln kannst und dein Skript dann /root/home/ backuppen will.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

misim
Beiträge: 15
Registriert: 27.01.2012 09:20:11

Re: Bitte einmal Backupscript prüfen.

Beitrag von misim » 30.01.2012 13:23:37

ich bekomm jetzt:

Code: Alles auswählen

line 48: 10#/store/backup/home/backup-000: division by 0 (error token is "/backup/home/backup-000")
line 51: /store/backup/home/backup-000: syntax error: operand expected (error token is "/store/backup/home/backup-000")

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: Bitte einmal Backupscript prüfen.

Beitrag von gbotti » 30.01.2012 13:27:40

misim hat geschrieben:ich bekomm jetzt:

Code: Alles auswählen

line 48: 10#/store/backup/home/backup-000: division by 0 (error token is "/backup/home/backup-000")
line 51: /store/backup/home/backup-000: syntax error: operand expected (error token is "/store/backup/home/backup-000")
Was willst du da eigentlich machen???

Code: Alles auswählen

...
backupnr=${backupnr: -3}
...
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

misim
Beiträge: 15
Registriert: 27.01.2012 09:20:11

Re: Bitte einmal Backupscript prüfen.

Beitrag von misim » 30.01.2012 13:30:16

Fehler behoben!!!

Andere Frage:

Da es sich um ein Dateivolumen von um die 30GB handelt wäre eine Kompression nicht schlecht.
Wie kann man die da sinnvoll einbauen ohne eine evtl. Rücksicherung unnötig kompliziert zu machen.

Danke
Matthias

misim
Beiträge: 15
Registriert: 27.01.2012 09:20:11

Re: Bitte einmal Backupscript prüfen.

Beitrag von misim » 30.01.2012 15:38:38

Hab jetzt noch ein anderes Problem:

Bei einigen Dateien kommt: "Cannot Stat: No such File or Directory".
Wenn davon 4-5 aufgetreten sind bricht er ganz ab.

Woran mag das liegen?

uname
Beiträge: 12408
Registriert: 03.06.2008 09:33:02

Re: Bitte einmal Backupscript prüfen.

Beitrag von uname » 30.01.2012 16:23:02

Code: Alles auswählen

man stat
Datei oder Pfad wohl nicht vorhanden. Verschiebst bzw. löscht du vielleicht Dateien und willst sie anschließend noch benutzen? Habe dein Programm nicht wirklich verstanden.

Kannst zum Vergleich dir ja mal mein Programm anschauen. Ich sichere lieber 1:1 alle Ordner. Hat bestimmt Vor- und Nachteile. Aber vor allem bin ich am Ende sicher, dass alle Dateien noch da sind. Du kontrollierst am Ende deine TAR-Archive auf Vollständigkeit? Daten aus inkrementellen TAR-Archiven kannst du über mehrere Generationen korrekt und vor allem einfach wiederherstellen? Wäre mir alles viel zu gefährlich.

http://wiki.ubuntuusers.de/skripte/Backup_mit_RSYNC

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Bitte einmal Backupscript prüfen.

Beitrag von Cae » 30.01.2012 17:56:30

misim hat geschrieben:Bei einigen Dateien kommt: "Cannot Stat: No such File or Directory".
Versuchst du, /proc/, /sys/ oder /dev/ zu backuppen? Die Idee ist toll, aber total unbrauchbar, weil es sich nicht um reguläre Dateien handelt. Man kann und braucht sie nicht zu speichern, da sie zur Laufzeit (nicht bloß des Systems, auch eines Prozesses in /proc/) angelegt werden.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

misim
Beiträge: 15
Registriert: 27.01.2012 09:20:11

Re: Bitte einmal Backupscript prüfen.

Beitrag von misim » 31.01.2012 08:34:46

Ähm ok es geht um das Verzeichnis wo alle Postfächer (IMAP) sind.

Muss ich dann postfix erst beenden und nach der Sicherung wieder starten?

Code: Alles auswählen

postfix stop

#script

postfix start
wie kann ich sicher gehen, dass er postfix startet, auch wenn die Sicherung fehlgeschlagen ist?

Gruß
Matthias

gbotti
Beiträge: 846
Registriert: 16.07.2010 14:24:43
Wohnort: München

Re: Bitte einmal Backupscript prüfen.

Beitrag von gbotti » 22.02.2012 23:35:30

Naja. Die simpelste Methode ist einfach "postfix start" vor dem Ende des Scripts auszuführen. Normalerweise läuft das Script ja weiter auch wenn ein Befehl Fehlgeschlagen ist, außer man hat das Script so konzipiert, dass es dann komplett abbricht. Dann könnte man das über ein "Containerscript", welches die Abläufe steuert, lösen:

Code: Alles auswählen

postfix stop
backupscript.sh
postfix start
Georg
RTFM, LMGTFY, Orakel... Ach... Warum muss man suchen...
Schrödingers Backup --- "Der Zustand eines Backups ist unbekannt, solange man es nicht wiederherstellt" --- Quelle: Nixcraft

Antworten