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!

More posts: Installing HAOS/KVM on Raspberry Pi 5