Raspberry Pi: Image Backup erstellen
Wenn man seinen Raspberry Pi einmal fertig konfiguriert hat und alles läuft wie es soll, hat man die Arbeit geschafft und das Vergnügen beginnt. Jedoch findet man immer wieder neue Anwendungen, die man einmal auf seinem Raspberry Pi ausprobieren möchte und ehe man sich versieht, hat man das Betriebssystem mal wieder zerschossen oder zugemüllt. Folglich ist eine Neuinstallation des Betriebssystems auf der Tagesordnung und damit Verbunden ist natürlich auch das erneute Einrichten aller gewünschten Programme.
Es gibt jedoch die Möglichkeit den Stand des Betriebssystems als Image festzuhalten und es später, wie bei einer Neuinstallation, wieder zu installieren. Wie dies unter Windows, Linux und Mac OS X funktioniert, erkläre ich im Folgenden.
Zunächst müssen wir das Tool Win32 Disk Imager in der Binary-Version herunterladen und entpacken.
Im Win32 Disk Imager müssen wir nun im Feld Image File den Pfad samt Dateinamen angegeben, wo das Image gespeichert werden soll, das Laufwerk auf dem die SD-Karte eingebunden ist wählen und auf Read klicken.
Unter Linux und Mac OS X ist es recht einfach mittels dd ein Image seiner SD-Karte zu erstellen. Dabei muss man /dev/sdx durch den Pfad zur SD-Karte ersetzen (bei Mac OS X für gewöhnlich /dev/diskx) und /path/images.img durch den Pfad samt Dateinamen wo das Image gespeichert werden soll.
dd if=/dev/sdx of=/path/images.img bs=1M
Fertig! Nun ist der aktuelle Stand des Betriebssystems gesichert, man kann unbesorgt neue Programme ausprobieren und im Bedarfsfall einfach das gesicherte Image wieder einspielen.
Dieses Tutorial wurde am 08. März 2015 überarbeitet.
58 Kommentare. Hinterlasse eine Antwort
So können Fehler beim Befehl sehr produktiv sein… 😉
(Siehe vertauschte Parameter in einem anderen Beitrag ^^)
Ich denke zu willst mich auf einen if/of Drehen aufmerksam machen. Diesmal muss ich dich enttäuschen, denn diesmal stimmt die Reihenfolge 😀
Backups sind immer wichtig und richtig. Ich bin momentan noch auf der Suche auf einer vernünftigen Backupmöglichkeit für meinen RPi. Dieser Läuft momentan 24/7 als kleiner Homeserver. Für ein Backup möchte ich ihn aber ungern runterfahren, die SD-Karte entnehmen in meinen Mac packen, Backup machen und wieder zurück in meinen RPi schieben um diesen dann wieder neu davon zu starten.
Ich habe einen 32GB-USB-Stick an meinem Raspberry, auf dem ich gerne ein Backup meiner Systempartition in regelmäßigen Abständen automatisiert ziehen möchte. Bisher habe ich allerdings nur eine Notlösung mittels .tar-Backup gefunden. Der Grund, der gegen dd in meinem Falle spricht, ist, dass dd auch den „leeren“ Speicherplatz mitkopiert und Backups daher sehr groß werden.
Kennst du zufällig eine geeignete Backuplösung für mich? Für das regelmäßige Backup würde ich dann einfach einen Cronjob einrichten.
hallo,
du kannst ein dd-Backup mittels gzip direkt packen also z.B. so:
dd if=/dev/sdx bs=1M | gzip -c > /pfad/zum/image.img
und zurückspielen:
gunzip -c /pfad/zum/image.img | dd of=/dev/sdx bs=1M
…wenn dd fertig ist, am besten noch ein „sudo sync“ hinten dran um sicherzugehen das alle Daten geschrieben wurden.
@Luke: Hinweis für Linux-Anfänger:
Wiederherstellen:
gzip -dc /home/your_username/image.gz | dd bs=4M of=/dev/sdb
–> wenn man vor dem gzip sudo verwendet, dann klappt es nicht. Das sudo gehört vor das dd (Ansonsten Fehler: Keine Berechtigung)
–>Also gunzip -c /pfad/zum/image.img | sudo dd of=/dev/sdx bs=1M
Beim Erstellen das sudo dann ebenfalls vor das dd
Ich wusste beispielsweise nicht, dass das sudo zwingen vor das dd gestellt werden muss, erst im Nachhinein erscheint es logisch.
Alternativ
sudo -i
Muss es nicht zwingend. Aber in diesem Fall hast du Recht, dass es benötigt wird. Am besten mal in der Man-Page nachschlagen was sudo genau macht 😉
In dem Tutorial zum Benutzen eines USB-Sticks oder eine Festplatte anstelle der SD-Karte auf raspberrypi.org benutzt der Autor „rsync -axv / /gewünschtermountpoint“ zum umziehen der Daten. Kann man das nicht auch zur Sicherung nehmen? Müsste man nur nen kleines Script im Sinne von „lege Ordner mit Datum von heute an und dann rsync dahin“.
Und wie spielt man das Image wieder zurück, sodass das System wieder auf Backup stand ist? Danke.
Genau so wie man jedes andere Image auch installierte. Siehe Raspbian installieren Step 2.
Bei mir gab es das Problem, dass lediglich eine „Datei“ erstellt wurde und kein Image. Beim Versuch das Backup wieder aufzuspielen, weigerte sich win32diskimager, da es die image Datei nicht als solche erkannte. Nachdem ich aber dem Dateinamen ein „.img“ angehängt hatte lief alles problemlos.
Gut, eine Benennung mit „richtiger“ Endung war für mich selbstverständlich, wodurch ich das gar nicht erst erwähnt habe…
Hey, ich wollte eine größere Speicherkarte verwenden, hatte aber keine Lust alles neu zu konfigurieren. (vorher 8GB jetzt 32GB)
Also dachte ich mir: Mit Win32 Imager ein Image von der alten SD erzeugen und auf die neue draufladen. Das hat auch alles einwandfrei funktioniert aber mit der neuen Karte bootet mein RPi gar nicht mehr. Die alte funktioniert weiterhin perfekt.
Mache ich etwas falsch?
Ist die neue SD-Karte denn mit dem Raspberry Pi verträglich? Kannst du testen indem du dir z.B. das offizielle Raspbian Image draufspielst und mal schaust ob das einwandfrei funktioniert. Wenn nicht kannst du relativ sicher sein, dass diese SD-Karte am Raspberry Pi nicht funktioniert.
ich habe es genau so gemacht wie Bob, und bei mir bootet der Pi auch prompt von der neuen Karte. Allerdings ist der freie Platz auf der neuen Karte noch nicht allokiert und die /root ist immer noch voll. raspi-config verweigert die Expansion der Partition, da es sich um eine Noobs handelt. Mit Gparted auf einem anderen Rechner sehe ich den freien, nicht allokierten Platz, kann ihn aber nicht /root zuweisen. Was nun? Ich habe fast alles aus diesem Blog installiert und will nicht alles nochmal neu aufsetzen
Mit den Strukturen von Noobs kenne ich mich leider wenig aus, sodass ich dir da nicht weiterhelfen kann. Versuchs doch mal in einem der Raspi Foren.
Diskimager und alle anderen Tool haben bei mir nie funktiniert: Grund: Die SD Karte enthält zwei Partitionen bei mir eine FAT16 (laut ODIN) und eine EXT4. Jedes Image-Programm das ich bisher ausprobiert habe „sieht“ nur die FAT16 Parttion aber nicht die EXT4. D.h. ich bekomme auch nur die 56MB FAT Parttion als Image.
Gibts da eine Lösung?
Gruss Ralf
Zumindest im Falle von Win32 Disk Imager weiß ich, dass es zwar nur die gemountete Partition anzeigt, jedoch ein Backup der ganzen SD-Karte mit allen Partitionen schreibt.
Ich habe jetzt inzwischen herausgefunden woran es lag: Es ist das in meinem Dell eingebaute SD-Karten Laufwerk (oder der dazugehörige Treiber): Auch Windows zeigt in der Datenträgerverwaltung nur eine! Partition an, eben die FAT Partition.
Als ich heute spasseshalber die SD Karte in den HP Laptop eines Kollegen gelegt hatte und dort die Datenträgerverwaltung geöffnet habe, habe ich plötzlich die zwei Partitionen gesehen. Und auf diesem Rechner konnte ich dann auch (ich hab ODIN genommen) die komplette Karte abziehen.
Keine Ahnung warum der SD-Karten-Leser im Dell die zweite Partition nicht anzeigt.
Gruss Ralf
magst du nicht oben dazu schreiben, dass alle Partitionen, auch die für Windows unbekannte Linnuxpartition von Disk Imager mitgespeichert wird?
Das kostet echt Nerven, wenn man nur die Alibi-Fat Partition auswählen kann – logisch ist das schließlich nicht.
…und ehrlich gesagt hab ichs erst danach anhand der Imagegröße geglaubt 😉
Ja, genau da hab ich auch meine Verständnisschwierigkeiten gehabt. Sehe eine Partition mit ~55MB und hab dann ein Image mit 8GB.
Allerdings frage ich mich gerade, ob man es nicht etwas speicherfereundlicher sichern kann. Das Original-Image hat 3,2GB. Wenn man es auf ein 8GB Karte installiert, dann hat man ein Backup-Image mit 8GB 🙁
[…] Blogpost von Jan Karres English version: […]
Wenn ich eine 8GB SD verwende und auf 32GB wechsel möchte, reicht es Image zu ziehen, auf die 32er einzuspielen und in der Config zu sagen, PI möge bitte ganzen Speicher verwenden?
Völlig korrekt.
Leider nicht
1. sudo diskutil unmount /dev/disk3s1
2. sudo dd if=/Users/ich/Documents/raspberry/owncloud.img of=/dev/disk3s1 bs=1m
Ergebnis: Raspberry bootet nicht, Image kann am Mac nicht gelesen werden… da fehlt doch noch ein Schritt oder? Ich habs mit 2 SD getestet, einmal 8 –> 16 gb und einmal 8 –> 32 gb
Sollte eigentlich schon funktionieren und funktioniert nach meiner Anleitung bei mir auch…
Das überspielen und booten hat einwandfrei geklappt, jedoch kann ich das Filesystem nicht über Option 1 im raspi-config expandieren lassen: │ There was an error running option 1 Expand Filesystem │
Habe das Image mit rdisk gezogen und via rpi sd card builder auf die neue SD-Karte gezogen.
Bei mir klappt das ganz wunderbar.
Ich hab allerdings das Image mit dem Windowstool gezogen, dann auf die neue, größere Karte gespielt.
Nun Karte zurück in den Raspi, booten, ‚Raspi-config‘, Punkt 1 (Extend Filesystem o.ä).
Da kommt dann kurz eine Meldung mit „erfolgreich“, nach dem beenden des Config-Tools stehen aber einige Warnhinweise in der Shell.
Ende vom Lied ist einfach, dass man neu starten muss, damit die Karte mit der neuen Größe erkannt wird.
Danach funktioniert alles einwandfrei.
Danke 🙂
Cool, das klappt mal ohne HickHack. Danke dir
Ich danke fürs Lesen 🙂
meine erfahrung mit dd unter os x 10.9: funktioniert nie, hab 3 sd getestete mit image zu beschreiben und sie haben die pi nie gebootet…
Hallo Jan,
wie muss ich vorgehen, wenn ich das Backup über Netzwerk auf meinen PC sichern möchte?
Also nicht extra die SD-Karte aus dem Pi entnehmen?
Mit dem Befehl „dd“ aber was als Output Path (of)?
Theoretisch braucht der Pi ja die Berechtigung (Username, Passwort), um überhaupt auf den PC schreiben zu dürfen, oder?
Besten Dank im Voraus 🙂
Hallo, bin zwar auch noch Linux Neuling, aber ich habe es über mounten einer freigabe realisiert mit folgenen befehl:
mount -t cifs -o user=benutzername,password=passwort //192.168.xx.xx/rpi_backup /mnt/rpi_backup/
Sichern dann halt mit folgendem befehl:
sudo dd if=/dev/sda2 of=/mnt/rpi.img bs=1M
Musst halt nur die für dich richtige Partition ansprechen, bei mir ist es sda2 weil ih es auf nem Stick laufen lasse…
vg, stefanh
Hallo Stefan,
wunderbar, mit deiner Anleitung (leicht modifiziert) erreiche ich nun das erwünscht Ergebnis.
Gibt es noch eine Möglichkeit, dieses Backup regelmäßig automatisch durchzuführen (Cronjob?)?
Und dass der Dateiname des Backups automatisch dem Datum und der Uhrzeit entspricht?
Also z.B. „2014-05-05-11:00:00.img“?
Danke & Gruß
Padde
Hallo Padde,
bestimmt ist der Weg über Cronjob der Richtige, habe ich aber auch noch nicht viel Erfahrung mit und kann Dir leider keine Hilfestellung geben. Bezgl. des Dateinames gibt es mit Sicherheit Variable, die du dort mit einbauen könntest. Als Beispiel habe ich hierzu gerade Folgendes ergooglet:
dd if=/dev/hda8 | gzip >/media/extern/hda8_2006-07.14.img.gz
Mit Variable:
dd if=/dev/hda8 | gzip >/media/extern/hda8_$(date „+%Y-%m.%d“).img.gz
VG, Stefan
Hallo Stefan,
danke für die Info.
Aber warum geben wir das Backup nun mit gzip aus, und nicht mehr direkt als img-Datei?
Danke im Voraus.
PS: Falls jemand bezüglich Cronjobs helfen kann, bitte melden! Danke 🙂
Das war doch nur ein Beispiel, es geht doch um die Variable, egal von welcher dateiendung wir sprechen
Thema Cronjob: Eigentlich ganz einfach. Mittels
crontab -e
kann man eine solche eintragen. Vor den eigentlichen Befehl muss man definieren wann der Cronjob aufgerufen wird. Wenn man die Syntax, wie in der Crontab Datei beschrienen, nicht selbst basteln möchte, kann man auf zahlreiche Crontab Generatoren zurückgreifen. Die Zeile mit Ausführzeit Definition und Befehl in eine neue Zeile der Cronab Datei einfügen – speichern nicht vergessen 😉 Das wars!Idee von stefan finde ich schon gar nicht schlecht. Jedoch solltet ihr bedenken, dass die Maschine läuft und sich folglich dauernd Daten ändern können, was zu Fehlern während des Wegkopierens führen kann. Partiell kann man das System gut mit rsync sichern, jedoch eben nicht vollständig.
Hallo Jan, da stimme ich Dir zu. Vorsichtshalber halte ich meine Dienste für Datenbank und Webserver vorher an. rsync ist auch eine gute Idee, als Neuling bin ich aber vorsichtig und führe vor Versionsupdates meines Seafile’s lieber ein Komplett Backup durch. Würde deiner Meinung nach dafür auch ein rsync Job reichen (Webserver und Datenbank müsste ich dann doch auch mitsichern?)?
VG, Stefan
Wenn du vor dem Update einer Software dessen Datenbestand sichern möchtest würde ich den betreffenden Ordner einfach händisch mittels cp kopieren.
Auf meinem Mac muss es „dd if=/dev/diskX of=/path/images.img bs=1m“ heissen. Mit grossem M bei bs=… kommt ’ne Fehlermeldung…
Stimmt genau! Mac OS X Yosemite. Mit einem großen M kommt die Fehlermeldung „dd: bs: illegal numeric value“ und mit einem kleinen m funktioniert der Befehl
[…] Original URL: https://jankarres.de/2013/08/raspberry-pi-image-backup-erstellen/ […]
Danke für die gute Anleitung zur Erstellung eines Images.
Ich habe erfolgreich ein Image erstellt mit Win32 Disk Imager.
Dabei fiel mir auf, dass das Image 29,7 GB groß ist (also so groß wie meine 32 GB microSD Karte).
Wird mit dieser Methode jeder Block gesichert oder?
Mein Pi ist eigentlich frisch installiert, das heißt, da ist noch nicht viel drauf.
Gibt es eine Möglichkeit ein Backup zu machen ohne den ganzen leeren Speicherplatz mitzusichern?
Korrekt, jeder Block wird gesichert. Eine andere Methode habe ich bislang leider noch nicht auf dem Schirm.
Unter http://sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/ liegt ein Script zum verkleinern eines Images auf die tatsächlich verwendete Größe.
Nicht Steinigen für die Frage aber, gibt es eigentlich für den Mac auch ein Tool, wie bei Windows der DiskImager?
http://www.tweaking4all.com/hardware/raspberry-pi/macosx-apple-pi-baker/
http://sourceforge.net/projects/piwriter/
http://ivanx.com/raspberrypi
Danke für diese Links.
Ich hab meinen Pi im Keller hängen und will nicht für jede Sicherung die SD-Karte rausnehmen müssen.
Gibt es eigentlich eine Möglichkeit, ein Image auch bei laufendem Raspberry über das Netz zu machen?
Als ganzes Image nicht, da immer Dateien in Verwendung wären.
Hallo Leute,
für Anfänger auf Linux gibt es auch ein schönes Gui für DD
https://launchpad.net/gdiskdump
sogar mit automatischer verkleinerung des Images auf die wahre größe und gzip komprimiereung.
Hallo Jan,
wenn man dd unter MAC verwendet, dann muss die Option bs=1m heissen. Ist Case sensitive. DAs Image ist damit aber leider viel zu klein. Ich werde es unter Windows probieren.
Danke für diese Einführung.
Allerdings war die Anleitung für mein Ubuntu nicht ganz ausreichend:
Denn mit dem df-Kommando wurden mir nur die beiden einzelnen Partitionen (Boot Partition von der Daten -Partition getrennt) meiner SD Karte einzeln angezeigt. Ich wollte aber die gesamte SD Karte kopieren. Dazu mußte ich den Device Namen herausfinden. Die Seite zum Kommando dd auf wiki.ubuntuusers.de bzw. die zum Kommando blkid: half mir schließlich weiter.
blkid bracht mir den Name des devices unter den meine SD Karte angemeldet war. Um Zugriff auf dieses Device zu erhalten, mußte ich dd außerdem mit root-Rechten ausführen.
Hinweis: DD braucht ziemlich lnage für das Image, da es wirklich alle Daten (bei mir 64 GB) kopiert
HAllo Jan,
leider funktioniert der Win32DiskImager unter Windows 10 nicht. Kann man installieren aber startet nicht. Googlen hat mir leider auch nicht geholfen.
Laut https://sourceforge.net/projects/win32diskimager/ ist die aktuelle Version auch für Windows 10 geeignet.
Alternative: USB Image Tool (https://www.alexpage.de/software/usb-image-tool-1-75/). Ich hab schon beide genutzt und das gleiche Ergebnis erhalten.
Kann ich bestätigen, startet bei mir auf drei grundverschiedenen Rechnern mit Win10-64 nicht. Habe es mit USB Image Tool probiert, welches aber für meinen Anwendungszweck leider auch nicht zu funktionieren scheint. Und das Netz scheint dieses Problem nicht zu kennen, hier finde ich den ersten Hinweis auf diesen Effekt …
Das USB Image Tool ist doch sehr ähnlich und eine gute Alternative.
Welcher Anwendungsfall ist denn mit diesem nicht möglich?
Zu dd: Da kauft man sich um teures Geld einen Mac und führt dann open source Befehle aus. Hm, da stimmt was nicht