Been running my Raspberry Pi 5 on a MicroSD for a while. It worked, but the disk was the bottleneck — pulling Docker images was slow. So I swapped it out for a 128GB NVMe SSD. This Pi is part of my self-hosting setup.
Checking the current state
First I verified what was mounted:
lsblk -f
And confirmed the NVMe was detected:
sudo fdisk -l /dev/nvme0n1
I used a 128GB KZ128 SSD. Nothing fancy.
Wiping and partitioning the NVMe
sudo wipefs -a /dev/nvme0n1
sudo parted /dev/nvme0n1 --script mklabel gpt
sudo parted /dev/nvme0n1 --script mkpart primary ext4 0% 100%Cloning the existing system
Used rpi-clone (from geerlingguy's repo) to migrate everything over:
rpi-clone /dev/nvme0n1
It handled mounting, rsyncing, and updating configs. No manual steps.
Setting boot order
sudo raspi-config
Advanced Options → Boot Order → NVMe/USB Boot.
Reboot and verify
sudo reboot now
After coming back up:
findmnt /
Showed /dev/nvme0n1p2 as root. Done.
Docker pulls are faster now. If your Pi does anything disk-heavy, the NVMe is worth it.
Honest note: I didn't make a proper backup before doing this. I have Kopia running periodic backups on some important data, but I haven't even reviewed whether those are actually good. Basically just trusted rpi-clone and hoped for the best. Worked out fine, but not something I'd recommend.
Shoutout to Jeff Geerling for maintaining the rpi-clone fork. Made the whole migration a one-liner.