Run Raspbian from a USB Flash or SSD on a Raspberry Pi 4

Improve the performance of your Raspberry Pi 4 by running Raspbian from a SSD drive or USB Flash Drive following this tutorial.

Run Raspbian from a USB Flash or SSD on a Raspberry Pi 4

UPDATE: A few people have got in touch recently saying these instructions no longer work with certain SSDs. I'll update the tutorial soon

The Raspberry 4 features a capable 4-core SOC (System on a Chip) with up to 4GB of RAM, but all this performance is bottle-necked by Raspbian being run from a SD card. In this tutorial, I will guide you through the process of running Raspbian from either a USB Flash Drive or external SSD drive.

What you'll need

The hardware you'll need to do this is as follows:

  • A USB 3 Flash drive or USB 3 External SSD drive (recommended at least 32GB)
  • A MicroSD card, at least 8GB
  • A MicroSD card reader (if your computer doesn't have one built-in)
  • A PC running MacOS, Windows or Linux
  • Of course, a Raspberry Pi 4

Step 1 - Download Raspbian and Etcher

To begin, head to the [Raspberry Pi website](https://www.raspberrypi.org/downloads/raspbian/) and download the lite version of Raspbian if you're only wanting the base operating system or desktop if you're wanting that (at time of writing, I used Raspbian Buster Lite).

Download and install Etcher onto your computer. There's a version of Etcher for most major operating systems including Windows and MacOS.

Step 2 - Flash the MicroSD and USB Flash/SSD drive

Once you have Etcher installed, open it up and flash the MicroSD card and the Flash Drive/SSD Drive with the same Raspbian Lite image.

Create a USB Flash/SSD boot device with Etcher for Raspberry Pi

Once that's done, insert the MicroSD card into the Raspberry Pi 4 and plug in the USB Flash/external SSD drive.

Step 3 - Configure the Boot Device

Unlike the Raspberry Pi 2 and 3, the Raspberry Pi 4 cannot natively boot from a USB connected storage device. Instead, we need to instruct the operating system to boot from the USB device by changing the boot instruction saved on the MicroSD card.

On your Raspberry Pi, type the following command to view the connected devices:

fdisk -l

You'll see some devices listed like the ones shown in the screenshot below.

Command window
fdisk -l showing connected devices

You'll notice two disks, one is Disk /dev/mmcblk0 and Disk /dev/sda. The first is the MicroSD from which we're currently booted from, and the other is the USB storage device. Important Your device may be called /dev/sdb. If this is the case, use this in place of sda.

Next we're going to edit the boot instruction. Type the following command to edit the boot instruction:

sudo nano /boot/cmdline.txt

There should only be one line in this file. At the end of this line, add the following (swapping sda to match your device if it wasn't /dev/sda):

root=/dev/sda2 rootfstype=ext4 rootwait

Save the file and exit (CTRL + X, then confirm with 'Y'). We're ready to boot from the USB storage device. Reboot your Raspberry Pi 4:

sudo reboot

Step 4 - Expand the partition to use the full space available on your SSD drive/USB Flash drive

Once your Raspberry Pi 4 has restarted, run the following command to see the space available:

df -h

This will show the mounted partitions, as well as the space available:

Available space on Raspberry Pi 4 USB boot device

As you can see, there's only 1.8GB of usable space for us to play with. In my case, I'm using a USB Flash drive with 32GB of space. The raspi-config tool has the ability to expand a MicroSD card, but not a USB connected device. We need to modify the tool in order to do so.

Login as root:

sudo -i

Run the following command to copy the raspi-config tool to our home folder:

cp /usr/bin/raspi-config ~

Now we need to modify the config tool with these two commands:

sed -i 's/mmcblk0p/sda/' ~/raspi-config
sed -i 's/mmcblk0/sda/' ~/raspi-config

Next we launch the modified Raspi Config:

~/raspi-config

Once it launches, go to Advanced Options and then Expand Filesystem. This may take a while, depending on your attached USB storage device. Once it's finished, you'll see the following message:

Resize USB storage on Raspberry Pi 4

Hit ok and restart your Raspberry Pi:

sudo reboot

Step 5 - Confirm the space available

Finally, we need to ensure the full space is available to the Raspberry Pi 4. Type this command once more:

df -h

Now the output should reflect the space available:

Increase USB storage space on Raspberry Pi

There is now 30G available to /dev/root. That's it! Let me know your thoughts and experiences in the comments below.