Home > Einsteiger > Raspberry Pi Datensicherung erstellen

Raspberry Pi Datensicherung erstellen

Wer schon etwas Erfahrung mit dem Raspberry Pi gesammelt hat wird sicherlich auch schon mal bemerkt haben das der Speicher des Pi die Schwachstelle des Mini-Rechners ist, SD-Karten haben eine begrenzte Lebensdauer, diese hängt vor allem davon ab wie oft von der Karte gelesen oder auf diese geschrieben wird. Teilweise sind mir SD-Karten schon im ersten Jahr “gestorben” oder das Dateisystem war zwecks Fehler auf der SD-Karte so korrupt das eine Rettung nicht mehr möglich war.

Daher ist es wichtig zu wissen wie eine Sicherung des Raspberry Pi erstellt werden kann.

SD-Karte

Option 1 – Image Backup der SD-Karte an externem Rechner

Wenn ich aufwändige Software Installationen und Konfigurationen auf einem Raspberry Pi erledigt habe mache ich gerne eine komplette Sicherung der SD-Karte als Image (.img) Datei auf meinem Windows Rechner, das hat den Vorteil das ich das fertig eingerichtete System immer wieder verwenden kann. Diese Methode eignet sich auch für eine Sicherung vor Updates oder vor einer größeren Anpassung an der Software und/oder Konfiguration.

Das Verfahren zur Sicherung ist ähnlich wie das Bespielen der SD-Karten mit einem Betriebssystem (zum Beispiel Raspbian) das als img Datei vorliegt.

Vorteil

  • Einfach ohne zusätzliche Software auf dem Pi, die SD-Karte des RasPi wird immer komplett gesichert

Nachteil

  • Die Image Dateien werden sehr groß und dauern recht lange, die Sicherung muss offline an einem anderen Rechner  mit SD-Leser durchgeführt werden

Wichtig!
Bei einer Sicherung via Image muss die SD-Karte, auf welcher das Image wiederhergestellt werden soll, mindestens so groß sein wie die ursprüngliche Karte. Eine img Datei hat, auch wenn nicht der komplette Platz auf der SD-Karte benutzt wurde, immer die komplette Größe und lässt sich nur schwer verkleinern.

Sicherung mit Win32 Disk Imager erstellen

  1. Ladet euch, falls noch nicht vorhanden die Software Win32 Disk Imager auf euren Rechner und installiert diese
  2. Fahrt euren Raspberry Pi sauber herunter und entfernt die Stromzufuhr
    1. sudo shutdown -h 0
  3. Legt die SD-Karte an eurem Rechner in den Kartenleser ein
  4. Öffnet Win 32 Disk Imager
    1. Wählt einen Speicherort für die img Datei aus und daneben das Laufwerk unter welchem Windows eure SD-Karte anspricht
    2. Dann wir der “Read” Button auswählbar, klickt darauf um die Sicherung zu starten

win32 disk imager backup

Die Wiederherstellung des Image erfolgt auf gleichem Weg via Win32 Disk Imager.

Option 2 – Komplette Image Sicherung des RasPi auf USB oder NAS

Der Raspberry Pi kann sich auch selbst als komplettes Image sichern, hierfür ist allerdings ein externer Speicher, wie zum Beispiel ein NAS oder eine angeschlossene USB-Festplatte notwendig. Die Methode basiert auf dem dd Kommando das via Cronjob regelmäßig ausgeführt wird.

Vorteil

  • Sicherung läuft voll automatisch, die SD-Karte des RasPi wird komplett gesichert, es können mehrere Versionen der Sicherung aufbewahrt werden

Nachteil

  • Die Image Dateien werden sehr groß und es wird ein zusätzlicher externer Speicher (NAS oder USB) benötigt
  • Anwendungen sollten für eine konsistente Sicherung gestoppt werden, vor allem ist das bei Anwendungen mit Datenbank wichtig

Festplatte oder USB Stick Mounten

Zum Mounten eurer Festplatte oder USB-Sticks am Raspberry Pi (siehe Step 1)  gibt es bereits ein Tutorial. Falls ihr eine USB-Platte ohne eigene Stromversorgung verwenden möchtet gibt es einen speziellen Tick um diese ans Laufen zu bekommen. Als Alternative zur Festplatte könnt ihr z.B. auch das FritzBox NAS als Speicher verwenden.

Backup auf dem Raspberry Pi einrichten

Wir erstellen unser Backup Script mit nano im Home des Benutzers pi

Das Script erhält folgenden Inhalt, die Variablen müssen unbedingt angepasst werden

  • BACKUP_PFAD – Pfad zu eurer gemounteten Festplatte oder NAS Share
  • BACKUP_ANZAHL – Wie lange sollen alte Sicherungen aufbewahrt werden (Anzahl Versionen)
  • BACKUP_NAME – Name der Sicherung
  • DIENST_START_STOP – Dienste die vor dem Backup gestoppt und dann wieder gestartet werden
