How to Migrate From SD Card to NVMe SSD on Raspberry Pi
So you just bought a blazing-fast NVMe SSD to upgrade your Raspberry Pi. But what if you already have your system running well and don’t want to start over from scratch? In that case, you can migrate your existing system from the SD card to the NVMe SSD. I’ll show you how.
On the Raspberry Pi, a system on an SD card can be moved to an NVMe SSD using: 1) SD Card Copier from Raspberry Pi OS desktop, 2) the dd command from the terminal, or 3) Clonezilla from a live USB. After copying the system over, change the boot order to include NVMe.
The methods I’ve shared below are ordered from easiest to hardest, depending on the OS you’re using. These instructions are for migrating to an internal NVMe SSD, but it should work for an external USB-NVMe enclosure as well. Let’s get started.
If you’re new to Raspberry Pi or Linux, I’ve got something that can help you right away!
Download my free Linux commands cheat sheet – it’s a quick reference guide with all the essential commands you’ll need to get things done on your Raspberry Pi. Click here to get it for free!
Method #1: Copy SD Card to NVMe on Raspberry Pi OS
On a running system with the desktop app SD Card Copier.
I like this method the most because you can copy a live and running system!
On the Raspberry Pi OS desktop edition, it’s easy to do with SD Card Copier.
Clone SD Card to NVMe SSD With SD Card Copier
Here’s how to migrate your SD card to an NVMe SSD on Raspberry Pi OS Desktop:
- Launch the SD Card Copier from the main menu > Accessories > SD Card Copier.
- Select these options:
- Copy From Device: choose the SD card.
- Copy To Device: choose the NVMe SSD you want to copy to.

- Click Start.
It will take some time to copy the partitions and files over.
Note: If your NVMe drive is connected via a special Raspberry Pi case or HAT, but the SD Card Copier isn’t working properly, try enabling PCIe manually:
• Edit the Raspberry Pi config file:sudo nano /boot/firmware/config.txt
• Add this line at the top:dtparam=pciex1
• Reboot. Now, try the SD Card Copier again, and it should work.
For more details, check out our guide: How to Use an NVMe SSD on Raspberry Pi.
Great, now the SD Card Copier has cloned the SD card to your NVMe SSD.
You can get answers from real experts in minutes.
Get help with your setup
But how do you get the Raspberry Pi to boot to NVMe?
Let’s cover that next.
Change Boot Order to NVMe Using raspi-config
Here’s how to change the boot order from SD card to NVMe SSD using raspi-config:
- Launch the raspi-config utility:
sudo raspi-config - Go to Advanced Options > Boot Order > NVMe/USB Boot.

- Hit Enter. If you’re asked to update the bootloader, agree.
When it’s done, you’ll get this confirmation:
- Go to Finish to exit raspi-config.
You’ll be asked to restart.
I decided to shut down instead and remove my SD card first.
When you turn your Pi on again, it should load your system from the NVMe SSD.

Expand the New Drive Using the raspi-config Utility
Does the new disk you copied to have more storage capacity than your SD card did?
Then you’ll probably want to expand the root partition to use the extra space.
In my case, the SD Card Copier automatically did this for me. Nice.
But if that didn’t happen for you, you can expand the space using raspi-config:
- Launch raspi-config:
sudo raspi-config - Go to Advanced Options > Expand Filesystem. Hit Enter.

- Finish and exit raspi-config.
You’ll get a confirmation message.
That’s all! You’re all done migrating your SD card to an NVMe SSD.
Using SD Card Copier is the easiest way in my opinion.
But what if you don’t have access to a Raspberry Pi OS desktop and can’t use SD Card Copier?
We’ll cover an alternative method next.
Method #2: Clone SD Card to NVMe SSD From the Command Line
On a running system using terminal commands.
On most Linux distros, there isn’t a built-in desktop app like SD Card Copier that lets you image a running system. Not at the time of this publication anyway.
You can still do it from the terminal using the dd command.
Clone SD Card to NVMe SSD With the dd Command
To prepare, we need to find our drives’ assigned names: lsblk
You might also like: 7 Surprising Uses for a Raspberry Pi

