Automatisches Erstellen eines Backups (Pi sichert sich selbst)

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Automatisches Erstellen eines Backups (Pi sichert sich selbst)? Schau mal ob du hier fündig wirst!

  • Hi,

    vielen Dank für das schöne Tutorial!!! Ich bin absoluter Anfänger mit dem Raspberry und Linux und von daher sind solch gut erklärte Tutorials echt topp! Ich habe das Backup-Script von Seite 1 auf meinem Raspberry implementiert und es läuft einwandfrei - zumindest die dd Variante. Die Sicherung mit tar spricht mich allerdings mehr an, da dies doch wesentlich schneller abläuft (32GB Karte...) als mit dd.


    Nun zu meiner dummen Frage: Wie kriege ich denn eine Sicherung mittels TAR wieder auf die SD-Karte gespielt? Irgendwie stehe ich hier auf dem Schlauch... Neben einem Macbook habe ich nur noch einen Windowsrechner. Vielleicht bist Du so nett und gibst dazu noch ein paar kurze Hinweise., wie das mit dem Restore am besten gehandhabt wird. (Vielleicht mit konkreten Befehlszeilen :blush: ) Verunsichert hat mich auch die Aussage hier im Thread bezüglich der "vorangestellten /"?

  • Freut mich dass Du erfolgreich mit dem Tutorial ein DD Backup mit einem kleinen bash Script erstellen konntest. War von mir auch so gedacht an hand eines kleinen praktischen Beispiels ein wenig in die bash Programmierung einzuführen.

    Bzgl Restore hast Du einen wunden Punkt getroffen ... :blush: ... das habe ich wirklich vergessen. Ich werde es demnächst nachtragen - versprochen :)

    Bis dahin kannst Du vielleicht per Suchmaschine Hinweise finden wie es geht. Ein paar Anschubhinweise:

    1) dd backup - Geht in einem Befehl - einfach Ziel und Quelle vertauschen. ABER ACHTUNG: Sei sicher dass Dein Ziel Deine SD Karte ist ... sonst zerstörst Du u.U. die Daten einer ganze Platte !
    2) tar backup - tar bietet auch einen Parameter für den extract aus einem tar Archiv (-x). Allerdings muss die Ziel SD Karte vorher korrekt partitioniert und formatiert sein. Der Poormans Approach ist einfach noch mal ein raspbian auf der SD Karte neu installieren und die Partition extenden. Dann alles auf der Rootpartition löschen und das tar Backup zurücksichern. Alternativ sichert man sich das Partitionslayout der bestehenden SD Karte mit z.B. sfdisk und restored es auf der neuen SD Karte. Dann noch die beiden Partitionen formatieren - und die SD Karte ist fertig für den restore des tars. Letzteres ist aber aufwändiger - aber prädestiniert für ein bash Script ;) .

    Diverse Backup und Restore Features findest Du in meinem raspiBackup Script was ich auch selbst für meine Raspis benutze. Das ist aber weniger geeignet um sich in die bash einzuarbeiten - sondern um es einfach für sein Backup zu benutzen :D

  • Hallo,

    vielen Dank für die Hinweise, da wühle ich mich doch glatt mal durch!

    Wie Du schon geschrieben hast, dass beste Backup nützt nichts, wenn man es nicht wieder eingespielt bekommt. Daher bin ich immer daran interessiert, wie der Weg zurück wohl aussieht ;)
    Wäre super, wenn Du das heir vielleicht irgendwann mal einarbeitest. Ich fürchte ich bin nicht der einzige Linux-Anfänger, der sich da durchwühlt....

    Viele Grüße

    Markus


  • ... Wäre super, wenn Du das heir vielleicht irgendwann mal einarbeitest...


    Wie schon geschrieben ... versprochen ... nur wird das ein wenig dauern ...

    Zitat

    ...Ich fürchte ich bin nicht der einzige Linux-Anfänger, der sich da durchwühlt....


    Dem Feedback nach in diesem Thread sind es aber wohl nur eine Hand voll :neutral:

  • Hallo Framp,


    Dem Feedback nach in diesem Thread sind es aber wohl nur eine Hand voll :neutral:

    nö, nicht jeder, der an Backup-Möglichkeiten interessiert ist, gibt auch seinen Senf dazu ab. Dein Skript ist aber eine feine Sache - insbesondere für Einsteiger.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (11. August 2015 um 22:23)

  • MarkusM: Wie versprochen habe ich eine Beschreibung wie man den Restore machen kann hinzugefügt. dd ist einfach - für tar sollte man wohl ein kleines Script schreiben ;)

    Wenn noch was unklar ist einfach melden.
    Automatisch zusammengefügt:


    ... Dein Skript ist aber eine feine Sache - insbesondere für Einsteiger...

    Klar, denen hilft es sicherlich und das ist sicher auch die primäre Zielgruppe. Aber ich benutze das Script auch selbst um meine Raspis zu sichern ... aber zaehle mich aber nicht mehr zu den Einsteigern :cool:

  • Hallo
    Super Sache mit dem autom. Backup, wollte ich als Startup gleich mal nachmachen, hat dann doch nicht geklappt. Irgendwas geht schief und den Fehler finde ich natürlich nicht...
    würde mich über eure Hilfe freuen! Danke! lg
    scheint ja was mit Berechtigungen zu sein, nur wie behebe ich das ?

    die Ausgabe ist:
    pi@raspberrypi /usr/local/bin $ . backup.sh
    Failed to stop samba.service: Access denied
    dd: konnte „/dev/mmcblk0“ nicht öffnen: Keine Berechtigung
    Failed to start samba.service: Access denied
    /media/usbstick /usr/local/bin
    ls: Zugriff auf /media/usbstick/Backup* nicht möglich: Datei oder Verzeichnis nicht gefunden
    rm: fehlender Operand
    „rm --help“ liefert weitere Informationen.
    /usr/local/bin

    was habe ich gemacht:
    /usr/local/bin/backup.sh mit dem Code aus #1 erzeugt
    Rechte 755 vergeben
    crontab angelegt
    Pfad: /media/usbstick -> dort ist der Stick gemountet, dachte das müsste ich machen...

    backup.sh:

    #!/bin/bash
    #
    # Konstanten
    #
    BACKUP_PFAD="/media/usbstick"
    ANZAHL_BACKUPS="1"
    BACKUP_NAME="Backup"
    STOP_SERVICES="service samba stop"
    START_SERVICES="service samba start"
    #
    # Stoppe services
    #
    ${STOP_SERVICES}
    #
    # Backup mit dd erstellen
    #
    dd if=/dev/mmcblk0 of=${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d-%H%M%S).img bs=1MB
    #
    # Backup mit tar erstellen
    #
    #tar -cpz --one-file-system -f ${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d-%H%M%S).tgz \
    # --exclude=${BACKUP_PFAD} \
    # --exclude=/proc \
    # --exclude=/lost+found \
    # --exclude=/sys \
    # --exclude=/mnt \
    # --exclude=/media \
    # --exclude=/dev \
    # /
    #
    # Starte services
    #
    ${START_SERVICES}
    #
    # Loeschen alter Backups
    #
    pushd ${BACKUP_PFAD}; ls -tr ${BACKUP_PFAD}/${BACKUP_NAME}* | head -n -${ANZAHL_BACKUPS} | xargs rm; popd

    Einmal editiert, zuletzt von 4711 (18. Oktober 2015 um 12:32)

  • Hi
    Danke für die pos. Aufnahme!

    ich habs mit "sudo backup.sh" geschafft, es scheint zu laufen, wie lange darf das laufen, ich habe keinen prompt seit einiger Zeit mehr, aber am usb-stick liegt schon was drauf !!!

    lg

    # mein usb-stick hat nur 16gb, die micro sd 8gb, kann das alte Backup gelöscht werden bevor das neu gemacht wird, wären zumindest 2 möglich, sonst ja nur eins... aber löschen und dann ein Fehler beim erstellen... ist halt die Frage, oder wird auf jeden Fall gelöscht, auch wenn das schreiben nicht fkt. hat ?

    Einmal editiert, zuletzt von 4711 (18. Oktober 2015 um 13:39)

  • Wird das letzte Backup immer gelöscht, auch wenn das erzeugen nicht fkt. hat?

    Mir sind die Möglichkeiten des Backups noch nicht ganz klar. dd, rsync...
    Wäre es ein Möglichkeit, ich weis jetzt nicht woran du gerade arbeitest, immer ein volles Backup am USB-Stick zu haben + Änderungen(mit Versionen) (tägl.,stündlich..), also eine Kombination. Wenn die SD verreckt, dann muss das volle Backup + letzte Änderungen aufgespielt werden.
    lg

  • Man sollte schon wie Du schreibst testen, ob der Backup OK war bevor man die älteren Backups löscht. Das Script muss dann wie folgt aussehen:
    [code=php]#!/bin/bash
    #
    # Konstanten
    #
    BACKUP_PFAD="/media/usbstick"
    ANZAHL_BACKUPS="1"
    BACKUP_NAME="Backup"
    STOP_SERVICES="service samba stop"
    START_SERVICES="service samba start"
    #
    # Stoppe services
    #
    ${STOP_SERVICES}
    #
    # Backup mit dd erstellen
    #
    dd if=/dev/mmcblk0 of=${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d-%H%M%S).img bs=1MB
    #
    # Merke ob dd erfolgreich war
    #
    rc=$?
    #
    # Starte services
    #
    ${START_SERVICES}
    #
    # Loeschen alter Backups wenn dd erfolgreich war
    #
    if [[ $rc != 0 ]]; then
    echo "DD fehlerhaft mit rc $rc beendet"
    exit 127
    else
    pushd ${BACKUP_PFAD}; ls -tr ${BACKUP_PFAD}/${BACKUP_NAME}* | head -n -${ANZAHL_BACKUPS} | xargs rm; popd
    echo "DD backup erfolgreich erstellt"
    fi
    [/php]

    Deine weiteren Idee zu Versionen usw sind natuerlich auch moeglich :) . Dazu musst Du Dich dann weiter mit der bash Programmiersprache beschaeftigen und das Script entsprechend erweitern. Ueber das Tutorial geht das aber weit hinaus.

    Ich schlage vor Du liest Dich weiter in die bash ein - probierst das Script entspechend zu erweitern - und erstellst dann hier im Forum bei Problemen neue Threads mit Deinen Fragen bzw Problemen zur bash. Dieser Tutorial Thread hat damit aber nichts mehr zu tun ;)


  • Naja, das mit selber machen wird wohl noch ein weilchen dauern...


    Rom wurde auch nicht an einem Tage erbaut ;)

    Zitat

    aufgefallen ist mir dass das dd backup exakt die Größe der SD Karte hat, nicht der Daten?

    Ja, das ist ein Merkmal des dd Backups. Andere Merkmale habe ich mal hier zusammengeschrieben. Wenn Du nur die Daten sichern willst musst Du tar nehmen. Das ist dann i.d.R. wesentlich kleiner als das dd Backup.

  • Hallo,

    erstmal danke für das Script, leider will das Script bei mir nicht ganz so laufen.

    Meins schaut so aus.
    Es ist bewusst alles auskommentiert da ich noch beim Testen bin.

    Wenn ich das Script nun mit sudo bash backup.sh ausführe, erhalte ich folgende Meldungen

    Zitat


    : No such file or directorylder/mount/

    Usage: /etc/init.d/freeradius start|stop|restart|force-reload|reload

    Könnt ihr mir da bitte helfen?
    Vielen Dank

  • Wenn ich das Script nun mit sudo bash backup.sh ausführe, erhalte ich folgende Meldungen

    Code
    sudo ./backup

    reicht

    Zitat

    : No such file or directorylder/mount/


    Du musst den Folder einmal anlegen mit

    Code
    sudo mkdir -p /Backupfolder/mount/


    Allerdings würde ich /mnt benutzen. Das ist der normale Mountpoint den man benutzt. Ausserdem solltest Du den wieder am Ende freigeben mit

    Code
    umount /mnt

    .

    Zitat

    Usage: /etc/init.d/freeradius start|stop|restart|force-reload|reload


    So wie die Fehlermeldung sagt musst Du

    Code
    /etc/init.d/freeradius start

    benutzen und nicht

    Code
    service freeradius start

    .
    Ausserdem würde ich die Services in umgekehrter Reihenfolge start wie sie gestoppt wurden.

Jetzt mitmachen!

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