Wir machen die Datei noch ausführbar und verschieben Sie dann nach /usr/local/bin
Um die Sicherung regelmäßig auszuführen erstellen wir via crontab noch einen Job
In einer neuen Zeile definieren wir den Job und speichern mit STRG+X, Y und Ebter
Hiermit wird jeden Tag um 01:00Uhr die Sicherung gestartet.

Zum Wiederherstellen auf eure SD-Karte verwendet ihr unter Windows entweder Win32 Disk Imager ode runter Linux folgender Befehl, sda muss entsprechend eure SD-Karte sein

Daten von der SD-Karte retten

Wer Daten von seiner defekten SD-Karte retten muss findet in passenden Beitrag Hilfestellung zur Rettung seiner Daten.

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (8 votes, durchschnittlich: 5,00 von 5)
Loading...

Über raspberry.tips

26 Kommentare

  1. 00 01 * * 0 /usr/local/bin/Backup.sh

    Wird so nicht nur jeden Sonntag um 1 Uhr das Script ausgeführt?

    • Laut wikipedia hast du recht 0 durch * ersetzen.

      • Hey,

        wäre schön, wenn die Korrektur oben eingearbeitet würde, denn nicht jeder liest die Kommentare.

        Ich hatte das Glück, am Sonntag damit zu starten und da lief alles sauber, doch tags darauf nicht mehr, was ich erst später entdeckte und auf zwischenzeitliche Ändeurngen an meinem System schob.

        Die Ursache lag aber im Script.

        Wie wäre es, die Parameter im Originalbeitrag als Nachtrag zu ergänzen, denn dann hätte ich es gelesen und den Fehler vermieden.

        Danke

  2. Hinweis: Wenn eine NTFS Formatierte Platte / USB Stick angeschlossen ist muss noch folgendes installiert werden.
    sudo apt-get -y install ntfs-3g hfsutils hfsprogs exfat-fuse

    Danach wurde der Stick als “Removable Disk” erkannt. Durch das Leerzeichen muss das Script etwas geändert werden.
    dd if=/dev/mmcblk0 of=”${BACKUP_PFAD}”/${BACKUP_NAME}-$(date +%Y%m%d-%H%M%S).img bs=1MB
    pushd ${BACKUP_PFAD}; ls -tr “${BACKUP_PFAD}”/${BACKUP_NAME}* | head -n -${BACKUP_ANZAHL} | xargs rm; popd

    Gruß TB

  3. Die Anleitung ist voller Fehler, sucht euch besser ein ordentliches Tutorial.

  4. Hab mein System auf USB Stick ausgelagert.
    Kann ich denn die Daten auf dem Stick auch mit Win32Diskimager als komplettes Image sichern??

    lg sr

  5. ${START_SERVICES} ist nicht in den Variablen am Anfang definiert.

    somit schlägt der Start von mysql fehl…

  6. Hallo,

    erstmal vielen dank an den Tutorial- Ersteller/Verfasser. Es hat alles geklappt. Mein RPi wird nun auf meine Externe Platte gesichert. Habe es auch andersrum zum wiederaufspielen getestet. Läuft wunderbar. Vielen dank nochmal, auch an den Tipp mit dem NTFS System ;) Schönes Wochenende.

  7. Sehr hilfreich, vielen Dank!

  8. Damit nicht so viel Speicherplatz benötigt wird, kann man das Backup noch komprimieren:

    # Backup mit Hilfe von dd erstellen, komprimieren und im angegebenen Pfad speichern
    dd if=/dev/mmcblk0 | gzip > ${BACKUP_PFAD}/${BACKUP_NAME}-$(date +%Y%m%d-%H%M%S).img.gz

    Das Rückschreiben geht dann mit:
    gunzip -c /pfad/backup.img.gz | dd of=/dev/sdx bs=1MB

    oder vorher entpacken:
    gunzip /pfad/backup.img.gz
    dd if=/pfad/backup.img of=/dev/sdx bs=1MB

    Was das Backup noch verkleinern kann, ist das Nullen des unbenutzten Platzes auf der Karte, allerdings dauert das, je nach Kartengröße einige Zeit. Die Karte muss gemountet werden:

    mount /dev/sdx /mnt
    cat /dev/zero > /mnt/nulldatei
    Es gibt dann einen Fehler, wennn die Speicherkarte voll ist. Anschließend mit
    rm /mnt/nulldatei
    diese Datei wieder löschen und das Backup durchführen. Das Nullen bringt nur Speicherplatzersparniss, wenn das Backup komprimiert wird. Es ist sonst noch dazu geeignet, gelöschte Dateien tatsächlich zu eliminieren.

    Viel Spaß!

  9. Hi Leute. Tolles Script. Funktioniert auch manuelle einwandfrei. Allerdings will bei mir das ganze über Cron nicht starten.

    Ich habs so

    30 23 * * * root /var/emu/script/backup.sh

    und so

    30 23 * * * /var/emu/script/backup.sh

    probiert. Es startet nicht. :( Kann mir jemand weiterhelfen? Ich habe mich an die Anleitung gehalten und nur die Dienste mit # rausgenommen. Wie gesagt über sudo /var/emu/script/backup.sh gehts.

  10. Und wie könnte ich eine kompremierte Image Datei erstellen? Am besten auf einem Windows Rechner…

  11. Hallo,

    per cronjob funktioniert so das stoppen/starten des Dienstes nicht!
    Es müssen absolute Pfade eingetragen werden, beim aktuellen Raspian also:
    /usr/sbin/service mysql stop bzw. start.

    Andernfalls kommt es zum Fehler:
    /usr/local/bin/Backup.sh: Zeile xx: service: Kommando nicht gefunden.

    gruss

  12. Hallo ich habe jetzt mehrere backups.
    Mein System funktionierte nicht mehr da habe ich mir gedacht nicht schlimm hast ja die backups…..
    Scheibe wars. Habe das Image mit win32 Disk image auf die Karte geschrieben aber der raspberry bootet nicht. Es leuchten die rote und grüE Led dauerhaft.
    Die image Dateien sind 7.63 GB groß kommt also mit der vorherigen Belegung der Karte hin.

    Jemand ne Tipp für mich?

  13. Hallo, erstmal danke für das Tutorial!
    Ich habe es mal getestet, also den Vorgang manuell angestoßen und habe diese Ausgabe bekommen:
    dd: Fehler beim Schreiben von „/media/festplatte/raspi-backup/RaspberryPiPimaticBackup-20160406-120543.img“: Die Datei ist zu groß
    4295+0 Datensätze ein
    4294+0 Datensätze aus
    4294967295 Bytes (4,3 GB) kopiert, 345,234 s, 12,4 MB/s
    /media/festplatte/raspi-backup /home/pimatic-app
    rm: fehlender Operand
    „rm –help“ liefert weitere Informationen.
    /home/pimatic-app

    Deshalb wollte ich mal fragen, ob dies irgendwas gravierendes ist? Oder muss ich im Script etwas ändern?

    Gruß

    • Hallo Kilian,
      der Datenträger darf nicht FAT32 formatiert sein da hierbei die maximale Dateigröße ca. 4GB ist. Am besten z.B. NTFS formatieren bzw. mit convert unter Windows konvertieren.
      Gruß
      Martin

  14. Ein dd Backup hat den Nachteil, dass immer die gesamte SD Karte gesichert wird. D.h. also auch dass bei einer 16GB SD Karte wo nur 3 GB benutzt werden trotzdem 16GB gesichert werden. Das bedeutet längere Sicherungszeit und größeren Backupspace. Ich benutze deshalb für meine Raspis raspiBackup -> https://www.linux-tips-and-tricks.de/de/raspberry/23-pi-erstellt-automatisch-backups-von-sich-selbst-pi-creates-automatic-backups-of-itself/. Da kann man tar oder rsync Backups erstellen die nur den genutzten Platz der SD Karte sichern.

  15. Hallo,

    ich habe auf meinem Raspberry Pi sowohl FHEM als auch Owncloud laufen. Wäre es ratsam diese Dienste auch zu beenden? Oderreicht es wie beschrieben mysql zu beenden?

  16. hallo,

    erst mal vielen dank für die Anleitungen, haben fast alle funktioniert, es wäre schön wenn es im Script noch eine Komprimierfunktion gäbe. die die Image am Schluss etwas eindampft.

    frichter

  17. Andreas Ohnsorge

    Hallo,

    mit dem neuen RASPI 3 kann jetzt auch der komplette Bootvorgang von einer USB-Platte erfolgen. Ich habe versucht das Skript oben so abzuwandeln, dass die Sicherung von SDA1 und SDA2 auf SDB erfolgen kann – leider ohne Erfolg…

    Gibt es von Ddem Autor dazu eine Idee / Hilfestellung was man machen muss?

    Gruß

    Andreas

    • Mit folgenden Befehlen sollte das eigentlich möglich sein:

      sudo dd if=/dev/sda of=/dev/sdb bs=1MB
      sudo sync

      Von SDA werden so beide Partitionen 1:1 auf SDB übertragen. SDB muss dabei gleich gross oder grösser als SDA sein. Ist SDB grösser als SDA so kann die Partition nachträglich noch vergrössert werden, dass sie den ganzen freien Platz nutzen kann.

      Der Befehl sync ist erforderlich um sicher zu stellen, dass alle Daten geschrieben wurden. Der Schreibvorgang ist in der Regel noch nicht vollständig abgeschlossen, wenn der Prompt erscheint. sync wartet die nicht abgeschlossenen Schreibvorgänge ab.

      Folgendes ist hier anzumerken:
      dd kopiert alles 1:1, d.h. auch die ungenutzten leeren Stellen werden kopiert, was entsprechend lang dauern kann. Zusätzlich werden UUID und allfällige Bezeichnungen im Datenträger kopiert und müssen nachträglich korrigiert werden.

  18. @raspberry.tips
    Traurig ist das die Fehler im Script immer noch nicht behoben worden sind.
    Diese Anleitung die für Anfänger eigentlich recht super ist sollte von unten nach oben gelesen werden :(
    Mache das doch mal bitte, dann tust du dir und allen Lesern einen gefallen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.