Linux Server per rsync auf anderen Linux Server sichern
Wenn man einen Linux basierten Server auf einen anderen sichern möchte, kann man dies relativ leicht per rsync erledigen. Leider kam es bei mir in der letzten Zeit häufiger mal vor, das ich nicht die Sicherung des letzten Tages brauchte, sondern eine die ein paar Tage zurück lag – was ich bei meiner Sicherung nicht vorgesehen hatte…
Aber man lernt ja nie aus und so schrieb ich das nachfolgende Script, mit welchem vom Zielserver aus der Quellserver gesichert wird und diese Sicherung in “Tagesverzeichnisse” ablegt, also eine Sicherung je Tag in ein gesondertes Verzeichnis.
Ein kleines Feedback per Mail an mich durfte natürlich auch nicht fehlen!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #!/bin/bash # set +x # ACHTUNG!!! DAS SCRIPT MUSS ALS ROOT LAUFEN!!! # ACHTUNG!!! AUTHORIZED KEYS SIND ERFORDERLICH!!!! ############################## # Variablendefinitionen ############################## RECIPIENTS="maik@lnx-world.de" HOST=$1 MAIL=/tmp/rsyncmail_$HOST TMPLOG=/tmp/rsynclog_$HOST LOGFILE=/var/log/rsync.log NOW=`/bin/date` DOW=`/bin/date +"%A"` BACKUPSERVER=$1 BACKUPDIR=/ TARGETDIR=/var/backup/$HOST/$DOW/ E1=/proc E2=/tmp E3=/lost+found OPTIONS="-az -e ssh --force --stats --numeric-ids --ignore-errors --delete-after --delete-excluded --exclude=$E1 --exclude=$E2 --exclude=$E3" ############################## # Funktionsdefinitionen ############################## make_mail() { printf "Subject: LNX-WORLD RSYNC REPORT for $HOST - $NOW\n" >> $MAIL printf "#########################################\n" >> $MAIL printf "# SCRIPTSTATUS: $SCRIPTSTATE\n" >> $MAIL printf "#########################################\n" >> $MAIL printf "\n\n" >> $MAIL printf "#########################################\n" >> $MAIL printf "# Script wurde mit folgenden Parametern gestartet:\n" >> $MAIL printf "#########################################\n" >> $MAIL printf "BACKUPSERVER = $BACKUPSERVER \n" >> $MAIL printf "BACKUPDIR = $BACKUPDIR \n" >> $MAIL printf "TARGETDIR = $TARGETDIR \n" >> $MAIL printf "EXCLUDES = $E1 $E2 $E3 \n" >> $MAIL printf "NOW = $NOW \n" >> $MAIL printf "DOW = $DOW \n" >> $MAIL printf "#########################################\n" >> $MAIL printf "# RSYNC Output:\n" >> $MAIL printf "#########################################\n" >> $MAIL /bin/cat $TMPLOG >> $MAIL } do_rsync() { /usr/bin/rsync $OPTIONS $HOST:$BACKUPDIR $TARGETDIR >> $TMPLOG RSYNCSTATE=$? if [ $RSYNCSTATE -eq 0 ]; then SCRIPTSTATE=OK echo "$NOW JOB: $HOST erfolgreich gesynct" >> $LOGFILE else SCRIPTSTATE=ERROR echo "$NOW JOB: $HOST NICHT erfolgreich gesynct" >> $LOGFILE fi } check_directorys() { echo "$NOW JOB: $HOST Starte RSYNC Backup" >> $LOGFILE if [ ! -d /var/backup ] then echo "$NOW JOB: $HOST ERROR - Backupdirectory nicht da! EXITING" >> $LOGFILE exit 1 fi if [ ! -d /var/backup/$HOST ] then mkdir /var/backup/$HOST echo "$NOW JOB: $HOST /var/backup/$HOST/ angelegt" >> $LOGFILE else echo "$NOW JOB: $HOST /var/backup/$HOST/ ist schon da" >> $LOGFILE fi if [ ! -d /var/backup/$HOST/$DOW ] then mkdir /var/backup/$HOST/$DOW echo "$NOW JOB: $HOST /var/backup/$HOST/$DOW angelegt" >> $LOGFILE else echo "$NOW JOB: $HOST /var/backup/$HOST/$DOW ist schon da" >> $LOGFILE fi } # Zuerst einmal aufräumen! /bin/rm $MAIL /bin/rm $TMPLOG check_directorys do_rsync make_mail cat $MAIL | sendmail -r tagessicherung@lnx-world.de -t $RECIPIENTS |
Die “Features” des Scriptes sind also:
- Sicherung von Server A in ein Backupverzeichnis auf Server B
- 7 Sicherungen liegen auf Vorrat
- Verzeichnisse werden bei Bedarf vom Script selbst angelegt
- Der Backupprozess wird in ein Logfile geschrieben und dort erfasst
- Es wird am Ende des Backuplaufes eine Reportmail an einen (oder mehrere) E-Mailempfänger versendet
- Die Sicherung erfolgt über eine mit SSH verschlüsselte Verbindung
- Es werden keine Sicherungsagenten auf dem Quellserver benötigt
- Das Script kostet nichts und ist absolut frei verfügbar
P.S.
Wer mein kleines Script bei sich einsetzt schreibe mir bitte ein kleines Feedback als Kommentar, danke!
Desweiteren kann die Liste der obigen Excludes frei ergänzt werden, gerade bei Datenbanken wäre es sinnvoll hier die Datenverzeichnisse der Datenbanken zu excluden und vor dem Scriptlauf per Dump ein sauberes Sicherungsfile zu erstellen! Wenn die Excludes erweitert werden, tragt bitte die zusätzlichen E-Nummern auch in den $OPTIONS nach, sonst werden die nicht übernommen!



