Raspberry Pi OS Größenänderung der MicroSD Karte

Irgendwann wird es auch dir passieren: Auf der MicroSD Karte deines Raspberry Pi geht der freie Speicher aus. Wie du eine Größenänderung der Karte vornimmst, zeige ich dir in diesem Post.

Größenänderung

Es gibt eigentlich nur zwei Fälle:

  1. Der Speicher auf der MicroSD wird knapp
  2. du hast viel zu viel ungenutzten Speicher und kommst auch mit einer kleineren Speicherkarte aus.

Ich spoiler dich schon mal: der erste Fall ist der einfachere.

Material

Was du für dieses Praxisbeispiel benötigst:

  • MicroSD Karte mit deiner Raspberry Pi OS Installation
  • eine weitere MicroSD Karte, auf die wir das vergrößerte/ verkleinerte Dateisystem schreiben.
  • zwei MicroSD/USB Adapter
  • einen Rechner, um die Operationen durchzuführen, denn das geht nicht aus dem laufenden System heraus.

Jede Raspberry Pi OS Installation besitzt zwei Partitionen. A Die erste wird unter /boot gemountet und enthält alles, was dein Raspberry Pi während der Startphase benötigt (Linuxkernel, config, Bootloader). Die zweite ist üblicherweise /root, dort liegen alle Programme, die Homeverzeichnisse der Nutzer und die Systemkonfiguration.Die Bootpartition solltest du unangetastet lassen. Lediglich die zweite Partition ist für uns bei der Größenänderung relevant!

Schritt 1: Backup

Alles, was wir hier machen, birgt die Gefahr des Datenverlustes, daher solltest du bevor du beginnst, die Daten deines laufenden Systems gut sichern!

In den nachfolgenden Beispielen ist bei mir die Originalkarte der Raspi Installation immer unter /dev/sdc erreichbar und die neue Karte unter /dev/sdd.

Fall 1: Speicher vergrößern

Die bestehende Installation auf eine größere Speicherkarte ist genaugenommen nichts anderes als das Originalimage von Raspberry Pi OS zu flashen.

Das lässt sich mit einem einzigen Befehl machen.

dd if=/dev/sdc of=/dev/sdd bs=2M

Beim Kopieren mit dd ändert sich die PARTUUID nicht. Die Kopie auf der größeren MicroSD Karte ist sofort startfähig. Allerdings ist der zusätzliche Platz nicht der root-Partition gewiesen. Deshalb musst du über

sudo raspi-config

im Menüpunkt Advanced Options / Expand Filesystem die root-Partition vergrößern. Nach einem Reboot ist dann schon alles erledigt. Den Ablauf habe ih in diesem Post bereits beschrieben.

die Partition / nimmt jetzt auf der größeren MicroSD  Karte nach der Größenänderung den gesamten Platz ein.
die Partition / nimmt jetzt auf der größeren MicroSD Karte nach der Größenänderung den gesamten Platz ein.

Fall 2: Speicher verkleinern

Die bestehende Installation auf eine kleine MicroSD Karte zu bringen, ist ungleich aufwändiger und auch nur dann möglich, wenn die bestehende Installation nur soviel Speicher belegt, die die Kapazität der neuen Karte nicht überschreitet. Da der Vorgang etwas komplizierter ist, benutze ich hier ein grafisches Tool namens GParted

PARTUUID

Jede Partition besitzt eine sog. Partition UUID (Universally Unique Identifier). Diese ist einmalig und wird beim Erstellen der Partition vergeben. Auf einem System kann zur gleichen Zeit nur eine Partition mit der selben PARTUUID eingehängt sein.

GParted

Der GParted ist ein unter GPL lizenzierter Partition Imager, mit dessen Hilfe sich Partitionen und Laufwerke bearbeiten lassen.

Diesen musst du unter Debian oder Ubuntu ggf. erst installieren:

sudo apt install gparted

GParted arbeitet immer im Root Kontext und verlangt beim Start ein Passwort.

Schritt 1: Partition verkleinern

Wie schon erwähnt, ist die Verkleinerung der MicroSD Karte nur möglich, wenn die beiden Partitionen zusammen nicht mehr Speicher belegen als die neue Speicherkarte an Kapazität hat. Im Beispiel will ich eine Installation auf einer 256GB Karte auf eine 32GB Karte übertragen. Zunächst mal die Ausgangssituation:

Screenshot von GParted zeigt die beiden Partitionen auf der original Speicherkarte
Screenshot von GParted zeigt die beiden Partitionen auf der original Speicherkarte

Du siehst, Von 256GB sind noch 238GB unbenutzt und käme sogar mit einer 16GB Karte als Ziel aus.

Jetzt werden wir zunächst die /dev/sdc2 Partition verkleinern.

Kontextmenü Größe ändern / Verschieben
Kontextmenü Größe ändern / Verschieben

Wenn du mit der rechten Maustaste auf die Partition sdc2 klickst, wählst den Menüpunkt Größe ändern / Verschieben aus.

Screenshot GParted Dialog zur Größenänderung der Partition
Screenshot GParted Dialog zur Größenänderung der Partition

In dem Dialog siehst du oben eine Balken, der die Belegung der Partition anzeigt. Der gelbe Bereich sind die Datenblöcke, die belegt sind, der weiße Bereich ist der unbenutzte Platz. Wenn du jetzt auf der rechten Seite des weißen Bereichs klickst und die Maustaste festhältst, kannst du den weißen Bereich nach links ziehen, bis er am gelben Bereich ankommt. Er sollte allerdings nicht bündig mit dem belegten Bereich abschließen, sonst ist deine neue Partition nachher zu 100% belegt!

