Backupmaschine

Aus MySlug
Zur Navigation springen Zur Suche springen

Die Slug als intelligente Backupmaschine

Um ein Sicherungskonzept macht man sich in der Regel dann erst Gedanken, wenn es einmal zum Datengau gekommen ist. Dank unserer kleinen NSLU2 muss es aber hier nicht erst soweit kommen. Als Beispiel haben wir einen Windowsrechner (wir verwenden in diesem Tutorial ein Vista) im Netz, auf dem wir ein Verzeichnis haben, das unsere ganzen wichtigen Dokumente beinhaltet. Wir möchten jetzt, dass dieses Verzeichnis in regelmäßigen Abständen auf die Slug kopiert wird und zudem noch alte Sicherungen für eine gewisse Zeit aufgehoben werden, die wir bei Bedarf wieder heranziehen können, wenn etwas zu voreilig gelöscht wurde. Zu jeder Zeit soll aber über das Netzwerk auf unsere letzte Sicherung zugegriffen werden können, ohne dass wir großmächtig ein Backup wiederherstellen müssen. Achso... natürlich soll das vollautomatisch gehen, ohne dass wir da auf unsere Slug zugreifen müssen. Da wir aber auch nicht ständig die Logfiles der Slug ansehen wollen, soll uns die NSLU2 noch selbstständig E-Mails schicken, wenn gerade ein Backup gemacht wird und wenn es erfolgreich verlaufen ist.

Das alles kann die Slug? Aber natürlich! Die richtigen Programme vorausgesetzt und ein kleines Script, dass ich für diesen Zweck geschrieben habe.


Vorbereitungen auf unseren Windows Rechner

Damit die NSLU2 später auf unseren Windowsrechner zugreifen kann benötigen wir ein eigenes Benutzerkonto mit Passwort. Legt das auf Eurem Windowsrechner an, falls nicht schon vorhanden. Ihr solltet hierfür nicht das Administratorenkonto verwenden, sondern nur ein eigenen User. Ich habe diesen in unserem Beispiel "backup" genannt. Auch bekommt er das Passwort "backup". Ihr werdet sicherlich ein etwas sicherers Passwort auswählen, aber für unser Beispiel genügt dieses erstmal.

Gebt nun das gewünschte Sicherungsverzeichnis frei. Es können natürlich auch mehrere Verzeichnisse verwendet werden, dazu muss aber später unser Script einwenig angepasst werden. Zur Demonstartion des Sicherungskonzeptes genügt erstmal ein Verzeichnis.

Öffnet zuerst den Windows Dateimanager "Explorer" indem Ihr auf das Startsymbol rechts klickt und "Explorer" auswählt:

Klickt nun mit rechts auf das zu freigebende Verzeichnis und dort auf "Freigabe..." :

Wählt nun das Konto aus, das eine Freigabe für das Verzeichnis erhält:

Klickt dann auf "Hinzufügen" :

Wenn Ihr mögt könnt Ihr noch die Art der Freigabe von "Leser" auf "Mitbesitzer" ändern. Das ist allerdings optional, denn zum Sichern müssen wir nur lesen können:

Danach kommt noch eine Sicherheitsabfrage. Seid Ihr zu dem Zeitpunkt kein Administrator, werdet Ihr noch nach dem Admin-Passwort gefragt:

Danach noch kurz eine Statusanzeige, dass das Verzeichnis nun freigegeben ist:

Damit steht schonmal Euer Windows Share. Nun legen wir noch eine neue Datei direkt in das freigebene Verzeichnis an. Diese ist notwendig, damit unser Sicherungsscript später dieses Verzeichnis auch als Sicherungsverzeichnis akzeptiert. Legt dazu ein neues Textdokument an:

Benennt diese Datei in "sichern" um. Die Endung sollte .txt sein. Also sichern.txt.

Der Hintergrund hierzu ist, dass Ihr auf die Art und Weise ganz einfach ein Backup stoppen könnt, ohne das Script selbst auf der Slug anhalten zu müssen. Benennt die sichern.txt um oder löscht diese, dann wird das Verzeichnis solange nicht gesichert, bis Ihr wieder die sichern.text in dieses Verzeichnis packt.

Wenn Ihr soweit alles vorbereitet habt, dann können wir uns an die Slug machen.




Vorbereitungen auf der Slug

Meldet Euch auf der slug an und installiert (falls noch nicht geschehen) folgende Pakete:

