Zum Inhalt

SD Karte vom Raspberry Pi auf kleinere SD Karte klonen

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

  1. Die root Partition auf der alten SD Karte verkleinern, in meinem Fall großzügig um 1GB.
  2. Auch die erweiterte Partition um 1GB verkleinern. Dieser Schritt ist wichtig!

Schritt 2: Image mit dd erstellen

  1. 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

  1. 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
  2. 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.
  3. Und so landet das erstelle Image auf der neuen SD Karte:
    sudo dd if=~/raspi.img of=/dev/mmcblk1 bs=1024 count=28221439
  4. 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.
  5. (optional) Die Partionen können mit gparted wieder auf maximale Größe erweitert werden.
  6. 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.

Published inLinuxRaspberry Pi

5 Comments

  1. Erst mal vielen Dank für Deine zeitaufwändigen Bemühungen und das tolle Tutorial.
    Hatte leider Probleme damit. Das betr. Touchpanel wollte die SD Karte nachher nicht mehr lesen.
    Habe nun eine für mich laufende Variante gefunden.

    Lesen & verkleinern:
    sudo pishrink.sh quelle.img ziel.img
    Schreiben:
    sudo ddrescue -D –force ziel.img /dev/sdd

    PiShrink: https://github.com/Drewsif/PiShrink
    ddrescue: Ist in den Paketquellen

  2. Achja, Nachtrag:
    Nach dem Schreiben mit ddrescue muss der leere Space am Schluss weg.
    Mein Touchpanel (TX53-8030) checkt es sonst nicht.
    Also mit gParted die 2te (letzte) Partition bis zum Ende der SDcard vergrössern.

Schreibe einen Kommentar

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