Danach klickst du auf den Button Größe ändern /Verschieben am unteren Rand des Dialogs. GParted wird nicht sofort mit der Größenänderung beginnen, da es alle Operationen in einer Liste sammelt und dann als Stapel abarbeiten kann. Um die Partition zu ändern klickst du jetzt im Hauptbildschirm auf den grünen Haken oberhalb der Partitionen-liste.

Der Vorgang kann jetzt je nach Größe der Speicherkarte und der Geschwindigkeit des Kartenadapters eine Weile dauern.

Screenshot GParted bei der Verkleinerung der Partition
Screenshot GParted bei der Verkleinerung der Partition

Schritt 2: Partitionen kopieren

Wenn der Vorgang erfolgreich abgeschlossen ist, bist du jetzt soweit, die Partitionen auf die kleinere MicroSD Karte zu übertragen.

Wichtig ist jetzt, die Reihenfolge einzuhalten und erst sdc1 und danach sdc2 zu kopieren (andersherum hat bei mir nicht funktioniert).

Klicke jetzt sdc1 an und wähle im Kontextmenü Kopieren.

Danach wechselst du in der Dropdown Liste oben rechts im Hauptfenster auf die Zielspeicherkarte /dev/sdd und wählst im Kontextmenü auf Einfügen.

Dies wiederholst du mit sdc2

Bislang ist noch nichts kritisches auf sdd passiert. Der nächste Klick wird die vorhanden Daten auf /dev/sdd überschreiben!

Klicke jetzt auf den grünen Haken um den Kopierprozess zu starten. Den Warnhinweis bestätigst du mit Klick auf Anwenden!

Screenshot: GParted warnt vor Datenverlust. Ich übrigens auch!
Screenshot: GParted warnt vor Datenverlust. Ich übrigens auch!

Nach Abschluss der Arbeiten sieht die neue Speicherkarte im GParted so aus:

Screenshot; GParted zeigt auf Laufwerk sdd jetzt die Partitionen "Kopie von /devsdc1" und "sdc2"
Screenshot; GParted zeigt auf Laufwerk sdd jetzt die Partitionen „Kopie von /devsdc1“ und „sdc2“

Da beim Kopieren neue Partitionen entstehen, werden dafür auch neue PARTUUID vergeben. Dies hindert uns daran jetzt von der neuen Speicherkarte zu starten. Deshalb müssen wir manuell noch etwas manuell nacharbeiten.

Schritt 3: PARTUUID anpassen

Die PARTUUID kannst du dir mit

ll  /dev/disk/by-partuuid

anzeigen lassen. Bei dir weichen die IDs natürlich ab.

Ausgabe des ll Kommandos, die PARTUUID von sdc1 und sdd1 sowie sdc2 und sdd2 sind unterschiedlich

Ein laufendes Raspberry Pi OS System verwendet die PARTUUID an zwei Stellen Zunächst musst du die beiden neuen Partitionen einhängen.

Schritt3a: cmdline.txt editieren

Auf der boot Partition liegt die Datei cmdline.txt.

Diese sieht in etwa so aus:

console=serial0,115200 console=tty1 root=PARTUUID=18481e83-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait rfkill.default.state=1 systemd.restore_state=0 cgroup=1 cgroup_enable=memory

Im Parameter root= wird dem System beim Start mitgeteilt, welches die Root-Partition ist. Hier findest du nach dem Kopieren die alte PARTUUID. Um dies zu ändern, trage hinter PARTUUID= die neue PARTUUID ein.

Schritt 3b: fstab ändern

Jetzt ist Raspberry Pi OS zumindest schonmal startfähig. Allerdings werden später im Startprozess die beiden Partitionen als Dateisystem eingehängt. Deshalb müssen wir auf der root-Partition unter etc/fstab für beide Partitionen die PARTUUID anpassen:

proc            /proc           proc    defaults          0       0
PARTUUID=18481e83-01  /boot           vfat    defaults          0       2
PARTUUID=18481e83-02  /               ext4    defaults,noatime  0       1

Da die Datei dem root User gehört lässt sie sich auch nur mit entsprechenden Rechten editieren.

Um sicherzustellen, dass alle Daten auf die Speicherkarte geschrieben wurden, solltest du zur Sicherheit ein

sudo sync

ausführen. Jetzt kannst du die MicroSD Karte in deinen Raspberry Pi einschieben und starten.

Nach erfolgreichen Start kann es auch jetzt nicht schaden, ein Expand Filesystem wie oben auszuführen.

So sieht das System, dass vorher auf einer 256GB Karte residierte nun aus:

Screenshot: df zeigt die /dev/root Partition nach der Größenänderung mit einer Gesamtgröße von 29GB an, davon werden 26
Screenshot: df zeigt die /dev/root Partition mit einer Gesamtgröße von 29GB an, davon werden 26% verwendet.

Abschluss

Ich gebe dir nochmal dringend den Tipp, dich bei jedem Schritt zu vergewissern, dass du die korrekte Partition auf dem richtigen Datenträger ausgewählt hast. Andernfalls kannst du dir dein ganzes System zerschießen!

Schreibe einen Kommentar

WordPress Cookie Hinweis von Real Cookie Banner