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:
- Der Speicher auf der MicroSD wird knapp
- 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.
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, das die Kapazität der neuen Karte nicht überschritten wird. 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:
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.
Wenn du mit der rechten Maustaste auf die Partition sdc2
klickst, wählst den Menüpunkt Größe ändern / Verschieben
aus.
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.
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!
Nach Abschluss der Arbeiten sieht die neue Speicherkarte im GParted so aus:
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.
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:
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!