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 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, UGREEN USB Enclosure, several others)

Known Working Adapters

Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesStarTech 2.5″ SATA to USB 3.0 Adapter2.5″ SATA to USB 3.0Verified working great by myself and others on Pi 4
Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesOrico Transparent 2.5″ SATA to USB 3.0 Enclosure2.5″ SATA to USB 3.1Confirmed working by Ashjas in comments
Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesELUTENG 2.5″ SATA to USB 3.0 Adapter2.5″ SATA to USB 3.0The ELUTENG is one of the known working 2.5″ SATA to USB 3.0 adapters for the Pi 4
Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesCSL 2.5″ SATA to USB 3.0 Adapter2.5″ SATA to USB 3.0The CSL SL adapter is confirmed to be working by Krikitt in the comments. Available in Europe. Not available in US.
Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesShinestar NVME to USB 3.0 AdapterM.2 NVME to USB 3.0This is the adapter I’m using in the picture at the top of the article. It is for NVME M.2 drives only (need different one for M.2 SATA).
Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesQNINE M.2 SATA to USB 3.0 EnclosureM.2 SATA to USB 3.0I used this enclosure to benchmark M.2 SATA Lite-On and SanDisk drives — working great in 3.0 ports.
Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesUGreen M.2 SATA to USB 3.1 EnclosureUGreen M.2 SATA to USB 3.1 EnclosureReported as working well in the comments by John H. Reinhardt with a ASM1051E chipset
Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesTanbin mSATA to USB AdaptermSATA to USB 3.0I used this mSATA to USB adapter for my Crucial M550 benchmark — working in 3.0 ports.
Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesGeneric mSATA to USB 3.0 Adapter (fe2008)mSATA to USB 3.1Confirmed working in comments by Nico
Raspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesRaspberry Pi 4 USB Boot Config Guide for SSD / Flash DrivesCanakit Raspberry Pi 4 Power Supply (USB-C)USB-C Power SupplyCanakit has been making very reliable power supplies for several Pi generations now

Known Problematic Adapters (VERY COMMON)

Fix (some) USB Adapter Problems Using Quirks

Some of the very common adapters on the naughty list above (such as the Sabrent) can be made to work by using USB quirks to disable UAS mode on the drive. This lowers performance, but it’s still much faster than a SD card and your adapter won’t go to waste.

To find out the quirks we need to find the device ID string for your adapter and then add an entry to cmdline.txt telling the kernel to apply them on boot.

Find Your Adapter

To apply the quirks we first need to get the adapter id. We will use the sudo lsusb command:

$ sudo 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

On line 2 we can see my ASM1051E SATA 6Gb/s bridge adapter (it’s the known working StarTech.com 2.5″ SATA to USB adapter). You will see something very similar to mine when you run the command and it shouldn’t be too hard to figure out which device it is. If you need more information add a -v switch to make the command sudo lsusb -v. This can sometimes add some additional details to make it easier to figure out which one is your adapter.

If you’re still not sure, we have another command that between the two that can narrow things down. Type / paste the following:

sudo dmesg | grep usb

 [    0.828535] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19
 [    0.828568] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
 [    0.828597] usb usb3: Product: DWC OTG Controller
 [    0.828620] usb usb3: Manufacturer: Linux 4.19.75-v7l+ dwc_otg_hcd
 [    0.828644] usb usb3: SerialNumber: fe980000.usb
 [    0.830051] usbcore: registered new interface driver uas
 [    0.830182] usbcore: registered new interface driver usb-storage
 [    0.836488] usbcore: registered new interface driver usbhid
 [    0.836511] usbhid: USB HID core driver
 [    0.971598] usb 1-1: new high-speed USB device number 2 using xhci_hcd
 [    1.154217] usb 1-1: New USB device found, idVendor=2109, idProduct=3431, bcdDevice= 4.20
 [    1.154254] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
 [    1.154281] usb 1-1: Product: USB2.0 Hub
 [    1.301989] usb 2-1: new SuperSpeed Gen 1 USB device number 2 using xhci_hcd
 [    1.332965] usb 2-1: New USB device found, idVendor=174c, idProduct=55aa, bcdDevice= 1.00
 [    1.332999] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=1
 [    1.333026] usb 2-1: Product: ASM105x
 [    1.333048] usb 2-1: Manufacturer: ASMT
 [    1.333071] usb 2-1: SerialNumber: 123456789B79F

This is the dmesg log showing the hardware detection as hardware is activated on the Pi. If your log is really long you can generate fresh entries by just unplugging a device and plugging it back in and running the command again. Here we can clearly see that the ASM105x is what our StarTech adapter is being detected as.

Now we can go back to our first lsusb command and we want the 8 characters from the ID field that comes right after the Device:

Bus 002 Device 002: ID 174c:55aa ASMedia Technology Inc. Name: ASM1051E SATA 6Gb/s bridge

Our adapter’s ID is: 174c:55aa

Applying Quirks

To apply the quirks to our USB adapter we are going to edit /boot/cmdline.txt. Type:

sudo nano /boot/cmdline.txt

We are going to add the following entry into the very front of cmdline.txt:

usb-storage.quirks=XXXX:XXXX:u

In place of the X’s above you will put in your adapter’s ID that we got before. With the example commands I gave above mine would look like this: usb-storage.quirks=174c:55aa:u. After this my cmdline.txt looks like this (everything should be one continuous line, no line breaks!):

usb-storage.quirks=174c:55aa:u console=serial0,115200 console=tty1 root=PARTUUID=d34db33f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Now reboot the Pi. If the Pi fails to boot you can plug the SD card into the computer and go to /boot/cmdline.txt and undo the change we did so you can boot back in with your SD card.

Verifying Quirks

Once you have rebooted after changing cmdline.txt we can verify the quirks have been applied by doing another dmesg | grep usb command:

sudo dmesg | grep usb
 [    1.332924] usb 2-1: New USB device found, idVendor=174c, idProduct=55aa, bcdDevice= 1.00
 [    1.332957] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=1
 [    1.332983] usb 2-1: Product: ASM105x
 [    1.333006] usb 2-1: Manufacturer: ASMT
 [    1.333028] usb 2-1: SerialNumber: 123456789B79F
 [    1.335967] usb 2-1: UAS is blacklisted for this device, using usb-storage instead
 [    1.336071] usb 2-1: UAS is blacklisted for this device, using usb-storage instead
 [    1.336103] usb-storage 2-1:1.0: USB Mass Storage device detected
 [    1.336479] usb-storage 2-1:1.0: Quirks match for vid 174c pid 55aa: c00000
 [    1.336611] scsi host0: usb-storage 2-1:1.0

This time we can see in dmesg that UAS was blacklisted for the device and it has loaded with the usb-storage driver instead. This driver tends to be more compatible with the “problematic adapters” but the performance is usually significantly lower. It’s definitely worth a try though as some adapters do better with the quirks performance-wise. The only way to know for sure is to run a benchmark (see storage benchmark section near the end).

USB Boot Instructions

There are a lot of steps to follow to set everything up properly. If you make a mistake the first time don’t spend too much time trying to correct it or figure out what you did wrong. It’s usually faster to burn the images again and reconfigure again rather than try to figure out which step you might have made a typo on. It’s much easier the second time!

Prepare SD Card

Download the latest Raspbian release from https://www.raspberrypi.org/downloads/raspbian/. Both Lite or Desktop versions will work. Win32DiskImager (Windows) or balenaEtcher (Linux, Mac OS X, Windows) are highly recommended to burn the images.

Note: Don’t attempt to use raw dd commands to write the images. Too many silly things can go wrong that are checked for/fixed by the recommended programs. Do yourself a big favor and use one of the recommends to avoid spending a ton of time troubleshooting basic imaging problems!

Preparing SSD

We are going to burn a second identical copy of Raspbian to the SSD. This ensures everything the Pi needs to boot is there so we can use the SD card as a bootloader but our actual system will be on our nice fast SSD drive.

Note: Make sure you create the empty file named “ssh” on the boot partition of both drives if you are headless or don’t have a mouse/keyboard attached so you can ssh in on the first boot.

First Boot (SD card only, SSD unplugged)

Insert your freshly imaged SD card into the Pi and connect the power. Sign into the Pi for the first time.

Don’t do an apt-get upgrade/dist-upgrade or any additional configuration yet. Just stick with the instructions until we have finished configuration (especially since if something goes wrong you may have to start over and any other setup you did will be lost).

Once the Pi has finished booting and you have signed in for the first time plug in your SSD to your Pi’s USB 3.0 ports. The USB 3.0 ports are the ones that have the blue plastic inside instead of the black plastic (the black ones are USB 2.0 ports).

Change PARTUUID

We need to change the PARTUUID of our SSD’s partitions so the Pi doesn’t get confused about what device to boot from. Right now the partitions on both the SD card and the SSD are an exact match and we need them to be different so we can tell the Pi to boot specifically from our SSD’s partition.

We are going to use fdisk to change the SSD’s PARTUUID to the hexadecimal d34db33f to make our SSD easy to identify. Use the following:

$ 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: ASM105x
 Units: sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disklabel type: dos
 Disk identifier: 0x6c586e13
 Device     Boot  Start       End   Sectors   Size Id Type
 /dev/sda1         8192    532479    524288   256M  c W95 FAT32 (LBA)
 /dev/sda2       532480 500118191 499585712 238.2G 83 Linux
 Command (m for help): x
 Expert command (m for help): i
 Enter the new disk identifier: 0xd34db33f
 Disk identifier changed from 0x6c586e13 to 0xd34db33f.
 Expert command (m for help): r
 Command (m for help): w
 The partition table has been altered.
 Syncing disks.

That’s it. Let’s verify our change using blkid:

$ sudo blkid

/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="5203-DB74" TYPE="vfat" PARTUUID="6c586e13-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="2ab3f8e1-7dc6-43f5-b0db-dd5759d51d4e" TYPE="ext4" PARTUUID="6c586e13-02"
/dev/sda1: LABEL_FATBOOT="boot" LABEL="boot" UUID="5203-DB74" TYPE="vfat" PARTUUID="d34db33f-01"
/dev/sda2: LABEL="rootfs" UUID="2ab3f8e1-7dc6-43f5-b0db-dd5759d51d4e" TYPE="ext4" PARTUUID="d34db33f-02"