With that info, clone your SD card to NVMe SSD using the dd (disk dump) command: sudo dd if=/dev/mmcblk0 of=/dev/nvme0n1 bs=4M conv=fsync status=progress
If you’re curious, here are what the parameters do:
Bonus tip: If the terminal still feels confusing, I made a simple cheat sheet with 74 commands explained in plain English. You can grab it here for free..
If you want a clearer path than jumping from tutorial to tutorial, my book gives you a step-by-step roadmap to really understand your Raspberry Pi.
Check the book here- if= is the input file, the disk we want to clone, so we put the name of our SD card.
- of= is the output file, the disk we want to copy to, so we put the name of our NVMe SSD.
- bs=4M tells it to use 4MB block sizes to copy more efficiently.
- conv=fsync forces the command to physically write everything to disk (instead of cache) before finishing. This is a data integrity check to avoid data corruption.
- status=progress shows a progress bar as it’s working.
A summary will appear when copying is done. Mine took about ten minutes or so.

The nice thing about dd is that it’s universal: it should work on any Linux distro.
Tip: Command lines can be a pain to memorize. I put the essential Linux commands on a printable cheat sheet so you don't have to keep googling them. You can grab the PDF here if you want to save some time.
Change Boot Order to NVMe Using rpi-eeprom
If your Raspberry Pi has already been configured to boot to other media (like USB) in the past, you can remove the SD card, and it should boot into your NVMe SSD.
But if that doesn’t work, you’ll need to change the boot order from a working system.
Choose from one of the methods below.
You might also like: Probably one of the best Raspberry Pi workstations (review)
1. Do you have Raspberry Pi OS on another SD card?
If yes, follow the steps in the previous section to change the boot order with raspi-config.
This change will persist on the Raspberry Pi itself across all systems.
2. Are you running a Debian-like OS (e.g., Ubuntu, Linux Mint, Kali Linux, etc.)?
If yes, you should be able to access a special command to edit the Raspberry Pi bootloader.
First, try to install this package: sudo apt install rpi-eeprom
If the package gets installed or is already installed, great! This method should work.
If not, skip to option #3.
Here’s how to change the boot order with rpi-eeprom:
- Get the newest version of the Raspberry Pi bootloader:
sudo rpi-eeprom-update -a
- Open the bootloader:
sudo rpi-eeprom-config --edit - Find the boot order line and change it to this:
BOOT_ORDER=0xf146
This change tells the Raspberry Pi to look for NVMe first, then USB, and finally SD card. - Save & exit (CTRL +X, Y, Enter) to write the changes.

- Shut down to get ready.
sudo shutdown now
3. Are the methods above not available to you?
Then jump down to this section to learn about a a third method to change the boot order.
Now that you’ve changed the boot order, remove the SD card, and turn on the Raspberry Pi.
It should now boot to the system on your NVMe SSD.
You might also like: Don’t waste money — read this guide before picking your Raspberry Pi.

Expand the New Drive to Use Available Free Space
Surprisingly, I didn’t have to expand the root partition on my NVMe drive after cloning.
Ubuntu already did it for me automatically.
But if this doesn’t work for you, you can expand the partition using graphical disk management apps like GParted or Gnome Disks.
Here’s how to expand a cloned partition using GParted:
- Install GParted using your system’s package manager and launch it from your desktop.
For example:sudo apt install gparted
- Select your NVMe drive from the dropdown on the top right.

- Right click the root partition (e.g., nvme0n1p2), and select Resize/Move.

- Drag the bar, or type in the New size, so that the Free space following equals 0.
Click Resize.
- Changes aren’t written until you click the checkmark to apply.

The resize operation will take a little time. You’ll get a message when it’s done.