nail (Mailprogramm für die Konsole)
coreutils (diverse Tools für die Kommandozeile)
rsync (Backupprogramm)


ipkg install coreutils nail rsync


Solltet Ihr diesen Schritt vergessen, wird das das Script für Euch erledigen. Ebenso muss noch eine log-Datei angelegt werden:


touch /var/log/backup


Damit nun uns die NSLU2 auch Messages schicken kann, muss noch der nail konfiguriert werden.

Öffnet hierfür die /opt/etc/nail.rc mit einem Editor (vi z.B.) und ergänzt folgende Zeilen am Ende der Datei (entsprechend Euren Server/Absender abändern):

set smtp=smtp. euerserver. de
set from=meine @mail. blah

Wenn der SMTP Server SMTP-Auth verwendet (also einen Nutzer und Passwort abverlangt) dann ergänzt man die mailrc noch mit folgenden beiden Zeilen:

set smtp-auth-user=Loginname
set smtp-auth-password=Passwort

Da hier das Passwort in klar lesbarer Form in der .mailrc hinterlegt ist muss sichergestellt sein, dass nur Root Leserechte an dieser Datei hat! SMTP-Auth ist manchmal nicht notwendig, wenn der SMTP Server zum Anbieter der eigenen Telefon/Internetanbindung gehört. In diesem Fall wird alleine durch den Zugang über das anbietereigene Netz sicher gestellt, dass auch nur legitimitierte User Zugriff auf den SMTP Server haben.

Zur Sicherung selbst legt Euch auf der Slug einen neuen User an, der ein eigenes Verzeichnis bekommt. Diesen nennen wir z.B. auch backup und der hat das Verzeichnis /backup. Dorthin wollen wir die Sicherungen schreiben und können auch später über diesen User auf die Sicherungen zugreifen.

Das war's dann auch schon mit der Vorarbeit. Kommen wir zum eigentlichen Script...




Das Backupscript

Legt nun das Backupsript in ein Verzeichnis an. Ihr könnt dies z.B. in das Verzeichnis /opt/bin kopieren. Hier das Listing meiner backup.sh

backup.sh

#!/bin/sh
# Backupscript fuer die NSLU2 -- ROTIEREND --
# Gargi 2007
# getestet auf unslung 6.8 beta !!!!
# Das Script funktioniert nur mit den installierten nail, coreutilis und rsync:
# ipkg install coreutils rsync nail
# Bitte noch eine logdatei anlegen:
# touch /var/log/backup

# KONFIGURATIONSBEREICH ########################

ip=192.168.1.3 # Die IP des zu scannenden Rechner

verzeichnis=transfer # Das zu sichernde freigegebene Verzeichnis

# Weitere Verzeichnisse koennen ergaenzt werden
# verzeichnis2=xyz  

loginname=backup # Loginname auf den zu sichernden Rechner

loginpassword=backup # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann

btarget=backup # Zielverzeichnis der Backups auf der Slug

intervall=5 # Groesse des Intervalls an Tagen zwischen den Sicherungen

mailadresse=mein @ mailadresse.de # Deine E-Mailadresse

# ENDE DES KONFIGURATIONSBEREICHES##########

# Stelle fest, ob bereits ein Sync laeuft um ressourcen zu schonen
if [ -f /tmp/backup.lock ]
    then
    echo "backup.lock gefunden. Breche Vorgang ab."
    echo "Achtung! Die Slug versuchte ein Backup zu starten und hat dabei eine Sperrdatei gefunden. Das deutet 
darauf hin, dass bereits eine Instanz der Sicherung laeuft. Die zweite Instanz startet, sobald der erste 
Prozess beendet ist. Wenn Du diese Meldung laufend erhaelst, dann ist das ein Hinweis, dass die Sicherung 
vorzeitig aufgrund eines Fehlers abgebrochen ist. Entferne dann auf der Slug die Datei /tmp/backup.lock und 
starte das Backupscript manuell um Fehler auszuschliessen." > mail.txt
    nail -s "[Backup] Backup.lock entdeckt" -q mail.txt $mailadresse < /dev/null
    rm mail.txt
    exit 1
else
    echo Fein, die Slug hat Luft fuer ein Backup
fi

# Pruefe, ob rsync und die coreutils vorhanden sind. Falls nicht automatisch nachinstallieren
if [ -f /opt/bin/rsync ]
    then
    echo "rsync ist installiert, alles bestens"