Your /dev/mmcblk0 and /dev/sda devices should now be different from each other. The SD card’s ID is 6c586e13 and the SSD’s PARTUUID is now

Update /boot/cmdline.txt

We are going to change cmdline.txt to point to the SSD for booting instead of the SD card. First make a backup of your existing cmdline.txt file with the following command:

sudo cp /boot/cmdline.txt /boot/cmdline.txt.bak

We’ve now created a backup you can restore if something goes wrong. If you need to restore your backup plug the SD card into a computer/device and replace cmdline.txt with cmdline.txt.bak that we made above. Now your Pi should boot normally again.

Open up /boot/cmdline.txt using nano or your favorite text editor:

sudo nano /boot/cmdline.txt

The existing file will look like this:

console=serial0,115200 console=tty1 root=PARTUUID=6c586e13-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

We are going to change the root=PARTUUID section to point to our new d34db33f PARTUUID like the following:

console=serial0,115200 console=tty1 root=PARTUUID=d34db33f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

Make the change and double check the line is what it should be,then press Ctrl+X to save our changes.

Note: cmdline.txt should be one long solid line with no breaks — don’t add any line breaks or the system won’t boot and you’ll need to restore the backup we made earlier!

Test SSD

We are now ready to test booting from the SSD. Restart your Pi by issuing a

sudo reboot

The first boot with your SSD can be slow due to running fsck on the drive. If you have a really large SSD it can take surprisingly long to check all that space. Once the check completes it will mark the drive clean and skip the disk check from now on. It can take over a minute or two sometimes for really big drives so give it at least that much time before assuming it didn’t work.

After signing in we can verify that the SSD is being used like this:

$ findmnt -n -o SOURCE /

 /dev/sda2

Verify that partition has switched over as shown below to /dev/sda2 (SSD) instead of /dev/mmcblk0p2 (SD card).

Update /etc/fstab

We are now ready to edit the /etc/fstab file to point to our updated drive. To edit the file type:

sudo nano /etc/fstab

Your current file will look like this:

$ cat /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=6c586e13-01  /boot           vfat    defaults          0       2
PARTUUID=6c586e13-02  /               ext4    defaults,noatime  0       1
sudo nano /etc/fstab

Your current file will look similar to this (PARTUUID varies based on your Raspbian image version):

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

We want to change the root ( / ) partition (PARTUUID ending with -02) to load our SSD’s PARTUUID instead of the SD card. Replace the 2nd partition’s PARTUUID field on the last line in the file with the d34db33f label we applied earlier with fdisk. After making the change my /etc/fstab file looks like this:

proc            /proc           proc    defaults          0       0
PARTUUID=6c586e13-01  /boot           vfat    defaults          0       2
PARTUUID=d34db33f-02  /               ext4    defaults,noatime  0       1

Press Ctrl+X to tell nano to save our changes. Now type sudo reboot to restart the Pi.