Alternatively, if you don’t have a desktop environment, you can use the fdisk command to expand the partition.
That’s the end of the dd command method!
But if none of these cloning methods have worked for you so far, don’t give up.
There’s one last resort: the old tried-and-true method, which we’ll cover in the next section.
You might also like: 15 Easy Projects for Raspberry Pi Beginners
Something not working? Don't waste hours going in circles. Ask in the RaspberryTips Community and get help from people who've already figured it out. Get unstuck now.
Method #3: Clone SD Card to NVMe SSD From a Live USB
From a separate USB drive equipped with Clonezilla.
The methods I showed you earlier are convenient because you can copy a running system.
But if they don’t work or lead to corruption, you can clone the traditional way instead:
booting to a USB drive that doesn’t contain your main system and using cloning software.
In short, we’re going to:
- Install Raspberry Pi OS Lite onto a bootable USB drive.
- Install Clonezilla from the default repository.
Clonezilla is the gold standard on Linux for copying drives. I’ve used this software for complex situations like cloning from a network boot. When in doubt, Clonezilla will get the job done.
The key to this trick: doing it this way installs a Clonezilla version that works for the Raspberry Pi’s special CPU architecture.
The downside of this method is that it’s more involved.
You’ll need to have three separate storage devices connected to your Raspberry Pi:
- The SD card contains your system.
- The NVMe SSD you want to copy to.
- A bootable USB flash drive that contains cloning software.
Install Raspberry Pi OS Lite onto USB
To use this method, you’ll need to be able to boot from a USB drive.
Here’s how to install Raspberry Pi OS Lite onto a USB drive:
- Launch Raspberry Pi Imager on your PC or Raspberry Pi.
(If you don’t have Imager installed yet, check out how to get it here.) - Set the options below:
- CHOOSE DEVICE > Select your Raspberry Pi model.
- CHOOSE OS > Raspberry Pi OS (other) > Raspberry Pi OS Lite.
- CHOOSE STORAGE > Select your USB drive.

- Click NEXT.
When prompted about OS customization, click Edit Settings.
If needed, set your user/pw, Wi-Fi, and enable SSH.
(For more details on custom settings, read our guide to Imager.)
- Click SAVE > YES to apply > YES to confirm.
Imager will begin writing to the USB drive.
When it’s done writing, shut down the Raspberry Pi.
Remove the SD card and connect your USB drive.
When you turn the Pi on again, it should boot to Raspberry Pi OS Lite on USB.
The first time, it might restart a few times before you get a login screen. Be patient.
Bonus tip: If the terminal still feels confusing, I made a simple cheat sheet with 74 commands explained in plain English. You can grab it here for free..
Note: If your USB drive won’t boot when plugged into USB3 ports (blue ones), try using your USB2 ports instead (black ones). Some adapters will only boot from USB2.
When you see the prompt on your terminal, log in with the username/pw you set earlier.
You’ll need internet access for the next part, so make sure it’s working. A wired connection is the easiest way to get going. But there’s a way to connect Wi-Fi from the command line too.
Note: If you put your Wi-Fi details into Imager earlier, but it won’t connect, it could be due to a recent bug. To fix it, load the raspi-config tool:sudo raspi-config
• Go to Localisation Options > WLAN Country and set your country code.
• Exit to save.
The Wi-Fi interface should come up and connect properly.
Clone SD Card to NVMe SSD Using Clonezilla
Now that you’ve booted to Raspberry Pi OS Lite, we’re ready to start using the cloning software.
First, let’s install Clonezilla:
- Install the Clonezilla package:
sudo apt install clonezilla - Plug in the SD card containing the system you want to copy.
The USB drive, SD card, and NVMe SSD are all connected to your Raspberry Pi. - Launch Clonezilla:
sudo clonezilla
Next, let’s clone the SD card using Clonezilla.
- Navigate through these options to initiate a disk copy:
- device-device > Beginner mode > disk_to_local_disk


