Raspberry Pi 4 USB Boot Config Guide for SSD / Flash Drives

Raspberry Pi 4 with Samsung 950 Pro NVME SSD
Raspberry Pi 4 with Samsung 950 Pro NVME SSD

The Raspberry Pi 4 is finally here and has a lot of exciting changes. One very major downside is that it doesn’t support true USB booting yet out of the box (like the 3 series did). The Raspberry Pi foundation states that it is being worked on and will be added back with a future update. No timeline has been given yet for that to happen but they state it’s one of their top priorities.

Most of my projects heavily depend on having good performing storage so sitting and waiting was not an acceptable solution. In this guide I’ll show you a workaround to use USB devices as your rootfs device and use a Micro SD card as bootloader only which gives us full SSD performance after boot! To see exactly how much of a performance difference this makes (spoiler: it’s gigantic) check out the Raspberry Pi Storage Benchmarks.

I highly recommend doing this on a completely new install. If you try to upgrade your old ones and something goes wrong there’s a good chance you might lose data. We will be modifying the boot partition, resizing partitions, etc. so don’t use a drive with any data on it unless you are positive you have all of the steps down!

Compatible USB 3.0 Adapters

The Raspberry Pi 4 is proving to be picky about what SATA, M.2, etc. adapters will work in the USB 3.0 port. The USB 3.0 ports are the ones in the middle that are blue inside. The black ones are USB 2.0 and won’t give you the faster speeds the new Pi offers.

It’s very likely that some of these will be fixed via software and firmware updates and the Raspberry Pi Foundation has several open known issues related to USB 3. Until that happens though I will maintain a list here of known working ones and known problematic ones. It’s still very early in the release of the Pi 4 so we still have a lot to learn about which adapters work / don’t work. If you have working and nonworking adapters leave a comment and I’ll add it in this list.

If the adapters worked before on older Pis then one thing you can try is putting them in the black USB 2.0 ports. Obviously this is stupid because we all want the Pi 4 performance gains but if you end up needing to buy a new adapter this will give you a workaround until a replacement arrives!

Find USB adapter chipset

There are certain chipsets used in adapters that are known to be working/not working.

pi@raspberrypi:~ $ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 174c:55aa ASMedia Technology Inc. Name: ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

This is a lsusb dump of all my connected USB devices. I have bolded the line with the USB bridge device. We can see that the chipset is ASM1153E

Known Good Chipsets

  • ASMedia ASM115X (StarTech 2.5″ SATA)

Known Working Adapters

2.5″ SATA

StarTech.com 2.5″ SATA to USB Cable

Confirmed working by dzm in the comments

ELUTENG 2.5″ SATA to USB 3.0

The ELUTENG is one of the known working 2.5″ SATA to USB 3.0 adapters for the Pi 4.

CSL SL – USB 3.0 auf SATA Adapter

The CSL SL adapter is confirmed to be working by Krikitt in the comments. Might not be available in the US.

M.2 Adapters

Shinestar M.2 NVME to USB Adapter

This is the adapter I’m using in the picture at the top of the article. It is for NVME M.2 drives.

QNINE M.2 SATA to USB Adapter

I used this adapter to benchmark M.2 SATA Lite-On and SanDisk drives — working great in 3.0 ports.

mSATA

Tanbin mSATA Micro SATA to USB Adapter

I used this mSATA to USB adapter for my Crucial M550 benchmark — working in 3.0 ports.

fe2008 mSATA to USB 3.0 Adapter

Confirmed working in comments by Nico

Power Adapters

Canakit USB-C Raspberry Pi 4 Power Supply

Known Problematic Adapters

