Rsync backup

Aus Bennys Wiki
(Weitergeleitet von Backup Shell Script)
Wechseln zu: Navigation, Suche

das Script[Bearbeiten]

Hier erstmal das Script:



#!/bin/sh

# Datum aktuell halten
/etc/init.d/ntpdate restart >>/dev/null

# Variablen defenieren
backup=`date +%Y-%b-%d`
type=$1
rsync=/usr/bin/rsync
source=/mnt/daten/
storage=/mnt/Datensicherung/
log=$storage/backup.log

check_variables() {
        debug=`echo $*|grep -c debug`
        if (test $debug -gt 0)
        then
                last1=`ls -Art1 $storage|grep -|grep -v update|tail -n1`
                last2=`nnls -Art1 $storage|grep -|tail -n1`

                # Debug Information
                echo kernel=`uname -a`
                echo date=`date`
                echo current Backup=$storage/$backup
                echo last full Backup=$storage/$last1
                echo last Backup=$storage/$last1
                echo type=$type
                echo source=$source
                echo destination=$storage
                echo log file=$log
        fi
}

backup_full() {
        check_variables
        cd $storage
        # Starteintrag (Uhrzeit) in Logfile 
        echo "--- $backup gestartet     `date +%k:%M`                           ---" >>$log

        # Backuplauf mit rsync
        $rsync -r -u -b $source $storage/$backup >>$log

        # Endeintrag (Uhrzeit - Groesse des Backups) in Logfile
        echo "--- $backup abgeschlossen `date +%k:%M` - `du -s -h $backup` gesichert ---" >>$log
}

backup_update() {
        check_variables
        cd $storage
        last=`ls -Art1 $storage|grep -|grep -v update|tail -n1`
        echo saving Changes since $last...
        # Starteintrag (Uhrzeit) in Logfile 
        echo "--- $backup gestartet     `date +%k:%M`                            ---" >>$log
        # Backuplauf mit rsync

        $rsync -r -u -b --compare-dest=$storage/$last --backup-dir=$backup-$type $source $storage/$backup-$type >>$log

        # Endeintrag (Uhrzeit - Groesse des Backups) in Logfile
        echo "--- $backup abgeschlossen `date +%k:%M` - `du -s -h $backup-$type` gesichert ---
        " >>$log
}

case "$type" in
  full)
        check_variables
        echo -n "Full Backup running..."
        backup_full
        echo "done."
        ;;
  update)
        check_variables
        echo -n "Incremental Backup running..."
        backup_update
        echo "done."
        ;;
  *)
        echo "Usage: $SCRIPTNAME {full|update} [debug]" >&2
        exit 1

esac


exit 0

Die Funktionen[Bearbeiten]

kurze Erklaerung was diese Funktionen machen.

check_variables()[Bearbeiten]

        debug=`echo $*|grep -c debug`
        if (test $debug -gt 0)
        then
                last1=`ls -Art1 $storage|grep -|grep -v update|tail -n1`
                last2=`nnls -Art1 $storage|grep -|tail -n1`

                # Debug Information
                echo kernel=`uname -a`
                echo date=`date`
                echo current Backup=$storage/$backup
                echo last full Backup=$storage/$last1
                echo last Backup=$storage/$last1
                echo type=$type
                echo source=$source
                echo destination=$storage
                echo log file=$log
        fi

wenn debug in der Kommandozeile als Parameter uebergeben wird, werden die zusätzlichen Informationen ausgegeben.

backup_full()[Bearbeiten]

backup_full() {
        check_variables
        cd $storage
        # Starteintrag (Uhrzeit) in Logfile 
        echo "--- $backup gestartet     `date +%k:%M`                           ---" >>$log

        # Backuplauf mit rsync
        $rsync -r -u -b $source $storage/$backup >>$log

        # Endeintrag (Uhrzeit - Groesse des Backups) in Logfile
        echo "--- $backup abgeschlossen `date +%k:%M` - `du -s -h $backup` gesichert ---" >>$log
}

    

  • check_variables

ruft die Funktion auf um die Variablen zu ueberpruefen.

  • echo

erledigt ein paar Eintrage (Anfang, Ende mit Groesse des Backups)

  • rsync

-r Rekursives Kopieren, also auch die Unterverzeichnisse
-u (update) nur Datein ueberschreiben die aktueller sind als die schon vorhandenen
-b (backup) sonst funktioniert backup-dir nicht
alles was rsync ausgibt wird in die Logdatei geschrieben.

backup_update()[Bearbeiten]

backup_update() {
        check_variables
        cd $storage
        last=`ls -Art1 $storage|grep -|grep -v update|tail -n1`
        echo saving Changes since $last...
        # Starteintrag (Uhrzeit) in Logfile 
        echo "--- $backup gestartet     `date +%k:%M`                            ---" >>$log
        # Backuplauf mit rsync

        $rsync -r -u -b --compare-dest=$storage/$last --backup-dir=$backup-$type $source $storage/$backup-$type >>$log

        # Endeintrag (Uhrzeit - Groesse des Backups) in Logfile
        echo "--- $backup abgeschlossen `date +%k:%M` - `du -s -h $backup-$type` gesichert ---
        " >>$log
}

genau wie bei backup_full() auch mit dem Zusatz:

  • ls

-A nahezu alles anzeigen (die Verzeichniesse . und .. werden nicht angezeigt)
-r umgekehrte Sortierung
-t nach Datum sortieren (mit -r kombiniert zeit es die aktuellsten Dateien am Ende an)
-1 fuer jede Datei/jedes Verzeichniss eine neue Zeile

  • grep

Damit wird nur Verzeichnisse mit mindestens einem "-" im Dateinamen gelistet werden

  • tail

-n1 nur die letzte Zeile ausgeben
$last ist somit das zuletzt erstellte Verzeichniss mit mindestens einem "-" im Dateinamen (zB 2005-Nov-03)

  • rsync

--backup-dir wohin das Backup gespeichert wird. $storage ist das Verzeichniss in dem alle Backups landen sollen. $backup ist das aktuelle Datum (YYYY-MMM-DD)
--compare-dest dieses Verzeichniss wird mit $source verglichen und alle geaenderten Dateien werden kopiert.

Lizenz[Bearbeiten]

Der Author uebernimmt keine Garantie fuer das fehlerfreie Funktionieren dieser Software, noch fuer Schaeden die aus durch diese Software entstanden sind. Diese Software wird als open source unter [GNU GPL] angeboten. Fuer Vorschlaege und Fehlermeldungen steht eine DiskussionsSeite bereit (gerne auch per Mail an mich)