- device-device > Beginner mode > disk_to_local_disk
- Clonezilla will scan for drives connected to your Raspberry Pi.
- Local disk as source.
Select your SD card containing your working system:
- Local disk as target.
Choose the NVMe SSD you want to copy to:
- Local disk as source.
- For the next few screens, hit Enter to accept the defaults:
- Set advanced parameters?
Skip checking/repairing source file system. - Mode to create partition table?
Use the partition table from the source disk:
- Action to perform when finished?
Choose reboot/shutdown/etc when everything is finished.
- Set advanced parameters?
- When prompted, press Enter to continue.
Warnings will appear that it’ll erase the new drive. Confirm twice.
- Clonezilla will start cloning the SD card and all of its partitions.
A progress meter will update as it goes.
- When it’s done, you’ll press Enter one last time to exit:

Finally, let’s check if cloning was successful:

I can see that the NVMe SSD (nvme0n1) now has two partitions (p1 & p2) that are identical to my SD card (mmcblk0), so this looks good!
Change the Boot Order Using a Spare SD Card
Since you’ve already booted to USB to use Clonezilla, you may be able to boot to your new NVMe SSD. Power off, unplug the SD card and USB drive, and turn the Raspberry Pi back on.
But if that doesn’t work, you’ll have to change the Raspberry Pi boot order manually.
Start by trying one of the ways we went over earlier:
- Run raspi-config from Raspberry Pi OS. Instructions here.
- Install rpi-eeprom from your system’s default repo. Instructions here.
But these methods don’t work on every OS.
For instance, they won’t work if your only system is Manjaro or Alpine Linux.
So here’s another way to modify the Raspberry Pi bootloader using a spare SD card:
Warning: This method will erase everything, so don’t use an SD card containing your main system!
- Insert the spare SD card into a USB card reader on your PC or Raspberry Pi.
- Install Raspberry Pi Imager.
There are versions for Windows, Mac, or Linux. - Launch Imager and make the following selections:
- Choose your Raspberry Pi model.
- CHOOSE OS > Misc utility images > Bootloader > NVMe/USB Boot.
- CHOOSE STORAGE and pick the USB card reader / SD card.

- Click NEXT and confirm to proceed.
It will begin writing the new bootloader settings. - When it’s done, transfer the SD card to your Raspberry Pi, and turn it on.
- Give it a few minutes to update the bootloader.
It does this silently. You can tell it’s done when:
– Your monitor shows a screen that’s completely green.
– The LED on your Raspberry Pi flashes in a constant pattern. - When it’s all finished, unplug the power cable to turn off your Pi.
Finally, remove the SD card.
Now that I’ve changed the boot order, it’s time to test if everything works.
I removed the USB drive and SD card so that my NVMe SSD is the only disk connected.
When I powered the Raspberry Pi on again, it loaded my OS, the Wi-Fi connection was working immediately, and I was able to update packages. Success!

Expand the New Drive to Use Available Free Space
If your new drive is larger than your SSD, then you’ll want to expand the root partition to use all the available free space.
You can install GParted or Gnome Disks to do this from the desktop, like we covered earlier in the article. Or you can use the fdisk command to do it from the command line.
That’s it for today! We’ve covered three different methods to migrate your Raspberry Pi’s operating system from an SD card to an NVMe SSD. I tried to cover every problem you might have encountered.
If you don’t have an NVMe SSD for your Raspberry Pi yet, the price of NVMe SSDs (like this one) is quite affordable now, and there are more NVMe-capable accessories for the Raspberry Pi (like this HAT or this case) than ever before.
There are even rumors about the Raspberry Pi 6 bringing native support for NVMe drives, so if you feel the need for speed, it’s a great time to upgrade.
In my experience, it made a huge difference in how fast it was using my Raspberry Pi 5 as a PC. If you’ve just leaped, or if you’re thinking of doing so, this guide will be here waiting for you.
Not getting the same result?
Even when you follow every step, small differences in OS version, hardware or config can change the outcome. Instead of wasting time guessing, get help from people who have already fixed the same kind of issue.
- Get help on your exact issue
- Access step-by-step videos for tricky setups
- Browse the website without ads