USB Boot Instructions

  1. Prepare Bootloader SD Card – Image your SD card with the latest Raspbian 10 “Buster” release (I prefer Raspbian Lite) however you would normally do it.
  2. Prepare SSD / Flash Drive – Image your SSD or Flash Drive. Make sure you create the empty file named “ssh” on the boot partition of both drives.
  3. Boot / Update Raspberry Pi – Start up your Raspberry Pi with only the SD card in the slot. After the Pi finishes booting up plug in your SSD / Flash drive.
  4. Run sudo blkid – With your SSD / Flash drive plugged in type the command “sudo blkid” (example below)
  5. Identify drive – Your list will contain /dev/mmcblk0p1 and 2 (SD card) and your SSD / Flash drive (usually/dev/sda1 and 2).
    We are looking for the PARTUUID of your flash / SSD drive’s second partition (rootfs). This will end with -02. Here is an example:
    /dev/sda2: LABEL=”rootfs” UUID=”638417fb-7220-47b1-883c-e6fee02f51ac” TYPE=”ext4″ PARTUUID=”0634f60c-02″
    Save or white a note somewhere of the values for both drives. We will use both PARTUUIDs for /dev/sda* and dev/mmcblk* later.
  6. Edit /boot/cmdline.txt – First make a backup by typing: sudo cp /boot/cmdline.txt /boot/cmdline.txt.bak
    Now type “sudo nano /boot/cmdline.txt” – Change your boot command to load the partition from the SSD / Flash drive instead of your SD card.
    Before: dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=af1800e7-01 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
    After: dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=0634f60c-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
  7. Reboot Pi – If your Pi won’t boot put your micro SD into a computer and restore /boot/cmdline.txt.bak to get back into the Pi.
    Note: the first boot with your SSD / Flash drive will be slow the first time as it runs fsck on the drive and other first boot configuration.
    It can take over a minute or two sometimes for really big drives so give it a little bit of time here before assuming it didn’t work
  8. Update fstab – Change /etc/fstab entry for /boot to point to the SD card to ensure that firmware and bootloader updates retrieved — detailed example/instructions in section below. Reboot after updating fstab.
  9. Resize file system – Upon first startup the size of your root (/) filesystem partition will only be 1.8G no matter how big your drive is — see section below for detailed example/instructions
  10. Update Pi – Type “sudo apt-get update && sudo apt-get dist-upgrade” to update the system and firmware.

Your system will now be running completely from your USB drive! To verify this, run the command “findmnt -n -o SOURCE” / to ensure your root partition has switched over as shown below to /dev/sda2 instead of /dev/mmcblk0p2.

pi@raspberrypi:~ $ findmnt -n -o SOURCE /
/dev/sda2

Updating fstab

Right now your fstab file on the USB drive is automounting the /boot/ partition from the USB drive even though it isn’t being used. We need to update this to your SD card so that firmware/bootloader updates are actually utilized.

Get Device PARTUUIDs

First lets get a list of all storage devices attached to the Pi and their IDs (we will use these later). Type the following command:

lsblk -o name,label,partuuid

This will output a device tree with the name and label of each partition and the PARTUUID. The tree looks like this:

NAME        LABEL       PARTUUID
sda
├─sda1      system-boot 20945b24-01
└─sda2      writable    20945b24-02
mmcblk0
├─mmcblk0p1 system-boot f65c7036-01
└─mmcblk0p2 writable    f65c7036-02

We see that we have two storage devices attached (sda and mmcblk0). Each of these devices also has two partitions. Notice that both devices have a partition with the label “system-boot”. This is our target.

Edit /etc/fstab File

We are now ready to edit the /etc/fstab file. To begin editing the file type:

sudo nano /etc/fstab

Your current file will look like this:

cat /etc/fstab
proc                  /proc           proc    defaults          0       0
PARTUUID=20945b24-01  /boot           vfat    defaults          0       2
PARTUUID=20945b24-02  /               ext4    defaults,noatime  0       1

We want to change the /boot partition (ending with -01) to load our Micro SD cards PARTUUID instead of the USB drives. To do this simply replace the PARTUUID field on the line that has /boot in it with the PARTUUID from mmcblk0p1. After making the change my /etc/fstab file looks like this:

proc                  /proc           proc    defaults          0       0
PARTUUID=f65c7036-01  /boot           vfat    defaults          0       2
PARTUUID=20945b24-02  /               ext4    defaults,noatime  0       1

Press Ctrl+X to tell nano to save our changes.

Now type sudo reboot to restart the Pi.

Enable SSH on Micro SD Partition

Make sure the SD card and new drive both have a blank “ssh” file if you want to keep SSH enabled. Even if you had it on your USB storage device if you didn’t create one on your SD card the next time you reboot you won’t be able to SSH in.

ot. After reboot typing: “df -H” should show /boot/ as being the SD card again (mmcblk0). Now we can be sure that any updates to the /boot/ partition from apt-get are applying to our system.

Resizing Filesystem

By default the partition on the SSD / Flash drive will only be 1.8G. The Pi expands this automatically on micro SD drives but we will need to do it ourselves for a SSD / Flash drive. To do this we need to expand the partition and then resize the file system.

First let’s open fdisk and print the partitions:

