Hallo Raspi/Banana-Pi Fan-Gemeinde
Erstellt: 01.2016


Warum diese Tutorial??
Ich nutze im meinem Raspi eine 8GB große SD-Karte und die genutzte Partition wurde auf volle Speicher-Größe "aufgebohrt". Nun möchte ich davon gern ein Image ziehen, um es als Backup, auf eine zweite 8GB große SD-Karte zu ziehen. Jetzt ist es aber leider so, das sich SD-Karten unterschiedlicher Hersteller in der Anzahl der Sektoren und somit der Speicher-Größe unterscheiden, d.h. das die Eine ein klein bissl kleiner sein kann, als die Andere. Wenn ich jetzt mit "Win32DiskImager" ein Image ziehe und versuche, dieses Image dann auf die neue Karte zu schreiben, kann es vorkommen, das es nicht drauf passt, da der DiskImager leider alle Sektoren der SD-Karte ins Image schreibt und dieses somit dann zu groß ist.
Daher hier eine Anleitung, die dieses Problem umgeht bzw. berücksichtig. Diese Anleitung ist auch nutzbar, wenn ich z.B. von einer 16GB Karte zurück auf eine 8GB Karte möchte (Sofern nicht mehr als 8GB Daten auf meiner Karte liegen!).

# ACHTUNG:
Bei diesem Vorhaben kann es unter Umständen zum Datenverlust kommen! Daher zur Sicherheit im Vorfeld ein Backup der Karte mit Win32DiskImager anlegen!
Jeder handelt hier in Eigenverantwortung!

Für alle Befehle in der Konsole, brauch Ihr "root" Rechte! Also am Besten nach dem Anmelden in der Konsole am Prompt "sudo -i" eingeben. Damit öffnet Ihr eine "root" Instanz in der Konsole.

Die Partitionen der Karte dürfen bei allen hier beschriebenen Schritten NICHT gemountet sein!



Vorbereitung...
1. mit Live-CD booten
Empfehlung: PartedMagic (Die vom August 2013 ist leider die letzte Freeware-Version, ist aber für alle Vorhaben bestens geeignet. Hier zum Download)
2. Jetzt prüfen wir, ob der unten beschriebene Weg für uns notwendig ist und wie groß der Unterschied zwischen Quelle und Ziel ist.
Konsole öffnen und folgenden Befehl eingeben...
fdisk -lu
Damit könnt Ihr Euch alle Informationen zu Euren Laufwerken anzeigen lassen



In meinem Fall ist die 1. das Ziel und die 2. die Quelle.
Wie hier gut zu erkennen ist, besitzt meine Quelle mehr Sektoren (15.556.608) als mein Ziel (15.523.840), somit würde ein kopieren der Karten mit Win32DiskImager NICHT funktionieren! Wäre dieses Verhältnis umgekehrt, könnte man auch unbesorgt unter Windows mit dem Win32DiskImager arbeiten. Hier, in diesem Fall, käme aber nur der unten beschriebene Weg in Frage.
Des weiteren ist zu erkennen, das die Größe der SD-Karten doch recht unterschiedlich ist (Quelle 7.964 MB / Ziel 7.948 MB). Hier muss die zweite Partition sogar um mindestens 16 MB reduziert werden (sicherer wären 20 MB) und nicht wie unten in meinem Beispiel nur 10 MB!

# HINWEIS:
Wer sich nicht sicher ist, welche Karte die Quelle und welche das Ziel ist, oder wer keine 2 Karten-Slots im Rechner hat, der prüft die Werte einfach nacheinander... ist vlt. auch sicherer. ;-)


Dateisystem auf Fehler prüfen... (aus aktuellem Anlass mit eingefügt)

Konsole öffnen und folgenden Befehl eingeben...
fsck.ext4 -v -f -c /dev/mmcblk0p2

Dieser Befehl prüft das Dateisystem der Karte auf Fehler. Dies ist notwendig, da diese Fehler sonst beim Klonen evtl. mit übertragen werden oder generell Probleme beim Klonen auftreten. Nähere Infos unter: http://wiki.ubuntuusers.de/Dateisystemcheck#Pruefung-in-der-Konsole


