Migrating Pi 5 from microSD to USB3 Samsung 870 EVO SSD, and Pitfalls
Since I use Raspberry Pi 5 as a virtual machine (VM) host for Home Assistant OS (HAOS) in KVM, I want a system that is simple, stable, and reliable.
After repeated microSD drawbacks, I selected the Samsung 870 EVO SSD 500GB via USB3 over my previous Raspberry Pi 128GB microSD U2 for system storage.
Performance Comparison: microSD vs USB3 SSD
To quantify the improvement, I used:
curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
Results
Test | microSD Card | Samsung 870 EVO SSD | Improvement |
---|---|---|---|
HDParm Disk Read | 87.11 MB/sec | 362.74 MB/sec | 4.2x faster |
HDParm Cached Disk Read | 83.74 MB/sec | 352.69 MB/sec | 4.2x faster |
DD Disk Write | 71.0 MB/sec | 306 MB/sec | 4.3x faster |
FIO 4k Random Read | 7,322 IOPS | 40,156 IOPS | 5.5x faster |
FIO 4k Random Write | 4,070 IOPS | 35,679 IOPS | 8.8x faster |
IOZone 4k Read | 22,064 KB/sec | 45,015 KB/sec | 2x faster |
IOZone 4k Write | 10,453 KB/sec | 44,799 KB/sec | 4.3x faster |
IOZone 4k Rand Read | 22,012 KB/sec | 23,832 KB/sec | 1.1x faster |
IOZone 4k Rand Write | 14,664 KB/sec | 44,969 KB/sec | 3.1x faster |
Overall PiBenchmarks Score | 4098 | 14655 | +3.6x higher |
Summary:
The USB3 SSD is consistently at least 4x faster for sequential reads/writes, and up to 9x faster for random IO operations. This means faster boot times, quicker VM performance, and far more reliability for Home Assistant and other hosted services.
Step-by-Step Migration Guide
Below are the essential steps I used to switch storage (with comments for each):
1. Update Your System (SSD NOT connected yet)
sudo apt update \&\& sudo apt full-upgrade
sudo rpi-eeprom-update -a
sudo reboot
2. Check Current Boot Order (SSD NOT connected yet)
sudo rpi-eeprom-config
Read hexadecimal right to left: SD card (1) → NVMe/PCIe (6) → USB (4) → repeat (f)
INSERT SSD HERE
Connect Samsung SSD to a blue USB3 port for optimal speed.
3. Verify SSD Detection
lsblk
You should see output like:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 2G 0 loop
sda 8:0 0 465.8G 0 disk
mmcblk0 179:0 0 117G 0 disk
└─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 116.5G 0 part /
zram0 254:0 0 2G 0 disk [SWAP]
4. Clone System to SSD
sudo rpi-clone sda \# Use your actual SSD device
sudo df -h
5. Set USB-first Boot Order
sudo rpi-eeprom-config --edit
Change BOOT_ORDER=0xf41
to BOOT_ORDER=0xf164
(this tells Pi to try USB first, then NVMe, then SD, then repeat)
6. Shutdown and Remove microSD
sudo shutdown -h now
Remove microSD card, leave only SSD on blue USB3 port.
Troubleshooting Note
Root Cause:
The Pi firmware successfully tries to boot from SSD, but if the OS configuration (cmdline.txt
) still points to the missing SD card root partition, the system hangs at boot unable to find its root filesystem.
Fix:
Update the root=
line in SSD’s /boot/firmware/cmdline.txt
to your SSD’s actual PARTUUID (find with sudo blkid /dev/sda2
).
Comment:
This is a common pitfall after disk cloning—boot files may still reference the old SD device instead of the new SSD.
Always check and update cmdline.txt
(and sometimes /etc/fstab
) to match your new SSD’s partition info.
You can use blkid
to find the real UUID/PARTUUID values for your disk.
Final Takeaways
- Migrating to a USB3 SSD on Pi 5 yields huge performance and reliability gains—worth the time investment.
- Use PiBenchmarks before/after to see real hardware improvements.
- Always double-check boot config files after cloning!