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/ssdDie 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/ssdRoot-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