else
    ipkg install rsync
fi

if [ -f /opt/bin/wc ]
    then
    echo "coreutils sind installiert, alles bestens"
else
    ipkg install coreutils
fi

if [ -f /opt/bin/nail ]
    then
    echo "nail ist installiert, alles bestens"
else
    ipkg install nail
    echo "bitte konfiguriere den Nail"
fi
    
# schauen wir, ob wir loggen koennen
if [ -f /var/log/backup ]
    then
    echo "wir haben ein logfile, nice"
else
    touch /var/log/backup
fi

# Noch ein paar Variablen
Datum=$(date +%d.%m.%g--%R)
SDatum=$(date +%d.%m.%g)

# Pruefe die letzte Sicherung auf das Alter
ergebnis=`find /$btarget/*.1.tar.gz -type f -mtime +$intervall | wc -l`

# Checken ob das der erste Sicherungslauf ist
ls /$btarget/*.tar.gz 

if [ $? != 0 ]; then
   zusatz=1
else
   zusatz=0
fi

# Schwellenwert errechnen
let "schwelle=$ergebnis + $zusatz"

if [ $schwelle = 0 ]; then

# wir sind auf dem aktuellen Stand
         echo "$Datum ($ip): Backup ist aktuell" >> /var/log/backup
         echo Backup ist auf dem letzten Stand

# Bitte folgende Zeilen auskommentieren falls diese Mail nicht gewuenscht ist
         echo "$Datum ($ip): Backup ist auf dem letzten Stand" > mail.txt
         nail -s "[Backup] Backup ist aktuell" -q mail.txt $mailadresse < /dev/null
	 rm mail.txt
# Bis hierher maximal auskommentieren

         exit 1
else

# Stelle fest, ob Rechner im Netz aktiv ist
      ping -c 1 $ip > /dev/null
      if [ $? = 0 ]; then

# Rechner ist gefunden, starte Backupprozedur
                   echo "$Datum ($ip): Server is alive ... rock and roll gentlemen!" >> /var/log/backup
                   echo Zielrechner gefunden
                   sleep 2

# Offenes Backupverzeichnis loeschen, bei rsync eigentlich ein Quatsch
#                   rm -r /$btarget/$verzeichnis
#                   rm -r /$btarget/$verzeichnis2

# Mounte den Sambashare des zu sichernden Pfades 
                   mkdir /mnt/$verzeichnis 
                   # mkdir /mnt/$verzeichnis2
                   smbmount //$ip/$verzeichnis /mnt/$verzeichnis -o username=$loginname,password=$loginpassword
                   # smbmount //$ip/$verzeichnis2 /mnt/$verzeichnis2 -o username=$loginname,password=$loginpassword

# Checke ob ordentlich gemountet werden konnte. Suche Aktivierungsmarke am Share
                   if [ -f /mnt/$verzeichnis/sichern.txt ]
                            then

#Sperrdatei anlegen
                           touch /tmp/backup.lock
                           echo setze Sperrdatei fuer eine weitere Instanz > /tmp/backup.lock

                           echo "$Datum ($ip): Achtung! Ich starte das Backup. Bitte Rechner bis zum Abschluss 
laufen lassen. Sobald das Backup beendet ist erhaelst Du eine Benachrichtigung 
per E-Mail." > mail.txt
			   nail -s "[Backup] Backup gestartet" -q mail.txt $mailadresse < /dev/null
                           rm mail.txt   

# Fahre das Backup, veraendere die Zugriffsrechte
                          rsync -a /mnt/$verzeichnis /$btarget/ --delete
                          # rsync -a /mnt/$verzeichnis2 /$btarget/ --delete
                          chown -R $btarget:everyone  /$btarget
                          chmod -R 755 /$btarget

# Backupverzeichnis wieder aushaengen
                          umount /mnt/$verzeichnis
                          # umount /mnt/$verzeichnis2

# Backup-Rolle, loesche aeltestes Backup
                           rm /$btarget/save.3.tar.gz 
                           mv /$btarget/save.2.tar.gz /$btarget/save.3.tar.gz 
                           mv /$btarget/save*.1.tar.gz /$btarget/save.2.tar.gz 

# Gesicherte Dateien kompremieren
                          tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis
# Weitere Verzeichnisse bitte wie folgt anhaengen:
                          #  tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis /$btarget/$verzeichnis2
                          gzip /$btarget/*.1.tar

# Benachrichtigungen fuer das Protokoll und per E-Mail
                          echo "$Datum ($ip): Backuped successfully" >> /var/log/backup
                          echo Backup beendet
			  echo "$Datum ($ip): Das Backup wurde beendet." > mail.txt
			  echo "Bitte pruefe, ob das Backup soweit funktioniert." >> mail.txt
			  nail -s "[Backup] Backup beendet" -q mail.txt $mailadresse < /dev/null
			  rm mail.txt

# Entferne Sperrdatei
                          rm /tmp/backup.lock
                  
                           else

                           echo habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist 
das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. 
Dann gibt es nichts zu tun.

# Bitte folgende Zeilen auskommentieren, falls diese Mail nicht gewuenscht ist:
                           echo "$Datum ($ip): habe zwar eine Maschine gefunden, es existiert aber kein Share.
 Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das 
Verzeichnis ist leer. Dann gibt es nichts zu tun." > mail.txt
			   nail -s "[Backup] Share nicht gefunden" -q mail.txt $mailadresse < /dev/null
			   rm mail.txt   
# Bis maximal hier auskommentieren.

                          exit 1                    
                   fi
      else
      echo "$Datum ($ip): Server is dead ... nothing to care about" >> /var/log/backup

# Bitte folgende Zeilen auskommentieren, falls die E-Mail nicht gewuenscht ist:
      echo "$Datum ($ip): Server is dead ... nothing to care about"  > mail.txt
      nail -s "[Backup] Server ist nicht aktiv" -q mail.txt $mailadresse < /dev/null
      rm mail.txt   
# Bis maximal hier auskommentieren.

      fi
fi


Im oberen Bereich gibt es nun ein paar Dinge für Euch zum eintragen. Ich liste die Variablen, die Ihr anpassen müsst einmal hier gesondert auf:


ip=192.168.1.3 # Die IP des zu scannenden Rechner
verzeichnis=transfer # Das zu sichernde freigegebene Verzeichnis
loginname=backup # Loginname auf den zu sichernden Rechner
loginpassword=backup # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese Datei lesen kann
btarget=backup # Zielverzeichnis der Backups auf der Slug
intervall=5 # Groesse des Intervalls an Tagen zwischen den Sicherungen
mailadresse=mein @ mailadresse.de # Deine E-Mailadresse


Über die IP legen wir den Rechner im Netzwerk fest, aus dem das Backup gezogen werden soll. Dazu verraten wir dem Script, wie das freigegebene Verzeichnis auf dem zu sichernden Rechner heißt. Der Loginname und das Passwort betrifft das Windowsshare, das wir auf unserem Windowsrechner angelegt haben. Die Variable btarget ist das Ziel auf der Slug, in denen die Dateien kopiert werden. Das ist genau das Heimatverzeichnis des Useres auf der Slug, den wir für die Sicherung angelegt haben. Hierauf können wir dann später auch wieder im Netz auf dieses Samba Share zugreifen und unsere Sicherungsdateien bei Bedarf wieder herholen. Zu guterletzt geben wir noch eine Mailadresse an, an der wir die Statusmelungen schicken. Das sollte natürlich Eure eigene Mailadresse sein.

Wenn Ihr die Datei /opt/bin/backup.sh angelegt habt, dann ändern wir die Zugriffsrechte und stellen damit sicher, dass nur root die Datei lesen darf:


chmod 711 /opt/bin/backup.sh


Damit die Datei auch über die crontab regelmäßig ausgeführt wird, ergänzen wir eine Zeile in die crontab indem wir einfach folgenden Befehl eingeben:


echo */30 * * * * root sh /opt/bin/backup.sh >> /etc/crontab


