Automatisches Erstellen eines Backups (Pi sichert sich selbst)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Aha, das zeigt das du die Datei mit einem nicht Linux-kompatiblen Editor unter Windows bearbeitet hast
    Windows nutzt einen anderen Zeilenumbruch den Linux aber nicht versteht

    Deshalb entweder den Code direkt in nano copy&pasten, oder einen Linux-Kompatiblen Editor unter Windows nutzen, wie zum Beispiel notepad++ oder Proton oder UltraEdit

    Desweiteren wird /bin/Bash mit grossem B ebenfals Probleme machen da es kein /bin/Bash gibt sondern nur /bin/bash (GROSS-/klein-Schreibung ist unter Linux extrem wichtig)

  • Automatisches Erstellen eines Backups (Pi sichert sich selbst)? Schau mal ob du hier fündig wirst!

  • Genau. Wobei ich nun echt verwundert bin. Hab es eigentlich mit Notepad++ gemacht :)

    Ich habe nun folgendes noch gefunden
    http://linuxdo.blogspot.de/2012/05/solvin…rpreter-no.html
    Die Lösung klappt aber bei mir auch nicht.
    Wäre das hier ein Ansatz? Hier kommt die Meldung dos2unix: command not found.

    Hm, ich denke ich schaue mal wie ich ein neues Script über die Konsole erstelle.

    -- Edit ---
    Hab noch was gefunden
    sudo tr -d '\r' < raspiBackup.sh > raspiBackup1.sh
    Ist aber auch mit der Meldung bash: raspiBackup1.sh: Permission denied gescheitert

    Einmal editiert, zuletzt von Dome_2001 (26. August 2013 um 12:07)

  • Mach es doch ganz einfach, bevor du jetzt stundenlang herrum probierst um das Datei Format zu ändern:

    1. Lösch die Datei: rm -f /usr/local/bin/raspiBackup.sh

    2. öffne nano: nano /usr/local/bin/raspiBackup.sh

    3. markier den Code des Scripts: mit gedrückt gehaltener linken Maustaste text markieren

    4. Code in die Zwischenablage kopieren: Tastenkombination STRG+c oder Rechtsklick und Kopieren

    5. Zwischenablage in nano einfügen: Tastenkombination SHIFT+EINFG oder Rechtsklick

    6. Datei speichern und nano beenden: Tastenkombination STRG+o und STRG+x

    7. Datei ausführbar machen: chmod +x /usr/local/bin/raspiBackup.sh

    8. Ausführen: /user/local/bin/raspiBackup.sh


    Ansonsten deine Datei unter Windows im UNIX Format speichern und neu transferieren..

  • JUHU!!!
    Es klappt alles :) Sogar über crontab ...
    Jetzt noch eine Frage, aktuell sichere ich ja nur meine SD-Karte damit. Wenn ich den angeschlossenen Datenträger (Noch ein USB-Stick) auch sichern will dann muss ich ja das script nur an der Stelle hier anpassen
    dd if=/dev/mmcblk0 of=/backup/raspi/MeinBackup-$(date +%Y%m%d-%H%M%S).img bs=1MB

    Anstatt /dev/mmcblk0 muss ich ja dann den Mount vom Stick eingeben. Und natürlich den Namen vom Backup anpassen.

    Stimmts?

    Kann ich das alles in ein Script reinpacken?
    Quasi
    dd if=/dev/mmcblk0 of=/backup/raspi/MeinBackup-$(date +%Y%m%d-%H%M%S).img bs=1MB --> SDKarte
    dd if=/dev/mmcblk0 of=/backup/raspi/MeinBackup-$(date +%Y%m%d-%H%M%S).img bs=1MB --> USB Stick

    Oder muss ich 2 Scripte daraus machen und planen?

    Kann ich hier eigentlich noch ein wake-up-on-lan einbauen? IOch sichere ja alles auf einen Windows Server weg der nicht immer zwingend verfügbar sein muss.

    Wenn das nun klappt habe ich alles.

    Danke für den super Support. Hab heute auch richtig was gelernt!

  • if=/dev/mmcblk0 ist hier die Quelle, also Du würdest dann die SD-Card noch einmal kopieren.

    Hier musst Du wenn dann das Device angeben was der USB Stick ist.

    Ich habe mir das Script auch mal eben angeguckt und muss wie so einige andere auch sagen dieses Script würde ich nicht benutzen.
    Ein Backup mit dd im laufenden Betrieb kann schnell nach hinten losgehen.

    Da hier einige den PI auch in Verbindung mit Datenbanken benutzen z.B. Ownloud usw. wird es gerade dabei immer Änderungen auf dem Filesystem kommen. Wenn das dann genau in dem Zeitpunkt mit dem Backup zusammen kommt wird man von dem Backup nichts haben, da es Schrott ist.

  • Das habe ich verstanden. Ich denke ich mache da einfach 2 Scripte draus und bastel das alles so zusammen.
    Schaue gerade ob ich einen Befehl finde mein Script raspiBackup.sh zu kopieren und als raspiBackup2.sh abzulegen :)
    Dann nur noch die Quelle anpassen und das müsste ja passen.
    An welcher STelle und ob man da noch WOL einbauen kann würde mich noch brennend interessieren :)


  • Kann ich das alles in ein Script reinpacken?
    Quasi
    dd if=/dev/mmcblk0 of=/backup/raspi/MeinBackup-$(date +%Y%m%d-%H%M%S).img bs=1MB --> SDKarte
    dd if=/dev/mmcblk0 of=/backup/raspi/MeinBackup-$(date +%Y%m%d-%H%M%S).img bs=1MB --> USB Stick

    if bedeutet: input file
    of bdeutet: output file

    Da hast du bei der 2.Zeile vergessen den Device-Pfad vom USB-Stick zu setzen ;)
    Wenn du nur einen USB-Stick angeschlossen hast (bzw allgemein auch keine USB-Festplatte) dann wird der Stick eigentlich als /dev/sda bzw die Partition als /dev/sda1 eingebunden. Das kannst du über den Befehl dmesg prüfen


    Kann ich hier eigentlich noch ein wake-up-on-lan einbauen? Ich sichere ja alles auf einen Windows Server weg der nicht immer zwingend verfügbar sein muss.

    Wake-on-Lan ist etwas anderes.. Das weckt den Rechner auf bzw fährt ihn hoch sobald er übers Netzwerk angesprochen wird

    Wie hast du denn die Windows-Freigabe eingebunden? Wenn das Verzeichnis über "mount" eingebunden ist dann würde ich prüfen ob der mount-Point eingebunden wurde - aber das kommt darauf an wie du das umgesetzt hast

  • Wake-on-Lan ist etwas anderes.. Das weckt den Rechner auf bzw fährt ihn hoch sobald er übers Netzwerk angesprochen wird

    Wie hast du denn die Windows-Freigabe eingebunden? Wenn das Verzeichnis über "mount" eingebunden ist dann würde ich prüfen ob der mount-Point eingebunden wurde - aber das kommt darauf an wie du das umgesetzt hast

    Einfach in der Freigabe eine Datei ablegen z.B. alive, da muß auch nichts drin stehen.

    dann einfach ein:

    if [ -e /path/to/mounted/windows/share/alive ]
    then
    # copy backup command
    fi

  • Den ersten Teil habe ich kapiert.
    Zum zweiten Teil. Ich hätte gerne das mein Windows Server vor der Scriptausführung geweckt wird. Wenn der da ist, soll die Sicherung beginnen. Aber da der Echt flott ist dauert das nicht lange.
    Ich habe mit dem Befehl mount cifs usw. die Freigabe eingebunden und in der fstab hinterlegt. Mehr habe ich nicht gemacht. Somit war der Mountpunkt vom Server bei jedem Neustart vom Raspi da. Geprüft habe ich abe rnicht ob mein Server noch in Standby geht. Muss ich noch machen. Allerdings mächte ich auf nummer sicher gehn.

    Ich bin am überlegen ob ich in meine crontab einfach folgenden Eintrag hinzufüge
    58 20 * * 0 wakeonlan <Mac Adresse Server>
    Wäre das nicht eine Lösung?

  • in der Crontab bitte den kompletten Path zu wakeonlan eintragen.
    which wakeonlan <- gibt den kompletten Path aus.

    Aber wieso einen 2. Crontab Eintrag?
    Pack das einfach in das Script.

    Man könnte z.B. folgendes ins Script pachen
    * mit ping -c 1 -w 1 <Windows-IP> in einer if-Abfrage den Rückgabewert von Ping auswerten
    * Ist dieser 0, ist der der Rechner erreichbar. Ist der != 0 dann ist er wohl offline.
    * wakeonlan ausführen
    * Sleep 30, warten bis er sehr wahrscheinlich online sein wird.
    * Dann noch checken ob die Freigabe gemounted ist und ggf. das mit dem File Test machen.
    * Wann das alles geklappt hat kann das Script weiter laufen und das mit dem Backup machen.

    Wenn Du wakeonlan in einem getrennten Script/Cronjob machst weisst Du ohne Checks nicht ob das aufwecken geklappt hat.
    Einfach alles zu einem Script machen, checken Rechner online, wenn nicht aufwecken, gegencheck, Backup, fertig.

    Mal eine bescheidene Frage.

    Ist den meisten eigentlich bewusst, das wenn sie Windows haben nicht ohne weiteres dieses Backup wieder zurück spielen können?

    Windows hat kein dd, aber tar kann man selbst unter Windows öffnen. Wenn man dann mal nur einzelne Dateien aus dem Backup benötigt ist das eine Sache von 2-3 Minuten.
    Vor allem wenn man nur einmal täglich Backup macht und sich am Vormittag danach sehr viel ändert, man dann Nachmittags nur eine Config braucht muss man alles zurück spielen. Daten zwischen Backup und zurückspielen sind dann verloren.

    "Nachteil mit tar ist, dass man dazu auch ein Linux System braucht, um die Daten im Backupfall wieder zu erhalten. Bei rsync wird noch weniger gesichert denn dieses sind nur die geänderten Daten."

    Das ist gerade der Vorteil von tar und rsync. Wieso soll ich 7,8 GB bei dd mit sichern in denen eh nichts steht, wenn das System nur 200 MB aktuell verbraucht.
    Rsync sichert beim ersten mal alles komplett. Danach nur die Änderungen. Vorteil: Wöchentlich Fullbackup, danach nur die Änderungen.
    Beim zurückspielen der Daten kann man schnell einzelne Zustände zurück spielen, was einfach schneller ist.


  • 58 20 * * 0 wakeonlan <Mac Adresse Server>
    Wäre das nicht eine Lösung?

    Um WOL nutzen zu können muss der entsprechende Rechner auch so konfiguriert werden, sprich du musst deinen Windowsrechner erst mal so einstellen was er auf Wake-On-Lan reagiert ;)

    Zitat

    Im ersten Schritt sollte man im BIOS des Rechners überprüfen, ob Wake-On-LAN überhaupt aktiviert ist. Die in Rechnern verbauten BIOS-Arten sind zu vielfältig, um detaillierte Tipps geben zu können. Doch unter den Bezeichnungen "Wake on LAN" oder "Power on PCI/PCIE Devices" sollte man fündig werden.

    Eventuell muss man auch einen Schraubendreher in die Hand nehmen. Ältere PCI-Netzwerkkarten wurden oft mit einem kleinen Kabel mit dem Mainboard verbunden. Fehlt dieses Kabel, so geht eventuell WOL gar nicht. Moderne PCI-Netzwerkkarten brauchen dieses Kabel nicht mehr. Auf dem Mainboard integrierte Netzwerkadapter benötigen das Kabel mit Sicherheit ebenfalls nicht.

    Zum aufwecken stehen verschiedene Programme zur Verfügung:
    etherwake
    wakeonlan

    Das Backup-Script solltest du dann aber ein bischen modifizieren damit es wartet bis der Windowsrechner hoch gefahren ist bevor es weiter macht (die Scripts werden von oben nach unten abgearbeitet), oder du machst einen weiteren crontab Eintrag der ein paar Minuten vor dem Backup Script ausgeführt wird aber im Backupscript solltest du dann prüfen ob die Netzwerkfreigabe verfügbar ist und falls nicht das es noch mal ein paar Sekunden/Minuten wartet...
    Also zum Beispiel:

    Code
    if [ ! -f /path/to/mounted/windows/share/alive ]; then 
      echo "waiting 120 secs for network-share.."
      sleep 120
      $0
      exit
    fi

    Das " sleep " sorgt dafür dass das Script für die angegebenen Sekunden pausiert wird
    Das " $0 " beinhaltet das Script also zB " /usr/local/bin/raspiBackup.sh " , was bewirkt das es erneut ausgeführt wird
    Das " exit " beendet das aktuelle Script damit es nicht weiter macht
    ..Setzt man das an den Anfang der Scriptdatei würde die if Schleife also erst prüfen ob die Windows-Freigabe verfügbar ist, falls nicht ( ! = not ) würde das Script für 120 Sekunden pausieren und anschliesend erneut ausgeführt werden - bei dem erneuten ausführen wird wieder geprüft ob die Netzwerk-Freigabe vorhanden ist usw usw usw

  • Ist mir schon bewusst, allerdings bin ich in Linux noch nicht soweit das ich meinen WinServer ablösen kann :)
    Den nutze ich als Mail-, File und TV Server.
    Ich bin mir auch bewusst dass das alles mit Linux auch geht und sicherlich auch noch performanter aber erst muss ich richtig in dem Thema drinnen sein.
    Daher erste Gehversuche mit Raspi
    Versuche nun Deine Anregungen für WOL in mein Backup Script einzubauen.

  • ruedigerp: Ja du hast vollkommen Recht, deshalb hab ich hier ja auch bereits "protestiert", insbesondere weil eine wöchentliche Erstellung eines Komplett-Images die SD viel zu sehr belastet...

    Es macht viel mehr Sinn entweder rsync zu benutzen oder nur die Dateien/Verzeichnisse zu sichern die einem Wichtig sind


    Dome_2001: Guck mal > hier < da hab ich ein Sinnvolleren Weg beschrieben

  • Um WOL nutzen zu können muss der entsprechende Rechner auch so konfiguriert werden, sprich du musst deinen Windowsrechner erst mal so einstellen was er auf Wake-On-Lan reagiert ;)

    Das macht er bereits :D

    Zumindest hat er es bis gestern alles noch artig gemacht.

    Dein Script werde ich verwenden.

    Danke Euch!

  • Con:
    1) Nur eine Backupversion verfügbar. Wenn man mal dummerweise etwas gelöscht hat und das erst nach längerer Zeit feststellt kann man nicht mehr auf ältere Backups zurückgreifen.

    Das ist nicht richtig, man sichert einmal alles und macht am nächsten Tag die Änderungen. Die dann aber in ein extra Verzeichnis geschrieben werden. Montags Full, die restlichen Tage nur die Änderungen.

    Ist die Woche rum wird das letzte Full aus der vorhergehenden Woche noch einmal wegesichert. So kann man auch Wochen und Monate zurück gehen bis man alle Daten hat die man benötigt.

    Wenn man das Backupscript vernünftig macht, dann diese Aussage einfach falsch.

  • Dome_2001: Freut mich, dass da jemand das Tutorial auch dazu benutzt um sich mit der bash Programmierung vertraut zu machen.

    ruedigerp: Du hast natuerlich Recht. Wenn man beim rsync den Verzeichnisnamen jeweils aendert kann man beliebige Backupversionen anlegen lassen. Wenn man dann noch Hardlinks benutzt ist das dann auch noch platzsparend. Meine Aussage hatte ich basierend auf der momentanen neuen Implementierung bei mir @home getan, wo immer nur in genau ein Verzeichnis gesynct wird. Das reicht mir für meine Spielwiese. Aber es macht sicherlich Sinn rsync mit Hardlinks einzubauen. Dann noch daily, weekly, monthly backups aufzunehmen ist wohl etwas Overkill. Wie ich schon oben geschrieben habe werde ich rsync auch einbauen. Dazu muss ich nur mal wieder etwas Zeit finden.
    Zu Deinem Kommentar bzgl dd und ein sich ändernderndes Filesystem: Da hast Du auch Recht. Deshalb gibt es in meiner erweiterten Scriptversion auch die Möglichkeit vor dem Backup Services automatisch zu stoppen wie z.B. Owncloud, mysql, xbmc, usw. Man sollte also schon möglichst alle Aktivitäten stoppen bevor man das Backup anstösst und es zu einer Zeit machen, wo auch sonst nix auf dem System passiert. bei mir ist das immer irgendwann zwischen 3 und 5 Uhr. Wenn dann beim restore irgendwelche Logeinträge fehlen ist das zu verschmerzen.

    Zu dem Problem, dass man Linux benötigt um die Backups zurückzuspielen: Man muss dann eben immer 2 SD-Karten haben: Eines, wo man raspbian draufpackt, dann dort einen CardReader anschliesst und dann das Backup auf die SD-Karte im Cardreader restored. Alles rein Linux basiert. Oder man hat eben einen LinuxDesktop oder -Schlepptop.

  • Bislang gibt es als Backuptype dd, tar und xbmc. Demnächst wird es den Backuptype rsync geben. Es läuft schon bei mir aber ich muss es noch ausgiebiger testen.

    Als Hintergrundinformation was rsync so auszeichnet:

    Damit kann man auch Vollbackups machen. Die Backups werden nicht komprimiert und sind sofort wieder zugreifbar. Der Witz ist der, dass ein erneutes rsync auf ein schon vorhandenes Backup nur die Dateien erneut sichert, die sich in der Zwischenzeit geändert haben. Das reduziert die Backupzeit immens.

    Aussderdem kann rsync sog. Hardlinks nutzen. Der Vorteil ist der, dass man mehrere Backupversionen erstellen kann (also z.B. ein Backup pro Woche) und es werden nur die Änderungen in einem neuen Verzeichnis gesichert. Aber dabei werden sog. Hardlinks in den Verzeichnissen erstellt für Dateien die schon unmodifiziert in vorherigen Backups existieren. Man hat also immer ein Verzeichnis mit allen Dateien - nur belegen identische Dateien keinen zusätzlichen Speicherplatz (nicht ganz richtig - die Zahl der Inodes steigt - aber die sind verglichen mit grossen Dateien sehr klein. Bei ext3 muss man u.U. die inode Anzahl im Filesystem erhöhen. Bei ext4 geschieht das automatisch)

    Die Vorteile sind:

    1) Ein jedes Backupverzeichnis ist immer sofort lesbar
    2) Dateien, die schon in vorherigen Backups so unmodifiziert existierten werden nicht erneut gesichert und belegen dann den entsprechenden Platz auf der Platte sondern es wird nur ein Verzeichniseintrag auf die bereits exitsierende Datei erstellt.

    Ein gewisser Nachteil von rsync zu tar ist dass die Dateien nicht komprimiert werden und demnach mehr Speicherplatz belegen.

    Das ganze Prinzip mit Hardlinks funktioniert nur auf Linux Filesystemen wie ext3 und ext4. ntfs oder fat funktioniert da nicht.

  • Die Backups per rsync funktionieren nun auch im Script. Ein tar Backup dauert bei mir ca 1 Stunde über GB LAN und nfs, das rsync Backup um die 15 Minuten. Alle meine Pis sichern sich jetzt deshalb nur noch per rsync. Ich will sie ja nicht zu sehr belasten ... Parallel wird noch die Root Partition und das Partition Layout der SD Karte gesichert damit ein restore einfacher geht.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!