Booting Raspberry Pi 3 Model B from SSD

Published: (January 18, 2026 at 03:19 PM EST)
5 min read
Source: Dev.to

Source: Dev.to

Introduction

Hey everyone! In this post I’m going to share my experience USB‑booting the Raspberry Pi 3 Model B from an SSD. I did this almost a year ago, but finally decided to write it up (sorry for the delay — xD).

If you spot anything I missed, please let me know. Feedback is appreciated!

What I used

ItemQuantity
Raspberry Pi 3 Model B4
Raspberry Pi 3 Model B+1
Power supplies (proper voltage & amperage)5
Solid‑State Drives (SSD)5
USB‑to‑SATA adapters5

Booting from SSD

There are many blog posts, forum threads, and even LLM‑generated guides that explain how to USB‑boot a Pi 3 Model B. Below is a concise summary of the steps that worked for me.

1. Update the OS on an SD card

sudo apt update -y && sudo apt full-upgrade -y

2. Check whether USB boot is enabled

vcgencmd otp_dump | grep 17

Possible outputs

17:1020000a   # USB boot disabled
17:3020000a   # USB boot enabled

3. Enable USB boot (if needed)

Add the following lines to /boot/firmware/config.txt.
(Older tutorials refer to /boot/config.txt; that location is now outdated.)

program_usb_boot_mode=1
program_usb_boot_timeout=1

4. Clone the SD‑card image onto the SSD

# /dev/mmcblk0  →  SD card (in my case)
# /dev/sdb      →  SSD connected via USB
sudo dd if=/dev/mmcblk0 of=/dev/sdb status=progress bs=4M conv=fsync

Note: Adjust the device names (mmcblk0, sdb) to match your system.

5. Boot from the SSD

  1. Power off the Pi.
  2. Remove the SD card.
  3. Connect the SSD via the USB‑to‑SATA adapter.
  4. Power the Pi back on.

If everything went well, the Pi should boot from the SSD. You can now resize partitions, run benchmarks, etc.

Result: This worked on the Pi 3 Model B+ but failed on 4 of my 5 Raspberry Pi 3 Model B units. The next sections explain why.

The difference between Pi 3 Model B and Pi 3 Model B+

I performed the steps above on a Pi 3 Model B+ first, and it booted flawlessly. Repeating the same procedure on four Pi 3 Model B boards gave the same “no USB boot” result, even after adding program_usb_boot_timeout=1 to /boot/firmware/config.txt.

This led me to conclude that, despite being the same family, the Model B and Model B+ have subtle boot‑related differences.

My solution (a fluke)

After many failed attempts, one of the Model B boards finally booted from the SSD. I verified it in the terminal and ran I/O speed tests—everything confirmed that the OS was running off the SSD.

What changed?

I realized that I had left the SD card inserted while the SSD was also connected. The Pi still needed the SD card to start the boot process, even though the root filesystem lived on the USB SSD.

Verifying the hypothesis

  1. Format the SD card (any filesystem will do).
  2. Copy the contents of the SSD’s /boot/ directory onto the freshly formatted SD card.
    The two /boot directories must be identical.

After doing this, the Pi booted again from the SSD, confirming that the Model B requires an SD card to initiate the boot, regardless of where the OS resides.

Important details

  • Do not copy the /boot/firmware directory from one SSD to all SD cards.
  • Each SSD has a unique UUID referenced in /boot/firmware/cmdline.txt.
  • Either copy the matching /boot/firmware from each SSD to its corresponding SD card, or edit cmdline.txt so the PARTUUID= points to the correct disk.

Example cmdline.txt (single line, no line breaks):

console=serial0,115200 console=tty1 root=PARTUUID=e000a75d-02 rootfstype=ext4 fsck.repair=yes rootwait cfg80211.ieee80211_regdom=US cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

Upgrading the operating system

All the steps above were performed when the latest Raspberry Pi OS was based on Debian 12 (bookworm). The current Raspberry Pi OS now ships with Debian 13 (trixie). Rather than re‑formatting and starting from scratch, I performed an in‑place major upgrade.

Upgrade steps

  1. Edit the APT source lists

    sudo nano /etc/apt/sources.list
    sudo nano /etc/apt/sources.list.d/raspi.list

    Replace every occurrence of bookworm with trixie.

  2. Update package information and perform the upgrade

    sudo apt update
    sudo apt full-upgrade -y
  3. Reboot

    sudo reboot

After the reboot the system runs the newer Debian 13‑based Raspberry Pi OS while still booting from the SSD (with the SD card present as described above).

Update the System

  1. Refresh the package indexes

    sudo apt update
  2. Install the latest version of the package manager

    sudo apt install -y apt dpkg
  3. Upgrade without pulling in new dependencies

    sudo apt upgrade --without-new-pkgs

    Make sure everything looks fine.

  4. Perform a full upgrade

    sudo apt full-upgrade
  5. Reboot

    sudo reboot

These steps are sufficient on any setup (they work on the Raspberry Pi 3 Model B+). However, because we boot from the SD card first and not the SSD, a few extra steps are required.

Adjust the Boot Partition After an Upgrade

The Linux kernel image resides in the /boot directory. Since the Pi boots from the SD card, the boot files from the previous installation are still present. After the upgrade, the kernel remained at version 6.1 instead of the expected 6.12 (the version shipped with Debian 13).

To make the upgrade 100 % ready, repeat the steps you used to make the Pi boot from the SSD:

  1. Mount the SD‑card boot partition

    sudo mount /dev/mmcblk0p1 /mnt/sdboot/
  2. Copy the firmware from the SSD to the SD card

    sudo cp -r /boot/firmware/* /mnt/sdboot/
  3. Reboot

    sudo reboot

After completing these steps, the system boots with the new kernel and the upgrade is fully functional.

Using Containers

If you plan to run containers (e.g., Docker) or a container orchestrator such as K3s, ensure the following kernel parameters are present in /boot/firmware/cmdline.txt:

cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory

These options enable the required cgroup features for container runtimes.

References

  • Official Raspberry Pi documentation – USB boot on Pi 3
  • Various community blog posts and forum threads (links omitted for brevity)
Back to Blog

Related posts

Read more »

Network Engineer

Introduction I am embarking on a journey to become a Network Engineer. My first step is to obtain the Cisco Certified Network Associate CCNA certification, fol...