Mit vi /etc/crontab könnt Ihr das natürlich auch manuell erledigen, oder zumindest prüfen, ob die Zeile auch tatsächlich sich nun in der crontab befindet. Das */30 sorgt dafür, dass nun das Script alle 30 Minuten gestartet wird und seinen Dienst verrichtet.

Jetzt startet Eure Slug neu. Danach ist das Script aktiv. Sollte das Script nicht so laufen, wie Ihr wollt, dann meldet Euch wieder an und startet das Script manuell:


sh /opt/bin/backup.sh


und seht Euch eventuelle Fehlermedlunegn an. Auch könnte die lokale Logdatei Auskunft über Probleme geben:


tail -f /var/log/backup


Das obige Script ist dann sehr gut einsetzbar, wenn das Dateivolumen nicht allzu groß ist, da der gzip schon einiges an Zeit benötigt, um große Dateien zu packen. Wer aber 30, 40, 50 GB zu verarbeiten hat, wird wohl auf der NSLU2 mit ihren maximal 266MHz ARM Prozessor nicht recht glücklich werden. Hier empfiehlt es sich, auf ein rotierendes Backup zu verzichten, und nur eine Sicherung offen anzulegen, sodass die Pfade im Prinzip nur 1:1 auf der Platte der NSLU2 gespiegelt werden. Zudem kann über das Netz eine Sicherung von mehreren GB auch recht langwierig werden. Wer bei 50 GB die Sicherung nicht über Nacht laufen lassen möchte, der kann natürlich die externe Platte an seinen Rechner direkt anschließen, und die Verzeichnisse erstmal komplett in das Backupverzeichnis der USB Platte kopieren.