Note: We want to leave the first partition (https://origin.jamesachambers.com/boot) on the SD card. If you change this to the SSD then apt will update your SSD instead of the SD card so they won’t be used during boot! Remember that we are using the SD card as a bootloader and that is why the firmware updates (such as start.elf, etc) should go there instead of the SSD’s boot partition (which is never used).

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: ASM105x
 Units: sectors of 1 * 512 = 512 bytes
 Sector size (logical/physical): 512 bytes / 512 bytes
 I/O size (minimum/optimal): 512 bytes / 512 bytes
 Disklabel type: dos
 Disk identifier: 0xd34db33f
 Device     Boot  Start     End Sectors  Size Id Type
 /dev/sda1         8192  532479  524288  256M  c W95 FAT32 (LBA)
 /dev/sda2       532480 4390911 3858432  1.9G 83 Linux

There is the line we need. Our start value for /dev/sda2 (rootfs) is 532480. 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 (2048-500118191, default 2048): 532480
 Last sector, +/-sectors or +/-size{K,M,G,T,P} (532480-500118191, default 500118191): 500118191 
 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
 Command (m for help): w
 The partition table has been altered.
 Syncing disks.

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.3G  415M  76% /
 devtmpfs        1.8G     0  1.8G   0% /dev
 tmpfs           2.0G     0  2.0G   0% /dev/shm
 tmpfs           2.0G  8.5M  1.9G   1% /run
 tmpfs           5.0M  4.0K  5.0M   1% /run/lock
 tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
 /dev/mmcblk0p1  253M   52M  201M  21% /boot
 tmpfs           391M     0  391M   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 62448214 (4k) blocks long.

Now let’s check df -h again:

pi@raspberrypi:~ $ df -h
 Filesystem      Size  Used Avail Use% Mounted on
 /dev/root       235G  1.3G  224G   1% /
 devtmpfs        1.8G     0  1.8G   0% /dev
 tmpfs           2.0G     0  2.0G   0% /dev/shm
 tmpfs           2.0G  8.5M  1.9G   1% /run
 tmpfs           5.0M  4.0K  5.0M   1% /run/lock
 tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
 /dev/mmcblk0p1  253M   52M  201M  21% /boot
 tmpfs           391M     0  391M   0% /run/user/1000

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

Update Pi using apt

Now that we’ve updated fstab it is safe (and highly recommended) to update your Pi’s software. 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.

Verify SSD Performance

You can make sure everything is running correctly (and as fast as it should be) by running my quick storage benchmark. You can run the benchmark with the following one-liner:

sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash

This will give you a score you can compare to the other Raspberry Pi Storage Benchmark results and make sure that you are getting an equivalent speed to your peers with the same device!

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.

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

  1. Avatar for Jan

    Little correction, cmdline.txt begins with console. And I’ve copied the SD card onto the SSD with Raspbian’s own SD Card Copier program. All partitions are nicely aligned onto the SSD, a Kingston SSDnow 300 240GB.

  2. Avatar for Jan

    When I open cmdline.txt I read:

    wheb console=serial0,115200 console=tty1 root=/devmmcblk0p7 rootfstype=ext4 elevator deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

    I’m a total noob concerning Linuxes, but I presume you can alter root=/devmmcblk0p7 into something like root=/sda6, where sudo blkid says Label_FATBOOT= “boot” LABEL=”boot”? Or is it better to use PARTUUID?

    I have a Logilink USB 3 USB to SATA adapter with the ASMedia ASM1051E/ ASM1153E SATA 6Gb/s bridge. Works (Chip identical to the StarTech adapter

    1. Avatar for jamesachambers

      Hey Jan,

      That’s a great question. Basically the answer is it depends (unfortunately) on which distro you are using (and even which version). Raspbian (newer versions) have to use PARTUUIDs but there are some distros like Ubuntu 18.04 that you can do exactly what you are saying (change /dev/mmcblk0p2 to /dev/sda2). People have commented that in Ubuntu 19.10 you can also no longer do it the simple old way and that they have moved to PARTUUIDs as well.

      That’s great that the Logilink adapter is working! It does seem to largely depend on the chipset they use inside the adapter (ASM1153E is a known good one).

      Given the cmdline.txt that you posted it looks like your distro is using the older style one and you should be able to just change it in there using device names like /dev/sda2. Make sure you do your first tests on a freshly imaged test setup instead of a live system with anything already set up on it just in case you run into issues!

      1. Avatar for Jan

        This was a fresh install of Noobs, version 3.2.1 from the Raspberry Pi Site. It looks like Raspbian Buster is installed. Is there a possibility to verify which version of Raspbian is installed on the SD-Card? I’ll try to alter the Cmdline.txt eand let you know if the SSD is booting Raspbian.

  3. Avatar for Gary

    what got me at first is in the cmdline.txt I put the prefix “0x” in the line, you must omit that. Just put in d34db33f, not 0xd34db33f.

  4. Avatar for Jim O

    These guides are great and me and my son have been having a blast setting up Minecraft on our Raspberry pi 4.

    But we are stuck now because we can’t burn the raspberry pi image to our Kingston A400 240GB SATA 3 2.5” Solid State Drive. We can burn images to a SD card all day long, but this drive doesn’t work the same way. When we plug it in, it just shows up as a USB device. I can use the windows disk utility to turn it into a windows drive and format it. If I then use Win32 disk imager, it does not work like the SD card and make two partitions, one that is readable in windows with a bunch of files. It just makes one disk that can’t be read by windows. And I can’t add the ssh file as specified by the steps.

    What should I do to make the Kingston drive act like an SD card?

    1. Avatar for Jim O

      Just in case anyone is stuck at the same thing, I’ll share what I learned.
      I think that the SSD drive has to be formatted with FAT32, but windows doesn’t want to do that for some reason. We used a 3rd party tool to format the SSD as FAT32, and then burn the image. Afterwards, windows still couldn’t read any files, but they seemed to be there when read in raspbian. I had to manually add the ssh file using raspbian, but after that I was able to continue the steps and ended up with a minecraft server that seems to work fine.

  5. Avatar for PI-FACE

    Hi James,

    Enclose appears to be working and is reading my Evo 970 on the Pi 4.
    But…….. even after following your instructions to the letter I’m having these issues.

    $ sudo fdisk /dev/sda
    Disk /dev/sda: 238.5 GiB shows normally,

    but /dev/sda2 is only showing 33.3G and not the full 238.5GiB
    Device Boot Start End Sectors Size Id Type
    /dev/sda1 8192 532479 524288 256M c W95 FAT32 (LBA)
    /dev/sda2 532480 500118191 499585712 33.3 G 83 Linux

    And it won’t swap to the 970 EVO, the SD card remains as the boot device.
    $ findmnt -n -o SOURCE /
    /dev/mmcblk0p2

    I’ve tried and tried but to no avail 🙁

  6. Avatar for Orefie

    thank you for this great tuto.
    Raspberry Pi 4 Model B + 2GB
    x850 v3 64Go Msata
    UBUNTU 19.10.1 serveur 64bit + mate desktop

    Orefie

    1. Avatar for orefie

      I am very happy with my cheap combo x850 v3 adapter and 64 GB KingSpec SSD
      € 15 + € 15
      the score is very honorable.
      7394 with ubuntu server + mate with rpi-eeprom beta and 5600 with the official rpi-eeprom.
      I just installed a raspbian buster lite with the mate desktop.
      I will give you the results.
      once optimized pi4, it will be an arrow.
      But you need a real 3A power supply if not freeze.
      Orefie

    2. Avatar for Martin

      Hi Orefie, I would also rather install Ubuntu 19.10.1 server edition.
      How did you manage to point to the SSD partition? There is no cmdline.txt on the boot partition with that distribution. Thanks in advance, Martin

      1. Avatar for Orefie

        hi Martin,
        with ubuntu, it’s a little different.
        you have to modify the file “nobtcmd.txt” on the boot partition.

        Orefie

        1. Avatar for Orefie

          to install. do not fully use the james method.
          install ubuntu server with Win32DiskImager.
          puts the sd in the pi, plug keyboard and screen and starts.
          once installed, updates.
          Plug ssd.
          for check
          sudo fdisk -l
          sudo fdisk /dev/sda
          Press D / N / P / 1 / “default start sector” ENTER / “default end sector” ENTER / “y” ENTER / W ENTER
          sudo mkfs.ext4 /dev/sda1
          sudo apt install rsync -y
          sudo mount /dev/sda1 /mnt
          sudo rsync -axv / /mnt
          sudo blkid
          Note the PARTUUID of your /dev/sda1
          sudo nano /boot/nobtcmd.txt
          change PARTUUID from sd to PARTUUID ext4 from ssd, for my PARTUUID don’t work. why?. I use UUID.
          sudo nano /mnt/etc/fstab
          change PARTUUID from sd to PARTUUID ext4 from ssd
          sudo reboot
          for check new partitions
          sudo df
          enjoy, sorry for my english, i’m french 😉
          with this methode there is no boot partition on the ssd
          after install desktop of your choice. (Mate, etc…)
          it’s a quick tutorial, but with the excellent James tutorial. it should work.

          Orefie

          1. Avatar for tomonoak

            Hi Orefie – I don’t understand the line sudo fdisk /dev/sda. The keypresses on the following line (D/N/P/ …) are not options in fdisk, and in any event, lower-case d just deletes a to-be-named partition.

            1. Avatar for Orefie

              It’s a mistake, No D but d, etc.
              Delete partition, create new primary partition. Etc
              It also works with gparted on another linux, only one primary partition, format ext4.
              Then resume on line sudo apt install rsync -y

              😉

              1. Avatar for Kevin

                Orefie, thank you for your posts, I have been following the thread very carefully but are still unable to bet my Pi 4 working with my external SSD. I am not a Linux noob, I have used various flavors of Linux for many years, however when it comes to installing drives and partitioning, I am a complete novice! If you have a minute could you please help me as I am pretty much at a brick wall at the moment.
                Firstly, I am using Ubuntu 19.10.01 (the actual image file I am using is ‘ubuntu-19.10.1-preinstalled-server-arm64+raspi3.img’)
                Using BalenaEtcher I flashed my 16Gb SD card and also my 256Gb Crucial SSD (in Orico adapter/case). Note, I discovered that the Orico uses a Toshiba chipset and needed me to disable UAS mode, so I have to do that as part of the install.

                Here are the steps which I did after my Pi 4 had booted up from the SD card for the first time..

                Plug in SSD
                Install the UAS fix (usb-storage.quirks)
                sudo reboot
                sudo fdisk -l

                At this point fdisk reports the following:
                /dev/mmcblk0p1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
                /dev/mmcblk0p2 526336 31291358 30765023 14.7G 83 Linux
                /dev/sda1 * 2048 526335 524288 256M c W95 FAT32 (LBA)
                /dev/sda2 526336 488397134 487870799 232.7G 83 Linux

                Next ..
                sudo fdisk /dev/sda

                At this point it wasnt clear to me which partitions to delete, 1 or 2 or both? So I decided to delete both..
                d/1/d/2/n/p/1//Y/w

                Next..
                sudo mkfs.ext4 /dev/sda1
                sudo apt install rsync -y
                sudo mount /dev/sda1 /mnt
                sudo rsync -axv / /mnt

                This unfortunately was as far as I got as rsync runs for a while then errors out with the following messages..

                rsync: chown “/mnt/usr/bin/.at.ePXG2A” failed: Operation not permitted (1)
                rsync: chgrp “/mnt/usr/bin/.bsd-write.Gw23EC” failed: Operation not permitted (1)
                rsync: write failed on “mnt/usr/bin/btrfs-image” No space left on device (28)
                rsync error: error in file IO (code 11) at receiver.c(374) [receiver=3.1.3]

                I’m wondering if the rsync is trying to write to the SD card, instead of the SSD? Note, my SD card is quite small (16Gb) so it could quite possibly fill up if rsync was attempting to write there, instead of the SSD.

                Do you or anyone else reading this have any ideas?

                thank you

                1. Avatar for Kevin

                  I may have stumbled on the solution, thanks to an answer posted on askubuntu.com. I had tried the following method previously with no success, but maybe I had forgotten to do the ‘quirks’ fix for my USB adapter at that point. Anyway, I tried it again just now and it seems to have worked. I am running Ubuntu 19.10.01 with ubuntu-mate desktop and the file answer says I have 200 or more gigabytes! Here is a pointer to that article:

                  https://askubuntu.com/questions/1185000/can-i-boot-ubuntu-server-19-10-on-a-raspberry-pi-4-from-a-usb-ssd

                  All seems to be running fine at the moment, hopefully it stays that way

  7. Avatar for halley80

    Hello,

    Your tutorial works perfectly 😉
    Specs :
    Raspberry PI4 – 4Gb
    Lacie porsche desgin 2Tb usb hard disk on USB 3 port

    Thank you very much.
    Yours sincerely

  8. Avatar for Greg

    I got a Samsung T5 today because it was showing as the fastest drive. I am unable to get more than about 178MB/s write and 165MB/s read. Any ideas?

      1. Avatar for jamesachambers

        Hey Greg,

        I think I can at least partially explain. If you click the score on the highest score entries to see the details look at the CPU clocks on those highest scores. They have MONSTER overclocks on their CPU from stock 1500 all the way up to 2000 MHz. The top score also has a 100 MHz core overclock to 600.

        The highest scores I see that are running stock Pis at 1500 MHz are in the low 9000s (still very good). I know from doing the benchmark processing code that inside the T5 portable is a M.2 drive. The quality of this may vary from batch to batch or other factors may be at play. I notice all the highest scores are using uas mode, but it sounds like some of you guys are getting higher scores with usb-storage, so I can’t say I know all the details for sure. This is one of many mysteries I’m hoping the benchmark can shed some light on because right now there is hardly any info about this stuff out there!

  9. Avatar for Olli

    Hi James,

    thanks for the guide but I don’t get it running. I have already set up a Pi 3b with an old Intel SSD and a Minecraft server based on your guides with now problems. Now I went for a PI 4GB with an old Crucial BX200. I have checked the SSD with the Crucial tool and it is totally fine. I have two StarTech 2.5″ SATA to USB 3.0 Adapter and they are both totally fine. I have tested two different Samsung SD cards (8GB and 32GB) and they look also totally fine. I have tested with and without perks with no difference.

    After changing the uuid and rebooting I see always the same errors with entry 1455 and inode 16097

    OK – Started LSB : Resize the root filesystem to boot the partition.
    EXT4-fs error (dev sda2): ext4_journal_check_start_61: Detected aborted journal
    EXT4-fs (sda2): Remounting filesystem read-only
    EXT4-fs error (dev sda2): ext4_find_entry:1455: inode #16097: comm ssh-keygen: reading directory lblock 0

    EXT4-fs error (dev sda2): ext4_find_entry:1455: inode #8049: comm (systemctl) reading directory lblock 0
    [FAILED] Failed to start Regenrate SSH host keys.

    [FAILED] Failed to start Permit User Sessions

    [FAILED] Failed to start Update UTMP about System Runlevel Changes
    EXT4-fs error (dev sda2): ext4_find_entry:1455: inode #16097: comm systemd-timesyn: reading directory lblock0
    EXT4-fs error (dev sda2): ext4_find_entry:1455: inode #16097: comm sd-resolve: reading directory lblock0
    EXT4-fs error (dev sda2): ext4_find_entry:1455: inode #16097: comm systemd-timesyn: reading directory lblock0
    EXT4-fs error (dev sda2): ext4_find_entry:1455: inode #16097: comm sd-resolve: reading directory lblock0
    EXT4-fs error (dev sda2): ext4_find_entry:1455: inode #16097: comm systemd-timesyn: reading directory lblock0
    EXT4-fs error (dev sda2): ext4_find_entry:1455: inode #16097: comm sd-resolve: reading directory lblock0

    Any ideas what could be wrong?

    1. Avatar for jamesachambers

      Hey Olli,

      The next thing I’d check since it’s failing the same way on several different devices/configurations is your base image and how you are writing it. I would redownload your base image just to be sure it’s intact but I would also make sure you are trying to image using a program like Etcher (on Linux or Windows) or Win32DiskImager (Windows only). These programs do a lot of additional checks from anything like a manual dd imaging to make sure that the media is ready to run Linux.

      The next thing to check is your power adapter. Do you have any other power adapters to test with (such as a USB-C cell phone charger for example just for a test)? It’s incredibly common for a power supply to work on a Pi with a microSD card but when the additional power is drawn from the SSD it starts being unable to keep up and won’t supply enough power. When this happens the SSD drops out (usually just for a split second) and you’ll get inode errors like that.

      Usually these types of errors can be resolved with a e2fsck on the device (it may just be an imaging quirk) and a quick filesystem repair. It may be worth trying that and seeing if everything just works normally!

      1. Avatar for Olli

        Hi James,

        thanks for your fast answer. I am using the official USB-C Power Supply. Looks good. I have also checked the integrity of the download zip and the img file with 7zip. I am using latest version of etcher with validate option.

        Maybe it’s kernel problem (googling for [sda] Synchronize Cache(10) failed)

        1. Using the disk with CentOS 8 / Intel NUC Celeron is absolutely errorfree. Formatting as ext4, rebooting, mounting, unmountig, etc.
        2. As soon as the disk is used with the Raspi I get errors:
        Jan 9 13:15:15 raspberrypi kernel: [ 911.847157] sda: sda1
        Jan 9 13:15:15 raspberrypi kernel: [ 911.851330] sd 0:0:0:0: [sda] Attached SCSI disk
        Jan 9 13:15:17 raspberrypi kernel: [ 913.476302] sd 0:0:0:0: [sda] Synchronizing SCSI cache
        Jan 9 13:15:17 raspberrypi kernel: [ 914.069230] sd 0:0:0:0: [sda] Synchronize Cache(10) failed: Result: hostbyte=0x07 driverbyte=0x00

        I will go and buy another EVOx60.

        1. Avatar for jamesachambers

          Hey Olli,

          Are you using standard Raspbian? Have you tried any different distros to test the kernel theory? It’s definitely possible, but those are all very common drives and I wouldn’t expect any trouble with them on any major distros!

          1. Avatar for Jay

            hi, adding one more data point. I was using a ORICO USB 3.0 to 2.5 adapter (https://www.amazon.com/gp/product/B01LY97QE8/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&psc=1) and seeing the exact same sector error as described above. Tried using quirks, different micro sd cards, no luck. I was using an older Crucial 2.5-inch SSD in it.

            After swapping to a newer Samsung T1 USB SSD it works right away without a hitch. No idea if it’s the adapter OR the drive, but one more datapoint to consider.

            Thanks for the extremely detailed guide!

          2. Avatar for Olli

            Hi James,

            Tests with USB Adapter: USB312SAT3CB and CSL with 12v (https://www.amazon.de/CSL-Adapter-Konverter-Laufwerke-Netzteil/dp/B01K22TZ3I/)
            – Ok: Raspi4b working with LibreELEC (installed via noobs).
            – Ok: Desktop Windows 10. Running crystalmark (>500 GB)
            – Ok: Intel NUC Celeron CentOS 8.
            – Error: Raspi3b working with Raspbian Stretch and Duster when attaching SSD and formatting as ext4. But failing during reboot
            – Error: Raspi4b – after mounting ext4 partition sync error

            Bought a new ADATA SU650 and everything works fine.

            I don’t know what’s wrong with the BX200, but I won’t use is anymore. Maybe it is too old and a little bit damaged and drawing too much power.

            1. Avatar for jamesachambers

              Hey Olli,

              Thanks for the update! I think you are probably right, the older SSDs have a (much) higher power draw compared to newer ones. The BX200 is getting up there in age and Crucial designates it a legacy product.

              It could also have to do with adapters. We’re still deep in study on the adapters but we have seen instances where certain adapters and certain drives just won’t get along. That being said, I don’t think that is the case for you and it’s probably related to power draw or the drive has worn out!

              Thanks for letting us know, it definitely helps me with storage.jamesachambers.com and helps others when they are choosing drives so they know what works and what to avoid!

  10. Avatar for bjorn

    Thanks for the great tutorial!

    I’m using a ICY BOX IB-AC603a-U3 2,5″ with a Samsung 860PRO 256GB and when inserted into a USB3.0 port of my Raspberry Pi 4 Model B 4GB it always fails one or more services during startup.
    When switching to a USB 2.0 port it boots up perfectly. Could this be a driver issue with my SSD-adapter?

    1. Avatar for jamesachambers

      Hey bjorn,

      You may want to try with the quirks enabled. Check out the quirks section. The adapters usually run slower with it on but it makes some adapters that don’t work actually function on the USB 3.0 ports!

      1. Avatar for bjorn

        Wow… Not sure why I didn’t try this sooner but it worked! 🙂
        It’s possible that the SSD would perform better with another adapter, but it would be sad to just throw it away. Significantly faster than USB2.0, that’s for sure!
        Score: 2553 vs 4873

  11. Avatar for Pi Eyed

    I was able to image my retired Samsung 840 232GB SSD using SD Card Copier under accessories on my 4GB Pi4. I scored 8685 on the Github test. I did not have to resize the partition either. I did back my SD card before I ventured forth but did not need it. A BIG THANKS for providing this solution – It was easier, by far, than any other I had looked at.

    1. Avatar for Florian

      I did everything until the step update /boot/cmdline.txt. After the restart, the Pi can no longer be addressed. If I change the PARTUUID back to the SD card, the Pi will work again …

        1. Avatar for Florian

          Yes I have. I flashed the SD and the USB-Flash-Drive with the same image. Then I changed the disk-identifier of the USB-Flash-Drive and update the /boot/cmdline.txt. After this restart, the PI can not longer be addressed.
          Any Idea’s?

          1. Avatar for Florian

            Disk /dev/mmcblk0: 29.7 GiB, 31914983424 bytes, 62333952 sectors
            Units: sectors of 1 * 512 = 512 bytes
            Sector size (logical/physical): 512 bytes / 512 bytes
            I/O size (minimum/optimal): 512 bytes / 512 bytes
            Disklabel type: dos
            Disk identifier: 0x6c586e13

            Device Boot Start End Sectors Size Id Type
            /dev/mmcblk0p1 8192 532479 524288 256M c W95 FAT32 (LBA)
            /dev/mmcblk0p2 532480 62333951 61801472 29.5G 83 Linux

            Disk /dev/sda: 119.3 GiB, 128043712512 bytes, 250085376 sectors
            Disk model: Extreme Pro
            Units: sectors of 1 * 512 = 512 bytes
            Sector size (logical/physical): 512 bytes / 512 bytes
            I/O size (minimum/optimal): 512 bytes / 512 bytes
            Disklabel type: dos
            Disk identifier: 0xd34db33f

            Device Boot Start End Sectors Size Id Type
            /dev/sda1 8192 532479 524288 256M c W95 FAT32 (LBA)
            /dev/sda2 532480 62333951 61801472 29.5G 83 Linux
            pi@raspberrypi:~ $

          2. Avatar for dontkickmi

            quote “Then I changed the disk-identifier of the USB-Flash-Drive and update the /boot/cmdline.txt” endquote

            just guessing…
            [ticked] the cmdline.txt you mentioned in above text under SD card (not SSD).
            [ticked] the disk identifier you changed in cmdline.txt is “d34db33f-02” (not 0xd34db33f)
            [ticked] cmdline.txt remains one line
            [ticked] spell check?

            1. Avatar for dontkickmi

              get another USB enclosure

              I bought a couple to try, didn’t workout.
              It’s exactly like your experience.
              So I swap back to previous working one,
              No problem now.

  12. Avatar for John H Reinhardt
    John H Reinhardt

    You can add this M.2 SATA adapter to your good list – UGREEN M.2 SSD It uses the same ASMedia Technology Inc. ASM1051E chip set as the QNINE adapter but has a USB C port on the enclosure. When used with a Kingston A400 120Gb M.2 SSD I got the following on a 4GB Pi 4:
    sudo hdparm -Tt /dev/sda2

    /dev/sda2:
    Timing cached reads: 1840 MB in 2.00 seconds = 920.14 MB/sec
    Timing buffered disk reads: 1066 MB in 3.00 seconds = 355.29 MB/sec

  13. Avatar for dontkickmi

    Thank you for the guide~!

    Pi 4 Model B 4 GB,
    Crucial MX500 1TB SSD
    Cyberslim USB3 docking S1-DS6G
    (no quirk applied)
    ======================================

    Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 002: ID 152d:0567 JMicron Technology Corp. / JMicron USA Technology Corp. JMS567 SATA 6Gb/s bridge
    Bus 002 Device 004: ID 13fd:3910 Initio Corporation
    Bus 002 Device 003: ID 2109:0813 VIA Labs, Inc.
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 003: ID 2109:2813 VIA Labs, Inc.
    Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    pi@p:~ $ sudo dd if=/dev/zero of=/root/test bs=8k count=500k conv=fsync
    512000+0 records in
    512000+0 records out
    4194304000 bytes (4.2 GB, 3.9 GiB) copied, 19.2775 s, 218 MB/s
    pi@p:~ $

  14. Avatar for Matthias

    I have an ORICO transparent enclosure that works ok with quirks mode (~200 MB/s). The SABRENT one does not work properly in either mode (~20 MB/s only).

  15. Avatar for Pi-Face

    Thanks for the tutorial.

    I tried it on my Pi4 – 4GB with a Kingston flash drive.

    The main reason for me trying faster storage is because YouTube vids were lagging.
    It’s faster, but the lag on 1080p YouTube vids remains although not as bad as when using the SD card.
    Now in the process of ordering an adapter for the spare Samsung EVO 970 M.2 drive I have.

    Some on the Pi forums say they have no issue streaming video @ 1080p with the SD card only. I beg to differ.

    1. Avatar for jamesachambers

      Hey Pi-Face,

      Faster storage will definitely help, and the Samsung 970 Evo is a monster drive (it doesn’t really get much better, I have one as well!).

      One thing you could try for a test is my Ubuntu image and try playing YouTube videos on there. The 3D driver stack being used is a little different than Raspbian and some people have reported much better results watching videos on there so it’s worth a try!

      1. Avatar for PI-FACE

        Hi James,

        Will give it a try, but are there any alternatives to Ubuntu? I use Linux Mint on a couple of machines, Ubuntu got a lot of bad press so I stayed away from it.

        Thanks for the tips 🙂

        Happy New Year!

  16. Avatar for Sander

    Thank you for this guide, I managed to install it successfully on the following system:
    Raspberry Pi 4 Model B + 4GB
    X825 2.5″ SATA HDD/SSD Storage Board
    X825 Case
    X735 Power Management Board
    DC 5V 4A Power Supply Kit
    Together with an old laptop hard drive I had lying around.

Leave a Comment

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

Type here..