pi@raspberrypi:~ $ sudo fdisk /dev/sda

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p

Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Disk model: 2115
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0x0634f60c
Device     Boot  Start     End Sectors  Size Id Type
/dev/sda1         8192  532480  524289  256M  c W95 FAT32 (LBA)
/dev/sda2       540672 4292607 3751936  1.8G 83 Linux

There is the line we need. Our start value for /dev/sda2 (rootfs) is 540672. Next we need to remove and recreate the partition as a larger size. If you make any mistakes during this command just close fdisk by pressing q. The changes won’t be written to disk. If you mess up any of the commands the drive will no longer boot and you’ll have to start over again so be careful!

Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.
Command (m for help): n
Partition type
    p   primary (1 primary, 0 extended, 3 free)
    e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (532481-500118191, default 589815): 540672 (enter the start value exactly as it was, the default will be wrong)
Last sector, +/-sectors or +/-size{K,M,G,T,P} (540672-500118191, default 500118191): (press enter to accept default which is the full disk)
Created a new partition 2 of type 'Linux' and of size 238.2 GiB.
Partition #2 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: n (don't remove signature)

If everything went well then type “w” and press enter. Otherwise press “q” to quit and try again. Once you enter “w” the changes will be permanently written to disk!

Now reboot the system. Type “df -h” to view the current disk:

pi@raspberrypi:~ $ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       1.8G  1.2G  450M  73% /
devtmpfs        866M     0  866M   0% /dev
tmpfs           995M     0  995M   0% /dev/shm
tmpfs           995M  8.4M  987M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           995M     0  995M   0% /sys/fs/cgroup
/dev/sda1       253M   40M  213M  16% /boot
tmpfs           199M     0  199M   0% /run/user/1000

We can see our disk is still 1.8G even after resizing the partition. That’s because we still have one more step! We need to resize the filesystem to fill our new partition space. For this we will use “sudo resize2fs /dev/sda2”:

sudo resize2fs /dev/sda2
resize2fs 1.44.5 (15-Dec-2018)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 15
The filesystem on /dev/sda2 is now 62447190 (4k) blocks long.

Now let’s check df -h again:

Filesystem      Size  Used Avail Use% Mounted on
/dev/root       235G  1.2G  224G   1% /
devtmpfs        866M     0  866M   0% /dev
tmpfs           995M     0  995M   0% /dev/shm
tmpfs           995M  8.4M  987M   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           995M     0  995M   0% /sys/fs/cgroup
/dev/sda1       253M   40M  213M  16% /boot
tmpfs           199M     0  199M   0% /run/user/1000

And that’s it! You will now be using all of your space on your SSD / Flash drive.

Conclusion

The Samsung 950 Pro NVME drive in the featured picture scored a 9189 on the Raspberry Pi Storage Benchmark. The previous all-time record score on a Pi 3B+ was 3561. The performance gains are very real and very dramatic.

For me getting this performance is well worth having to waste a micro SD card just to be a bootloader. I am largely after the USB 3.0 bus and gigabit ethernet performance improvements and using this method I am able to achieve the performance I was after without waiting an indeterminate amount of time for the feature to be added back in!

Although there are ongoing compatibility issues and we lack the super easy native USB booting support we had before I’m more than willing to go through the growing pains to finally get rid that ancient USB 2.0 bus! Just make sure if you are planning to build a system you plan your adapters and parts accordingly.