Ich habe hier als zweite Variante eines Backupsriptes nun ein Beispiel mit 6 Shares geschrieben. Zudem um ein Feature erweitert: Ich grenze die Zeit ein, in der ein Backup gefahren werden darf. Und zwar möchte ich z.B. dass die Backups erst nach 9 Uhr gefahren werden, da z.B. mein Rechner in der Regel vor 9 Uhr wenn überhaupt nur kurzfristig an ist. Somit vermeide ich, dass ich eventuell während eines Backups gezwungen bin, die Maschine auszuschalten.


#!/bin/sh
# Backupscript fuer die NSLU2 -- mit Zeitstempel --
# Gargi 2007
# getestet auf unslung 6.8 beta !!!!
# Das Script funktioniert nur mit den installierten nail, coreutilis und rsync:
# ipkg install coreutils rsync nail
# Bitte noch eine logdatei anlegen:
# touch /var/log/backup

# KONFIGURATIONSBEREICH ########################

ip=192.168.1.5 # Die IP des zu scannenden Rechner

verzeichnis=transfer1 # Das zu sichernde freigegebene Verzeichnis
verzeichnis2=transfer2
verzeichnis3=transfer3
verzeichnis4=transfer4
verzeichnis5=transfer5
verzeichnis6=transfer6

# Weitere Verzeichnisse koennen ergaenzt werden
# verzeichnis2=xyz  

loginname=backup # Loginname auf den zu sichernden Rechner

loginpassword=1234567 # Loginpasswort - Bitte stelle sicher, dass aus Sicherheitsgruenden unr root diese 
Datei lesen kann

btarget=backup # Zielverzeichnis der Backups auf der Slug

intervall=3 # Groesse des Intervalls an Tagen zwischen den Sicherungen

mailadresse=meine @ emailaddy.de # Deine E-Mailadresse

uhrzeit=09 # Ab dieser Stunde werden erst Backupsgezogen. Vorher nicht.

# ENDE DES KONFIGURATIONSBEREICHES##########

# Stelle fest, ob bereits ein Sync laeuft um Ressourcen zu schonen
if [ -f /tmp/backup.lock ]
    then
    echo "backup.lock gefunden. Breche Vorgang ab."
    echo "Achtung! Die Slug versuchte ein Backup zu starten und hat dabei eine Sperrdatei gefunden. Das deutet
 darauf hin, dass bereits eine Instanz der Sicherung laeuft. Die zweite Instanz startet, sobald der erste Prozess
 beendet ist. Wenn Du diese Meldung laufend erhaelst, dann ist das ein Hinweis, dass die Sicherung vorzeitig 
aufgrund eines Fehlers abgebrochen ist. Entferne dann auf der Slug die Datei /tmp/backup.lock und starte das 
Backupscript manuell um Fehler auszuschliessen." > mail.txt
    nail -s "[Backup] Backup.lock entdeckt" -q mail.txt $mailadresse < /dev/null
    rm mail.txt
    exit 1
else
    echo Fein, die Slug hat Luft fuer ein Backup
fi

# Beende das Script vor einer bestimmten Uhrzeit
zeit=$(date +%H)
if [ $zeit -lt $uhrzeit ];then
    echo das ist mir zu bald am morgen
    echo "Zwischen 0 und $uhrzeit Uhr sind Backups ausgeklammert. Stoppe Funktion bis $uhrzeit Uhr" > mail.txt
    nail -s "[Backup] Guten Morgen Nachricht" -q mail.txt $mailadresse < /dev/null
    rm mail.txt
    exit 1
