Running a home webserver on a Raspberry Pi has been one of my most rewarding tech projects. Recently, I decided it was time for a major upgrade, moving from my trusty Raspberry Pi 3 B+ to the new Raspberry Pi 5 with 16GB of RAM, and ditching the SD card for blazing-fast NVMe storage. Here’s how I made the transition and the incredible performance gains I experienced.
Why Upgrade?
My Pi 3 B+ had served me well for years, hosting my personal website, development projects, and various web applications. However, I was starting to hit some limitations:
- Limited RAM causing occasional memory pressure
- SD card I/O bottlenecks during heavy traffic
- Slower ARM Cortex-A53 processor struggling with modern web frameworks
- USB 2.0 limitations for external storage
The Pi 5 promised to solve all these issues and then some.


Raspberry Pi 3 B+ vs Raspberry Pi 5: Side-by-Side Comparison
Feature | Raspberry Pi 3 B+ | Raspberry Pi 5 (16GB) |
CPU | Quad-core ARM Cortex-A53 @ 1.4GHz | Quad-core ARM Cortex-A76 @ 2.4GHz |
RAM | 1GB LPDDR2 | 16GB LPDDR4X |
GPU | VideoCore IV | VideoCore VII |
Storage | MicroSD only | MicroSD + M.2 NVMe support |
USB Ports | 4x USB 2.0 | 2x USB 2.0, 2x USB 3.0 |
Ethernet | 300Mbps (shared with USB) | Gigabit Ethernet (dedicated) |
WiFI | 802.11ac 2.4/5GHz | 802.11ac 2.4/5GHz (improved antenna) |
GPIO | 40-pin header | 40-pin header |
Power | 5V/2.5A via micro USB | 5V/5A via USB-C |
Boot Options | SD card only | SD card, USB, NVMe, Network |
The performance difference is substantial, the Pi 5 offers roughly 3x the CPU performance and 16x the RAM capacity.
The Migration Process
Step 1: Initial Boot with Existing SD Card
A nice thing of the Raspberry Pi ecosystem is its backward compatibility. I took the SD card from my Pi 3 B+ and inserted it directly into the Pi 5. To my delight, it booted successfully on the first try!
However, I needed to ensure all drivers and firmware were optimized for the new hardware.
Step 2: System Update and Optimization
Once booted, I immediately updated the system to ensure compatibility with the Pi 5’s hardware:
sudo apt update
sudo apt upgrade -y
sudo rpi-update
sudo reboot
This process took about 10-15 minutes and installed all the necessary firmware updates and drivers specific to the Pi 5. The system felt noticeably snappier even running from the same SD card.
Step 3: Setting Up NVMe Storage
Next came the exciting part, setting up the NVMe SSD. I installed a 256GB NVMe 2230 SSD onto the NVMe PCIe Board, which connects directly to the Raspberry Pi 5’s PCIe slot. This provides much faster performance than USB-based solutions and gives you true PCIe speeds.


First, I verified the drive was detected:
lsblk
The NVMe drive appeared as /dev/nvme0n1
.
Step 4: Cloning SD Card to NVMe
For the migration, I used rpi-clone
, a fantastic utility designed specifically for Raspberry Pi storage cloning:
sudo apt install rpi-clone -y
sudo rpi-clone nvme0n1
The rpi-clone
utility is brilliant because it:
- Automatically resizes partitions to fit the target drive
- Handles the boot partition correctly
- Excludes unnecessary files and directories
- Provides a bootable clone without manual partition editing
Alternatively, you can use the dd
command to copy the SD content to the NVMe:
sudo dd if=/dev/mmcblk0 of=/dev/nvme0n1 bs=4M status=progress
However, this is much slower because it’s a raw copy that copies every bit including empty space, and you’ll need to manually resize partitions afterward.
Step 5: Switching Boot to NVMe
With the NVMe drive cloned and ready, I needed to switch the boot sequence. I shut down the Pi:
sudo poweroff
Then I removed the SD card and powered on the Pi 5. It should now boot directly from the NVMe drive via the PCIe connection.
Option 2: Change Boot Order via raspi-config. Alternatively, you can change the Pi 5’s boot sequence to prioritize NVMe over SD card using:
sudo raspi-config
Navigate to:
- Advanced Options → Boot Order → NVMe/USB Boot
This sets the boot order to try NVMe/USB storage first before falling back to SD card. The Pi 5’s improved bootloader makes this process much more reliable than previous models.
I chose the physical method for a clean transition, but the raspi-config option is useful if you want to keep the SD card as a backup boot option.
To verify the system was running from NVMe:
df -h /
lsblk
The root filesystem now showed as mounted from /dev/nvme0n1p2
instead of /dev/mmcblk0p2
.
Step 6: Expanding the Filesystem
Once booted from NVMe, I expanded the filesystem to use the full capacity of the 256GB drive:
sudo raspi-config
I navigated to:
- Advanced Options → Expand Filesystem
After expanding, I rebooted to ensure all changes took effect.
Network Configuration Update
With the hardware migration complete, I needed to update my network configuration. The Pi 5 received a new IP address from DHCP, so I had to:
Update Router Port Forwarding: Changed the forwarded IP from the old Pi 3 B+ address to the new Pi 5 address
Pro tip: Consider setting up a static IP reservation in your router for your Pi to avoid this step in future migrations.
Performance Improvements
The difference in performance has been night and day:
Boot Time
- Pi 3 B+ (SD): ~45 seconds
- Pi 5 (NVMe): ~12 seconds
Web Server Response
- Apache benchmark (1000 requests):
- Pi 3 B+: Average 850ms response time
- Pi 5: Average 180ms response time
File Operations
- Large file transfers: 5x faster
- Database queries: 3x faster
- Docker container startup: 4x faster
Lessons Learned
- Always backup before migrating – While
rpi-clone
is reliable, having a backup of your 128GB SD card image saved me from potential headaches. - NVMe makes a huge difference – The storage upgrade provided more noticeable improvements than even the CPU upgrade in many scenarios.
- Power supply matters – The Pi 5 needs significantly more power. Using the official 27W USB-C adapter prevented any stability issues.
- Check your cooling – The Pi 5 runs hotter than the 3 B+. I added a small heatsink and fan to maintain optimal temperatures under load.
Final Thoughts
Upgrading from the Raspberry Pi 3 B+ to the Pi 5 with NVMe storage has transformed my home webserver experience. Page loads are snappy, deployments are faster, and I have room to grow with additional services and applications.
The migration process was surprisingly straightforward thanks to excellent tools like rpi-clone
and the Pi 5’s flexible boot options. If you’re running any kind of server workload on an older Pi, I highly recommend making the jump – the performance gains are absolutely worth it.
Have you upgraded your Raspberry Pi setup recently? What performance improvements did you notice? Share your experience in the comments below!
Leave a Reply