Dual NVMe SSDs on Raspberry Pi 5: M.2 HATs, RAID, and Real-World Throughput
Booting a single NVMe drive on a Raspberry Pi 5 is already covered elsewhere on this site, and it's a straightforward win over SD card storage. What isn't obvious is what happens when you add a second NVMe drive using one of the dual and quad M.2 HATs now on the market, and whether RAID makes sense given the Pi 5's actual PCIe bandwidth. The short answer: RAID1 for redundancy is genuinely useful here; RAID0 for combined speed is usually not what people expect it to be, because of a bandwidth ceiling that has nothing to do with the drives themselves.
The PCIe Bottleneck You Can't Engineer Around
The Raspberry Pi 5's PCIe interface is a single-lane (x1) connection, running at Gen 2 speeds by default (roughly 500MB/s theoretical, less in practice) or Gen 3 if you enable it in config.txt (roughly 1GB/s theoretical, again less in practice, and not officially guaranteed stable by the Raspberry Pi Foundation — some boards need signal integrity tuning to run reliably at Gen 3). This single lane is the entire PCIe budget for the board. A dual or quad M.2 HAT doesn't give each drive its own dedicated lane — it uses a PCIe switch chip (commonly an ASMedia or similar) to fan out that one lane across multiple M.2 slots, meaning every drive shares the same total bandwidth ceiling. Two NVMe drives that could individually push 2000MB/s+ on a proper multi-lane desktop system are both fighting over roughly 400-900MB/s combined on a Pi 5, depending on Gen 2 vs Gen 3 configuration and the specific HAT's switch chip.
What This Means for RAID Choice
RAID LevelRealistic Benefit on Pi 5Verdict RAID 0 (striping)Minimal to none — you're already bandwidth-limited by the single PCIe lane before striping adds anything, and you've doubled your failure risk since losing either drive loses all dataNot recommended on Pi 5 specifically, even though it's the "obvious" choice on desktop hardware with abundant lanes RAID 1 (mirroring)Real, meaningful benefit — redundancy against a single drive failure, with read performance sometimes improved slightly since reads can be spread across both drivesThe sensible choice for a Pi 5 NAS, home server, or anything where you care more about not losing data than squeezing out extra throughput Two independent drives (no RAID)Simplest setup, one drive for OS/apps and one for bulk storage or backups, no shared failure domain between the two rolesOften the most practical choice for a general-purpose Pi 5 build where you want to isolate the boot drive from a separate data drivePopular Dual/Quad M.2 HATs
Boards like the Pineberry HatDrive Dual, Radxa Penta SATA/NVMe HAT (which mixes M.2 and SATA), and similar products all work the same way architecturally: a PCIe switch fans the Pi's single lane out to multiple M.2 slots. Check which PCIe switch chip a given board uses and its officially supported Gen 2/Gen 3 behavior before buying — cheaper boards sometimes have compatibility quirks with specific NVMe drive models that show up as boot failures or drive drop-outs under load, which is a firmware/signal-integrity issue rather than anything you can fix in software.
Setting Up mdadm RAID1
Once both drives are recognized by the Pi (verify with lsblk and confirm you see both NVMe block devices), building a RAID1 array is standard Linux mdadm work, identical in principle to how it's done on any other Linux box:
- Install mdadm if it isn't already present, then create the array with mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/nvme0n1 /dev/nvme1n1 (adjust device names to match your actual layout — double-check with lsblk first, since getting this wrong will destroy data on the wrong drive).
- Format the resulting /dev/md0 device with your filesystem of choice (ext4 is the safe default for a general-purpose Pi server).
- Save the array configuration with mdadm --detail --scan >> /etc/mdadm/mdadm.conf so the array reassembles correctly on reboot, and update initramfs if you're mirroring the boot drive itself rather than just a data volume.
- Mirroring the boot drive is more involved than mirroring a data-only array — it requires the bootloader and EEPROM configuration to be aware of both drives, and Raspberry Pi's boot firmware support for RAID1 boot has historically been limited. The more common and more reliable pattern is booting from a single NVMe drive and using RAID1 (or just a second independent drive) for your actual data storage and backups, rather than attempting to mirror the boot volume itself.
Benchmarking Reality Check
Before committing to any RAID configuration, benchmark your actual setup with something like fio or even a simple dd sequential write test, and compare single-drive throughput to your two-drive configuration. Expect single-drive Gen 2 performance in the 350-450MB/s range on most Pi 5 setups, with a RAID0 array topping out not far above that single-drive number rather than doubling it — the shared PCIe lane is the ceiling, not the drives. This is the single most common source of disappointment for people expecting desktop-style RAID0 scaling on a Pi.
Power and Physical Considerations
Two NVMe drives under load draw meaningfully more current than one — verify your HAT's power delivery and your Pi's power supply can handle the combined draw, especially if you're also running USB peripherals or a HAT stack. Some dual/quad M.2 HATs require their own supplemental power input separate from the Pi's USB-C power, which is worth checking before you're troubleshooting an under-voltage warning that's actually a wiring omission.
Dual NVMe on a Pi 5 is a genuine upgrade for reliability-focused builds — a small NAS, a self-hosted server where you don't want a single drive failure to take everything down — but go in expecting RAID1's redundancy benefit, not RAID0's speed benefit, and you won't be disappointed by the numbers the single PCIe lane actually delivers.