179 thoughts on “Raspberry Pi 4 USB Boot Config Guide for SSD / Flash Drives”

  1. Avatar for Leo

    reboot in step 7 ended with a stuck system. started from scratch, but left out the system update in step 3. only after the last step I did a system update and now everything seems to work fine.
    Benchmark results improved from ~1500 (using a pretty decent SD card) to ~5200 (using a pretty old crucial M4 SSD with a hdd housing I found in a drawer). Responsiveness of the raspberry pi is now much improved.
    Thanks! 🙂

  2. Avatar for PauloHeaven

    Hello,

    Thank you for your tutorial.

    I am using a Raspberry Pi 4 2 GB with Raspbian Buster, with a Kingston A400 120 GB and a 16 GB SanDisk Ultra card, and I encounter some issues.

    My first one was the Pi not booting after step n°2. I solved it by looking down the comments, and using the rpi-update command. So the firmware included in the repositories doesn’t seem to be recent enough, but it is solved nonetheless.

    The second one is when I boot on the SSD (when I still can, because of the third problem). Two lines appear when beginning an SSH session:

    rfkill: cannot open /dev/rfkill: No such file or directory
    rfkill: cannot read /dev/rfkill: Bad file descriptor

    Third issue: once the steps are completed, I can use the Raspberry flawlessly, with the OS on the SSD… Until I do sudo apt update && sudo apt dist-upgrade. So :

    – OS installed on the SD card, software and firmware updates done: life continues
    – OS installed on the SSD, guide steps completed, apt upgrade : the OS doesn’t reboot. At all. I tried to change the PARTUUID on the SD card’s cmdline.txt at least to get the OS installed on the SD card working, nothing. The SD card LED doesn’t flash. The SSD doesn’t show any activity either, the activity LED on the Startech cable is off, like there is no power. I tried with only the SD card plugged in, only the SSD plugged in, nothing plugged in so maybe something resets, to no avail. Like the Pi is angry and going on strike.

    The SD card and the SSD are working fine on my computer, and all the files seem to be there. But obviously, in front of thousands of files, I have absolutely no idea of which one I should look at, where something could be wrong, disappeared, tampered etc.

    I did all the process 3 times, use Etcher to flash the storage devices, which is known to be good at flashing Raspbian images, the most recent Raspbian release, and the recommended hardware. And it works very well when it does, as you can see on your storage benchmark that I used a few times. But in the long term, I am still facing the last 2 issues. Is there a package that I shouldn’t upgrade? Should I run rpi-config which I didn’t try at this moment?

    I can’t find a single person on Internet in the same of one of the above cases. It looks like it is either a tiny forgotten thing or an inextricable problem. I really don’t know what I did wrong, and am pulling my hair out on this. If you have an idea, I am very willing to bring more details.

    Thanks

    1. Avatar for PauloHeaven

      Update: I finally got it working.

      I tried yesterday again, and there were 20 more packages to upgrade when searching for updates. There should be something improved in them because I had no problem connecting after updates and reboot, and the rfkill messages disappeared. I didn’t even need to do sudo rpi-update. Problem was solved by itself. I hope it will stay the same, I’m glad I can finally enjoy my Pi with a working OS an the SSD 😃

      Thanks

  3. Avatar for Javanaut

    Just applied your guide to a setup of:

    RPi 4B v1.1
    Current Raspian Buster Lite flashed with balenaEtcher
    SanDisk microSD 16GB
    IcyBox IB-AC703-U3 Sata III to USB 3.0
    Samsung 860 EVO 1TB

    Had 2 failures which may come from trying an update of raspbian before applying steps 8 and 9 of the guide due my impatience. Third attempt now showing proper function including running your benchmark. This adaptor didnt work on a Pi 3 / USB 2.0 but here its doing its job as far as i can tell now.

    Greetings

  4. Avatar for Mike Pastore

    Got Ubuntu 18.04.3 LTS with a root filesystem on a WD My Passport SSD all working using your preinstall image, firmware, and kernel. The firmware is loaded on a small microSD card, with the partition mounted at /boot/firmware after boot. The major downside is that UAS is disabled in the device firmware so performance is meh. I’ve uploaded a benchmark. Thank you very much!

  5. Avatar for Amit Bahree

    I could not get this to work and would appreciate any guidance. I got a new raspberry Pi 4, and got the suggested ELUTENG 2.5″ SATA to USB 3.0 cable and a Kingston SSD drive – now when I follow this, and on Step 7 when I reboot- I can see the pi boot up (have it attached to a monitor), but I see some error which goes by too fast. And the attached keyboard and mouse doesn’t work – I tried a wireless (via a USB dongle) and a wired one too.

    So now the pi is booting from the SSD, but it isn’t configured – it is not on the network or has a IP and with either the keyboard or mouse not working, I can’t configure it. Any ideas on how to try and debug this and try and get it working? When I switch back the cmdline.txt from the backup then it works as expected.

    Thanks,
    Amit.

    1. Avatar for jamesachambers

      Hey Amit,

      It sounds like you’ve narrowed the problem down to cmdline.txt. Can you tell us what your new and old cmdline.txt is?

      1. Avatar for Amit Bahree

        Thanks Ja,es.

        The old cmdline.txt is:
        dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=3b3e03b5-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

        And the new one (not working) is:
        dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=3b18e43a-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

        The only difference is the PARTUUID as outlined in the steps. So the thing boots up, but then the usb keyb and mouse doesn’t work – it is just waiting there for me to hit next and continue to finish configuring.

        Any ideas?

        Thanks,
        Amit.

        1. Avatar for jamesachambers

          Those look like old boot flags from Pi 3ish. Let’s try with the ones I’m using in my Ubuntu preinstalled 18.04.3 image and that most other working distros seem to be using.

          First try this one:
          dwc_otg.fiq_fix_enable=2 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=PARTUUID=3b18e43a-02 rootfstype=ext4 rootwait rootflags=noload net.ifnames=0

          Next you can try this if the PARTUUID selector isn’t working:
          dwc_otg.fiq_fix_enable=2 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda2 rootfstype=ext4 rootwait rootflags=noload net.ifnames=0

          1. Avatar for Javanaut

            Did this help?

            I had 2 fails before and I am not sure what it was but it also disabled my keyboard. I followed then this guide more exactly plus I disabled wifi, bt and the hciuart service as one of the errors shown at boot pointed to this service. which prevented errors until now. Must say that I dont have tested much more until now, but this is on the todo list…

            Greetings

          2. Avatar for Amit Bahree

            Thanks for the suggestions, but unfortunately, neither of them work and I get the same behavior. Boots up, can see it is booting from the drive but then get to the Welcome to Raspberry Pi screen and cannot configure or use keyb + mouse. And this is using the latest raspbian image, and not trying Ubuntu. Could there be anything in there?

            Thanks.

            1. Avatar for Amit Bahree

              Also, if it would help, here is the output of blkid (when it boots up from the SD card). I don’t know why for the SSD (rootfs partition), it says PPTYPE as dos.

              pi@raspberrypi:~ $ sudo blkid
              /dev/mmcblk0p1: LABEL_FATBOOT=”boot” LABEL=”boot” UUID=”0C61-73F5″ TYPE=”vfat” PARTUUID=”3b3e03b5-01″
              /dev/mmcblk0p2: LABEL=”rootfs” UUID=”43f2d0bb-83be-464f-94d0-9a751f376c64″ TYPE=”ext4″ PARTUUID=”3b3e03b5-02″
              /dev/sda1: LABEL_FATBOOT=”boot” LABEL=”boot” UUID=”0C61-73F5″ TYPE=”vfat” PARTUUID=”3b18e43a-01″
              /dev/sda2: LABEL=”rootfs” UUID=”43f2d0bb-83be-464f-94d0-9a751f376c64″ TYPE=”ext4″ PARTUUID=”3b18e43a-02″
              /dev/mmcblk0: PTUUID=”3b3e03b5″ PTTYPE=”dos”

              Thanks.

              1. Avatar for jamesachambers

                Hey Amit,

                This does help. The concerning thing to me is that the partition layout doesn’t match. /dev/mmcblk0 is the SD card and /dev/sda is the SSD. The SD card seems to be carrying an additional DOS PARTUUID that I honestly don’t think I’ve ever seen before. If you download the Raspbian image and write it to both devices one after another the partition layout should match 100% (other than the PARTUUIDs, which is generated specifically to be unique for this reason)!

                Raspbian is by far the easiest of all of them to get working on an SSD. Let’s try again with a simplified version of steps:

                1. Download latest Raspbian (7-10-19 at this time)
                2. Use Win32DiskImager/Etcher to write the image to both a SD card and the SSD at the time same
                3. Put the Raspbian SD card in the Pi and boot normally. Do sudo apt-get update && sudo apt-get dist-upgrade then a sudo rpi-update to update everything to the latest firmware (including your boot SD card, important!)
                4. Now plug the freshly imaged SSD — run lsblk and change /boot/cmdline.txt to the SSD partition 2, reboot

                Don’t do any other steps for now like /etc/fstab, let’s worry about that later. Those 4 steps should be all it takes for you to get a complete boot into the Pi on the SSD.

                That’s basically it. Honestly there isn’t a lot of room for things to go wrong. You are really only updating the firmware then changing the rootfs text entry in cmdline.txt. We don’t have to rebuild the kernel, change any kernel modules, anything like that. Things like driver issues, etc. should not be occurring. I think it has to be something weird at this point like an incomplete image, etc.

                The reason we update the firmware first is that the /boot on the SD card will not have any of the latest patches and the Raspberry Pi 4 has a change where it actually has onboard firmware instead of loading it from the SD card like all older Pis.

                I’ll be very interested to see what you find out. It has to be something silly in the early steps where something went wrong I think! It could also be something with the adapter, the SSD, etc. but since those are both known working devices this is definitely a strange case! You can also try plugging in your SSD into one of the black ports instead of the blue ones just to test.

                1. Avatar for Amit Bahree

                  James,
                  Firstly I appreciate your help and patience with me – as a fellow geek (albeit not very knowledgeable in the boot loader on Linux), I am thankful.

                  So I did a complete fresh install – checked the image was the latest and imaged both the SD card and the SSD drives. The only difference wsa that I also ran sudo rpi-update, to update the firmware. The steps in your blog post don’t outline that specific step -I don’t know if that was by design or a ‘bug’.

                  Irrespective the outcome hasn’t changed. When I changed the PARTUUID, it boots up and I can see the desktop, but then keyb and mouse not working.

                  And for reference below is the output from blkid and all I did was change the “25789520-02” to “3b18e43a-02″.

                  I am happy to try and debug this if it helps you and others. And finally, as a reference, when I had tried this method in the past, that had worked – but I hadn’t checked enough to make sure. I can try that again and see if that is accurate using: findmnt -n -o SOURCE /

                  pi@raspberrypi:~ $ sudo blkid
                  /dev/mmcblk0p1: LABEL_FATBOOT=”boot” LABEL=”boot” UUID=”0C61-73F5″ TYPE=”vfat” PARTUUID=”25789520-01″
                  /dev/mmcblk0p2: LABEL=”rootfs” UUID=”43f2d0bb-83be-464f-94d0-9a751f376c64″ TYPE=”ext4″ PARTUUID=”25789520-02″
                  /dev/mmcblk0: PTUUID=”25789520″ PTTYPE=”dos”
                  /dev/sda1: LABEL_FATBOOT=”boot” LABEL=”boot” UUID=”0C61-73F5″ TYPE=”vfat” PARTUUID=”3b18e43a-01″
                  /dev/sda2: LABEL=”rootfs” UUID=”43f2d0bb-83be-464f-94d0-9a751f376c64″ TYPE=”ext4″ PARTUUID=”3b18e43a-02″

                  Thanks,
                  Amit.

                  1. Avatar for Sven

                    I am having the same issue. It worked fine with the same SD card and SSD in August. I tried it today with the same “2019-07-10-raspbian-buster.img”. It boots with SSD but the mouse and keyboard are not working.

                    1. Avatar for Louis De Lange

                      I had exactly the same problem on X855 mSATA adapter, booting fine but then USB mouse and keyboard would not work.

                      Solution was to not do the system update until the very end. Now working perfectly.

                    2. Avatar for Amit Bahree

                      Louis, quick question – did you also upgrade the firmware when you ran this in the end – i.e did you run rpi-update or only apt-get update and apt-get dist-upgrade?

                      Thanks.

                  2. Avatar for Petie Rademeyer

                    Same issue with me. SD card boot and SSD/USB rootfs.
                    Initial Buster image worked, but as soon as I update, no usb keyboard or mouse functions. Did anyone found a solution yet.

                    1. Avatar for Louis De Lange

                      I dont know if it is “the” solution, but when I delayed “sudo apt-get update && sudo apt-get dist-upgrade” from step 3, to after step 9 my mouse and keyboard is working fine. I tried this with both Raspbian Buster Lite and Raspbian Buster with desktop and recommended software

                    2. Avatar for jamesachambers

                      Hey Louis,

                      A few other people encountered this as well. I have updated the instructions to put the update step at the very end (now step 10).

  6. Avatar for Denny Fox

    I ran across this posting with a work-around for misbehaving USB3 adapters on the Raspberry Pi 4B:

    https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=245931#p1501426
    STICKY: If you have a Raspberry Pi 4 and are getting bad speeds transferring data to/from USB3.0 SSDs, read this

    I have four different adapters: Sabrent enclosure, Sabrent cable, ELUTENG enclosure, and Startech cable. The only adapter that would boot and run without the quirk fix in /boot/cmdlime.txt was the Startech cable. This confirms the information in the article above.

    When I applied the usb-storage.quirks= fix to /boot/cmdline.txt, all adapters functioned well. Interestingly the StarTech cable turned in better performance with the quirk fix in place than without it. I am using fio with the commands from the link above for testing.

    w/o with
    Startech Cable sequential-read 69.8 159
    174c:55aa sequential-write 79.9 211
    random4k-read 13.9 13.8
    mixedrandom4k-read-write 3.9 3.4
    random4k-read-4processes 40.3 11.1

    The quirk fix disables UAS support and reverts to mass storage for USB3.

    Here is my /boot/cmdline.txt for reference:
    # SD Card
    dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=0cd3cae7-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
    # SSH on sda1 – no quirk
    #dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
    # Startech Cable
    #usb-storage.quirks=174c:55aa:u dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
    # Sabrent Enclosure
    #usb-storage.quirks=152d:1561:u dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
    # ELUTENG Enclosure
    #usb-storage.quirks=152d:0578:u dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
    # Sabrent Cable
    #usb-storage.quirks=152d:1561:u dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

    Only one line may be uncommented for each case.

    Hopefully we will get improvements in the Raspberry Pi 4 firmware including booting directly from USB as time goes on. Until then it looks like the quirk fix is useful.

  7. Avatar for Francois Gervais

    As a reference, I get a 5x sequencial write speed upgrade:

    sudo dd if=/dev/urandom of=/dev/testfile bs=1M count=1000
    dd: error writing ‘/dev/testfile’: No space left on device
    841+0 records in
    840+0 records out
    881577984 bytes (882 MB, 841 MiB) copied, 32.809 s, 26.9 MB/s

    Using RIITOP NVMe USB Adapter + SN750 250GB:

    sudo dd if=/dev/testfile of=testfile bs=1M conv=fsync
    840+1 records in
    840+1 records out
    881577984 bytes (882 MB, 841 MiB) copied, 4.6014 s, 192 MB/s

    Using Samsung PRO Endurance 32GB:

    sudo dd if=/dev/testfile of=testfile bs=1M conv=fsync
    840+1 records in
    840+1 records out
    881577984 bytes (882 MB, 841 MiB) copied, 23.7579 s, 37.1 MB/s

  8. Avatar for olivier

    Hello,

    nice work, i succeed to run my Pi4 with my Crucial Bx500 and the ELUTENG adaptator cable, but its very slow to start until the desktop is ok.
    When i said very slow, its between 5 and 10 minutes…lol

    Is there something i can check?

    When i am on the desktop, its fine, i have install hassio in docker, it works, just a problem to load my last snapshot from a hassos config on rpi3 whithout docker.

    Thanks!

    Olivier

    1. Avatar for Christian

      I tried ist also with a Crucial Bx500 SSD, everything fine as long as ist plugged to USB 2 on USB 3 it sometimes dont even start. Doing the same with an older Seagate Maxtor normal HDD much faster and no Problems on USB 3. So It is more likely a problem with the SSD than with the SATA/USB cable.

  9. Avatar for Tom

    I bought the recommended “StarTech.com 2.5″ SATA to USB Cable” to connect a 128 GB Intel 545s to my Raspberry 4. However, I’m quite disappointed by the low performance:

    root@raspberrypi4:~# sync; echo 3 > /proc/sys/vm/drop_caches; dd if=/dev/zero of=~/test bs=8k count=500k conv=fsync; sync; echo 3 > /proc/sys/vm/drop_caches; dd if=~/test of=/dev/null bs=8k count=500k
    512000+0 records in
    512000+0 records out
    4194304000 bytes (4.2 GB, 3.9 GiB) copied, 42.1646 s, 99.5 MB/s
    512000+0 records in
    512000+0 records out
    4194304000 bytes (4.2 GB, 3.9 GiB) copied, 43.73 s, 95.9 MB/s

    root@raspberrypi4:~# lsusb
    Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 002: ID 1f75:0621 Innostor Technology Corporation
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    Also tried to set usb-storage.quirks in /boot/cmdline.txt, but although it’s active, it does not speed up things;

    [ 1.271661] usb 2-2: new SuperSpeed Gen 1 USB device number 2 using xhci_hcd
    [ 1.303041] usb 2-2: New USB device found, idVendor=1f75, idProduct=0621, bcdDevice= 0.36
    [ 1.303071] usb 2-2: New USB device strings: Mfr=4, Product=5, SerialNumber=6
    [ 1.303094] usb 2-2: SerialNumber: 20190803
    [ 1.306134] usb-storage 2-2:1.0: USB Mass Storage device detected
    [ 1.306474] usb-storage 2-2:1.0: Quirks match for vid 1f75 pid 0621: 800000
    [ 1.306590] scsi host0: usb-storage 2-2:1.0
    [ 2.312553] scsi 0:0:0:0: Direct-Access INTEL SS DSC2KW128G8 PQ: 0 ANSI: 6
    [ 2.313656] sd 0:0:0:0: [sda] 250069680 512-byte logical blocks: (128 GB/119 GiB)
    [ 2.314576] sd 0:0:0:0: [sda] Write Protect is off
    [ 2.314601] sd 0:0:0:0: [sda] Mode Sense: 3b 00 00 00
    [ 2.315574] sd 0:0:0:0: [sda] No Caching mode page found
    [ 2.315599] sd 0:0:0:0: [sda] Assuming drive cache: write through
    [ 2.319398] sda: sda1 sda2
    [ 2.322897] sd 0:0:0:0: [sda] Attached SCSI disk

    So what’s wrong here? Is it a problem with the SSD, or is it some problem related to the adapter?

    1. Avatar for jamesachambers

      Hey Tom,

      Have you ran my storage benchmark on that drive yet? It looks like the DD write speed on this drive is pretty underwhelming although Intel’s description of this drive is an enterprise level storage that focuses on reliability in an a enterprise level data center rather than high performance. This SSD will probably last decades but the performance on it will never be a head turner as that isn’t what it was made for.

      If you go to Raspberry Pi storage benchmarks let the table load and then sort descending by DD write speed. Once we get down to the 100s we can see your drive (based only on DD speed which is a poor measure of performance) falls in the performance range of something like a Samsung 750 Evo. You’ll also notice that the DD write speed is only a small part of the score as devices in this range can test thousands of points apart when we calculate 4k blocksize and random read/random write scores.

      I do have good news for you though. Intel states this drive is supposed to be above average for small blocksize I/O which is *exactly* what a Pi using it as the operating system drive needs. I would take my storage benchmark on that drive and let us know your total score. The benchmark won’t recognize the drive automatically because it is a pretty uncommon one but it will still score it normally and we may be surprised at the results if Intel is telling the truth about their focus on small blocksize random I/O!

      1. Avatar for Tom

        Hi James,

        thanks for your detailed answer. Here are the results of the benchmark:

        Category Test Result
        HDParm Disk Read 76.20 MB/s
        HDParm Cached Disk Read 73.52 MB/s
        DD Disk Write 92.6 MB/s
        FIO 4k random read 4890 IOPS (19562 KB/s)
        FIO 4k random write 6668 IOPS (26673 KB/s)
        IOZone 4k read 18739 KB/s
        IOZone 4k write 15216 KB/s
        IOZone 4k random read 14683 KB/s
        IOZone 4k random write 17996 KB/s

        Score: 4537

        Probably better than a micro SD card, but not outstanding…

        The main reason why I bought this drive are reliability and durability – however, before buying it, I also looked for a “good” performance, and according to benchmarks I found on the web, it seemed as if this drive would perform quite good.

        As the system did not yet go into productional use – is there any rather cheap, more powerful SSD you would prefer over the Intel 545s, keeping in mind reliability and durability are rather important for my use case?

    2. Avatar for Francois Gervais
      Francois Gervais

      The kernel might not be fast enough to feed the drive. I would make a file in ram first.

      dd if=/dev/urandom of=/dev/testfile bs=1M count=500

      Then use testfile to feed the dd to ~/test.

      1. Avatar for Tom

        Hi Francois,

        thanks for your reply, but that’s not the problem, /dev/zero is fast enough – when using the approach you suggested, the dd write speed slightly increased from 99.5 to 100 MB/s (copying from /dev/zero to /dev/test ran at 472 MB/s).

  10. Avatar for Johnny Graham

    Do you recommend running this set up with the new x855 mSATA card from GeekWorm/SupTronics? They claim to be waiting for the Pi4 group to fix the USB boot issue, but the went ahead and released the card.

    1. Avatar for David Fruehwald

      I did it with their X870 and an Inland Professional 256GB SSD Microcenter had on sale for $30. You will need to add the usb-storage.quirks=aaaa:bbbb:u to /boot/cmdline.txt and I’d recommend skipping the updates until after you have rootfs on the USB3 disk. I also removed rootfs from the SD and boot from the SSD so that I was sure they were not being used.

      1. Avatar for David Fruehwald

        oops, forgot to say aaaa = usb vendor id and bbbb = usb product id for my X870 it was
        usb-storage.quirks=152d:0562:u

    2. Avatar for Louis De Lange

      X855 works, although I had the delay the system update step in step 3, until after completion of step 9. Performance benchmark score with Dogfish SSD is 5200, which means that it is at the low end of all the SSDs out there – but at least it is still 5 times faster than a class 10 microUSB.

      I also tried the usb-storage.quirks as described here https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=245931#p1501426 but it made performance slightly worse.

  11. Avatar for Richard Jones

    So glad I found this site. I’m new to Linux and looking to put together a Pi based NAS using PoE with an eye on OpenMediaVault (OMV) with a couple of SSD. Has anyone here gone that far? I’ll post a comment when I make any progress

Leave a Comment

Your email address will not be published. Required fields are marked *

Type here..