Folgende Situation: Die 16GB SD Karte in meinem Raspberry Pi zickt in letzter Zeit regelmäßig wegen defekten Sektoren rum. Diverse Programme starten z.B. nicht mehr und mussten erneut installiert werden. Ärgerlich. Da ich zusätzlich noch einen 32GB USB Stick angeschlossen haben und auch ein NAS im Netzwerk zur Verfügung steht, dachte ich mir, ersetze ich die alte 16GB SD Karte einfach durch eine neue. Leider ist die neue SD Karte ein paar wenige MB kleiner als die alte, daher war eine einfache Prozedur à la Image erstellen (entweder mit Win32 Disk Imager unter Windows oder dd unter Linux) und zurückspielen keine Möglichkeit, selbst wenn die 16GB Speicherplatz auf der SD Karte alles andere als ausgenutzt wurden.
Folgende Prozedur hat nun scheinbar Erfolg gebracht. Alle Schritte habe ich auf einem Notebook mit SD Kartenleser durchgeführt.
Schritt 1: Partitionen verkleinern
- Die root Partition auf der alten SD Karte verkleinern, in meinem Fall großzügig um 1GB.
- Auch die erweiterte Partition um 1GB verkleinern. Dieser Schritt ist wichtig!
Schritt 2: Image mit dd erstellen
- sudo dd if=/dev/mmcblk1 of=~/raspi.img
Hierbei wird die komplette SD Karte als Image gespeichert, d.h die Datei ist anschließend ca. 16GB groß.
Schritt 3: Image verkleinert auf die neue SD Karte schreiben
- Mit sudo fdisk -l ~/raspi.img die Größe der Partitionen anzeigen lassen:
dennis@MSI-GE60:~$ sudo fdisk -l ~/raspi.img
Medium raspi.img: 14,5 GiB, 15523119104 Bytes, 30318592 Sektoren
Einheiten: sectors von 1 * 512 = 512 Bytes
Sektorengröße (logisch/physisch): 512 Bytes / 512 Bytes
I/O Größe (minimal/optimal): 512 Bytes / 512 Bytes
Typ der Medienbezeichnung: dos
Medienkennung: 0x000b2b81
Gerät Boot Start Ende Sektoren Größe Id Typ
raspi.img1 8192 2289062 2280871 1,1G e W95 FAT16 (LBA)
raspi.img2 2289063 28221439 25932377 12,4G 5 Erweiterte
raspi.img5 2293760 2359293 65534 32M 83 Linux
raspi.img6 2359296 2488319 129024 63M c W95 FAT32 (LBA)
raspi.img7 2490368 28221439 25731072 12,3G 83 Linux
- Hier sind raspi.img2 und raspi.img7 relevant: Die erweiterte und die root Partition:
Beide haben als Ende 28221439. Ohne die Verkleinerungen aus dem ersten Schritt waren es in meinem Fall 30318591. - Und so landet das erstelle Image auf der neuen SD Karte:
sudo dd if=~/raspi.img of=/dev/mmcblk1 bs=1024 count=28221439 - Der Vorgang dauert sehr lange und es kommt am Ende eine Fehlermeldung, die neue SD Karte sei zu klein. Das ist korrekt und kann ignoriert werden, da dieser Bereich außerhalb der Partitionen liegt und damit keine Daten betroffen sind.
- (optional) Die Partionen können mit gparted wieder auf maximale Größe erweitert werden.
- Von der neuen SD Karte kann der Raspberry Pi nun booten.
Ach ja, der ganze Spaß hat 5 oder 6 Anläufe an mehreren Abenden benötigt. Adhoc hat das leider nicht funktioniert.