Image von SD-Karte erstellen...

1. GParted starten und SD-Karte auswählen



2. Zweite Partition (ext4) um den oben ermittelten Wert reduzieren (in diesem Test reduziere ich um 10 MB).
Wer nur eine Sicherung erstellen will und noch nicht sicher ist, auf welche Karte das Image später mal passen soll, der sollte hier um mindestens 50 bis 100 MB oder auch gleich um den ungenutzten Speicher reduzieren.
Sollte man von 16GB auf 8GB welchseln wollen, ist die Partition entsprechend so zu verkleinern, das sie im Anschuss auf die 8GB Karte passt. Dies kann man sich aber auch mit der unter "Vorbereitung" beschriebenen Methode errechnen. (Wichtig ist hier natürlich, das sich in Summe nicht mehr als 8GB Daten auf der gesamten Karte befinden! Zu sehen in der Spalte "Benutzt".)



# HINWEIS:
Sollte man die Partition im Nachgang nicht erneut "aufbohren", dann muss Punkt 1 bis 4 in Zukunft nicht wiederholt werden!
Dennoch kann es nicht schaden, vor jedem Clonen/Sichern einen Blick in GParted zu werfen.
3. Konsole öffnen und folgenden Befehl eingeben...
fdisk -l /dev/mmcblk0



Dieser Befehl gibt die Laufwerksinformationen aus. Interessant sind "Sector size" (sollte eigentlich bei 512 bytes liegen)
Des weiteren ist die Spalte "Ende" der zweiten Partition (mmcblk0p2) interessant (ist für den nächsten Befehl wichtig)
4. Image erstellen mit folgendem Befehl...
dd if=/dev/mmcblk0 of=/ziel/raspi.img bs=512 count=(Zahl Ende + 1)
Beispiel: Die Zahl, die das Ende der zweiten Partition markiert (im Punkt 5. ausgelesen) beträgt in meinem Fall 15536127
Der komplette Befehl lautet also...
dd if=/dev/mmcblk0 conv=sync,noerror bs=512 count=15536128 | gzip -c > /media/sda2/raspi.img.gz



Dieser Befehl weist "dd" an, alle Sektoren (bis 15536128) in 512 bytes Blöcken auszulesen, das Ganze durch "gzip" in die Datei "raspi.img.gz" zu speichern, wobei der Name des Image frei gewählt werden kann. ;-) Durch "gzip" erreichen wir, das das Image dann auch um einiges kleiner wird und keinen unnötigen Platz verschwendet.
(Beispiele zum "Disk cloning": https://wiki.archlinux.org/index.php/disk_cloning)

# ACHTUNG:
1. Ziellaufwerk muss gemountet sein! (Path-Angaben bei Euch beachten und anpassen!)
2. Während "dd" arbeitet, am besten Finger weg vom Rechner! Der Clone-Vorgang kann ne ganze Weile dauern, "dd" zeigt leider keine Status-Informationen an, erst nach dem der Vorgang beendet wurde.

...damit wäre das Sichern der SD-Karte erledigt. ;-)



Image auf neue Karte aufspielen...

1. Auf der neuen SD-Karte mit GParted alle evtl. vorhandenen Partitionen löschen
2. Folgender Befehl schreibt das Image dann auf die SD-Karte...
gunzip -c /media/sda2/raspi.img.gz | dd of=/dev/mmcblk0



3. Wenn man möchte, kann man im Anschluss mit GParted die zweite Partition wieder vergrößern
# ACHTUNG:
Karte muss zuvor entfernt und neu eingelegt werden!


Falls Interesse besteht, eine Partition aus solch einem gesichertem Image einzubinden (zu mounten), um evtl. noch die ein oder andere Datei heraus zu holen, ist das in folgendem Artikel gut beschrieben...
http://wiki.ubuntuusers.de/dd#Partition-aus-einem-Image-der-gesamten-Platte-einbinden