else
    echo Die Zeit geht in Ordnung, wir koennen versuchen, das Backup zu starten.
fi
    
# Pruefe, ob rsync und die coreutils vorhanden sind. Falls nicht automatisch nachinstallieren
if [ -f /opt/bin/rsync ]
    then
    echo "rsync ist installiert, alles bestens"
else
    ipkg install rsync
fi

if [ -f /opt/bin/wc ]
    then
    echo "coreutils sind installiert, alles bestens"
else
    ipkg install coreutils
fi

if [ -f /opt/bin/nail ]
    then
    echo "nail ist installiert, alles bestens"
else
    ipkg install nail
    echo "bitte konfiguriere den Nail"
fi
    
# schauen wir, ob wir loggen koennen
if [ -f /var/log/backup ]
    then
    echo "wir haben ein logfile, nice"
else
    touch /var/log/backup
fi

# Noch ein paar Variablen
Datum=$(date +%d.%m.%g--%R)
SDatum=$(date +%d.%m.%g)

# Pruefe die letzte Sicherung auf das Alter
ergebnis=`find /$btarget/*.tstamp.txt -type f -mtime +$intervall | wc -l`

# Checken ob das der erste Sicherungslauf ist
ls /$btarget/*.tstamp.txt 

if [ $? != 0 ]; then
   zusatz=1
else
   zusatz=0
fi

# Schwellenwert errechnen
let "schwelle=$ergebnis + $zusatz"

if [ $schwelle = 0 ]; then

# wir sind auf dem aktuellen Stand
         echo "$Datum ($ip): Backup ist aktuell" >> /var/log/backup
         echo Backup ist auf dem letzten Stand

# Bitte folgende Zeilen falls diese Mail nicht gewuenscht ist
         echo "$Datum ($ip): Backup ist auf dem letzten Stand" > mail.txt
         nail -s "[Backup] Backup ist aktuell" -q mail.txt $mailadresse < /dev/null
	 rm mail.txt
# Bis hierher maximal auskommentieren

         exit 1
else

# Stelle fest, ob Rechner im Netz aktiv ist
      ping -c 1 $ip > /dev/null
      if [ $? = 0 ]; then

# Rechner ist gefunden, starte Backupprozedur
                   echo "$Datum ($ip): Server is alive ... rock and roll gentlemen!" >> /var/log/backup
                   echo Zielrechner gefunden
                   sleep 2

# Offenes Backupverzeichnis loeschen, bei rsync eigentlich ein Quatsch
#                   rm -r /$btarget/$verzeichnis
#                   rm -r /$btarget/$verzeichnis2

# Mounte den Sambashare des zu sichernden Pfades 
                   mkdir /mnt/$verzeichnis 
                   mkdir /mnt/$verzeichnis2
                   mkdir /mnt/$verzeichnis3
                   mkdir /mnt/$verzeichnis4
                   mkdir /mnt/$verzeichnis5
                   mkdir /mnt/$verzeichnis6

                   smbmount //$ip/$verzeichnis /mnt/$verzeichnis -o username=$loginname,password=$loginpassword
                   smbmount //$ip/$verzeichnis2 /mnt/$verzeichnis2 -o username=$loginname,password=$loginpassword
                   smbmount //$ip/$verzeichnis3 /mnt/$verzeichnis3 -o username=$loginname,password=$loginpassword
                   smbmount //$ip/$verzeichnis4 /mnt/$verzeichnis4 -o username=$loginname,password=$loginpassword
                   smbmount //$ip/$verzeichnis5 /mnt/$verzeichnis5 -o username=$loginname,password=$loginpassword
                   smbmount //$ip/$verzeichnis6 /mnt/$verzeichnis6 -o username=$loginname,password=$loginpassword

# Checke ob ordentlich gemountet werden konnte. Suche Aktivierungsmarke am Share
                   if [ -f /mnt/$verzeichnis/sichern.txt ]
                            then

#Sperrdatei anlegen
                           touch /tmp/backup.lock
                           echo setze Sperrdatei fuer eine weitere Instanz > /tmp/backup.lock

                           echo "$Datum ($ip): Achtung! Ich starte das Backup. Bitte Rechner bis zum Abschluss 
 laufen lassen. Sobald das Backup beendet ist erhaelst Du eine Benachrichtigung 
per E-Mail." > mail.txt
			   nail -s "[Backup] Backup gestartet" -q mail.txt $mailadresse < /dev/null
                           rm mail.txt   

# Fahre das Backup, veraendere die Zugriffsrechte
                          rsync -a /mnt/$verzeichnis /$btarget/ --delete
                          rsync -a /mnt/$verzeichnis2 /$btarget/ --delete
                          rsync -a /mnt/$verzeichnis3 /$btarget/ --delete
                          rsync -a /mnt/$verzeichnis4 /$btarget/ --delete
                          rsync -a /mnt/$verzeichnis5 /$btarget/ --delete
                          rsync -a /mnt/$verzeichnis6 /$btarget/ --delete
                          chown -R $btarget:everyone  /$btarget
                          chmod -R 755 /$btarget

# Backupverzeichnis wieder aushaengen
                          umount /mnt/$verzeichnis
                          umount /mnt/$verzeichnis2
                          umount /mnt/$verzeichnis3
                          umount /mnt/$verzeichnis4
                          umount /mnt/$verzeichnis5
                          umount /mnt/$verzeichnis6

# Backup-Rolle, loesche aeltestes Backup
                          # rm /$btarget/save.3.tar.gz 
                          # mv /$btarget/save.2.tar.gz /$btarget/save.3.tar.gz 
                          # mv /$btarget/save*.1.tar.gz /$btarget/save.2.tar.gz 

# Gesicherte Dateien kompremieren
                          # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis
# Weitere Verzeichnisse bitte wie folgt anhaengen:
                          # tar cf /$btarget/save$SDatum.1.tar /$btarget/$verzeichnis /$btarget/$verzeichnis2
                          # gzip /$btarget/*.1.tar

# Loesche alten Zeitstempel
                          rm /$btarget/*.tstamp.txt

# Setze neuen Zeitstempel
                          touch /$btarget/$SDatum.tstamp.txt

# Benachrichtigungen fuer das Protokoll und per E-Mail
                          echo "$Datum ($ip): Backuped successfully" >> /var/log/backup
                          echo Backup beendet
			  echo "$Datum ($ip): Das Backup wurde beendet." > mail.txt
			  echo "Bitte pruefe, ob das Backup soweit funktioniert." >> mail.txt
			  nail -s "[Backup] Backup beendet" -q mail.txt $mailadresse < /dev/null
			  rm mail.txt

# Entferne Sperrdatei
                          rm /tmp/backup.lock
                  
                           else

                           echo habe zwar eine Maschine gefunden, es existiert aber kein Share. Vermutlich ist das 
nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist leer. Dann gibt es
 nichts zu tun.

# Bitte folgende Zeilen auskommentieren, falls diese Mail nicht gewuenscht ist:
                           echo "$Datum ($ip): habe zwar eine Maschine gefunden, es existiert aber kein Share. 
Vermutlich ist das nicht das korrekte Betriebssystem oder die richtige Maschine. Oder aber das Verzeichnis ist 
leer. Dann gibt es nichts zu tun." > mail.txt
			   nail -s "[Backup] Share nicht gefunden" -q mail.txt $mailadresse < /dev/null
			   rm mail.txt   
# Bis maximal hier auskommentieren.

                          exit 1                    
                   fi
      else
      echo "$Datum ($ip): Server is dead ... nothing to care about" >> /var/log/backup

# Bitte folgende Zeilen auskommentieren, falls die E-Mail nicht gewuenscht ist:
      echo "$Datum ($ip): Server is dead ... nothing to care about"  > mail.txt
      nail -s "[Backup] Server ist nicht aktiv" -q mail.txt $mailadresse < /dev/null
      rm mail.txt   
# Bis maximal hier auskommentieren.

      fi
fi


Falls Ihr nun mehre Rechner im Netz sichern wollt, dann legt hierfür ein neues Script an. Dieses startet über die cron einwenig zeitversetzt zum anderen Script, damit die sich nicht so leicht in die Quere kommen. Damit dies aber auch nicht passieren kann und die Slug durch zwei parallel laufenden Backupvorgänge in die Knie gezwungen wird, habe ich einen Sperrmechanismus integriert, der dafür sorgt, dass ein zweites Script nur dann starten kann, wenn das erste auch beendet ist.

Viel Spaß beim Sichern!