Raspberry Pi 5: microSD durch NVMe-SSD ersetzen und System sauber migrieren

Ich habe mein Raspberry-Pi-System von einer microSD-Karte auf eine NVMe-SSD umgezogen. Konkret kommt jetzt eine 512-GB-NVMe über einen PCIe-HAT zum Einsatz. Ziel war es, das System robuster, schneller und langfristig stabiler zu machen.

microSD-Karten sind für viele Raspberry-Pi-Projekte ausreichend, stoßen aber bei dauerhaftem Betrieb mit vielen Schreibzugriffen schnell an ihre Grenzen. In meinem Fall laufen unter anderem indi-allsky, Bildspeicherung, Datenbankzugriffe und regelmäßige Uploads. Dafür ist eine NVMe-SSD schlicht die bessere Wahl: höhere Performance, deutlich höhere Lebensdauer und weniger Risiko für Dateisystem-Probleme.

Im Folgenden beschreibe ich Schritt für Schritt, wie ich das bestehende System im laufenden Betrieb von der microSD auf die NVMe migriert habe.

Voraussetzungen

Ein Raspberry Pi 5 mit NVMe-HAT
Eine NVMe-SSD mit ausreichend Kapazität (in meinem Fall 512 GB)
Aktuelles Raspberry Pi OS
SSH-Zugang oder lokale Shell

Prüfen, ob die NVMe erkannt wird

Zuerst habe ich geprüft, ob die NVMe vom System korrekt erkannt wird.

 lsblk

Die NVMe sollte als Gerät wie nvme0n1 erscheinen. Wenn das der Fall ist, sind HAT, SSD und EEPROM grundsätzlich in Ordnung.

NVMe partitionieren und formatieren

Die SSD war neu und leer. Deshalb habe ich sie zunächst mit GPT initialisiert und eine einzelne ext4-Partition angelegt.

 sudo parted --script /dev/nvme0n1 mklabel gpt sudo parted --script /dev/nvme0n1 mkpart primary ext4 0% 100% sudo mkfs.ext4 /dev/nvme0n1p1

Danach habe ich die NVMe gemountet.

 sudo mkdir -p /mnt/ssd sudo mount /dev/nvme0n1p1 /mnt/ssd

System von microSD auf NVMe kopieren

Der eigentliche Umzug erfolgte mit rsync. Das System lief dabei weiter, relevante Dienste habe ich währenddessen gestoppt, um Schreibzugriffe zu minimieren.

 sudo rsync -axHAWX --numeric-ids --info=progress2 \ --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \ / /mnt/ssd

Die Excludes sind wichtig, weil sie virtuelle Dateisysteme und Laufzeitdaten ausschließen, die nicht kopiert werden dürfen oder sollen.

Nach dem ersten Lauf habe ich einen zweiten rsync-Durchgang gemacht, um letzte Änderungen sauber zu synchronisieren.

 sudo rsync -axHAWX --numeric-ids \ --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} \ / /mnt/ssd

Root-Dateisystem auf NVMe umstellen

Damit das System künftig von der NVMe startet, musste die Root-Partition angepasst werden.

Zuerst habe ich die PARTUUID der NVMe ermittelt.

 sudo blkid /dev/nvme0n1p1

Dann habe ich die cmdline.txt bearbeitet.

 sudo sudo nano /boot/firmware/cmdline.txt

Dort habe ich den root-Parameter auf die PARTUUID der NVMe geändert. Wichtig: alles bleibt in einer einzigen Zeile.

Boot-Reihenfolge prüfen

Damit der Raspberry Pi NVMe-Boot unterstützt, habe ich die Boot-Reihenfolge überprüft.

 sudo raspi-config

Unter Advanced Options habe ich NVMe bzw. USB als Boot-Option ausgewählt. Alternativ lässt sich das direkt im EEPROM setzen.

Test und erster Start von NVMe

Zum Abschluss habe ich das System sauber heruntergefahren, neu gestartet und geprüft, von wo das Root-Dateisystem gemountet wird.

 lsblk

Wenn die Root-Partition auf nvme0n1p1 liegt, ist der Umzug erfolgreich abgeschlossen.
Letzter Schritt: Trim starten!

 sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer

Hat dir dieser Beitrag gefallen?

Du kannst allsky-rodgau.de mit einem kleinen Kaffee auf BuyMeACoffee unterstützen.

Jetzt Kaffee spendieren!