Adding NVMe boot and active cooling to a Raspberry Pi 5 turns it from a hobby SBC into a legitimately useful small server. NVMe replaces the microSD-card bottleneck that has haunted every previous Pi generation, and active cooling lets the SoC hold its full 2.4 GHz clock under load without the thermal throttling that becomes a headache in a headless deployment. Both upgrades are well under $60 combined in 2026, and both are worth doing on day one.
Key takeaways
- The Pi 5 supports a single PCIe Gen 2 x1 lane — enough for ~500 MB/s sustained NVMe reads, which is ~4× the fastest microSD you can put in it.
- The official Pi 5 M.2 HAT and the third-party clones (Pimoroni, Pineberry, Geekworm) all follow the same electrical spec; the differences are physical mount and heatsink design.
- The Pi 5 Active Cooler (official) is fine at stock and lets you turbo up to 2.4 GHz sustained; larger third-party fan+heatsink stacks are quieter but only bring the temperature down another 3–5°C.
- Boot from NVMe on the Pi 5 is native — set the boot order in
raspi-config; you don't need any custom bootloader work. - The full BOM lands around $45 for cooling + M.2 HAT + a small 256GB drive; a Samsung 970 EVO Plus 250GB NVMe is a proven pick for the Pi 5's PCIe Gen 2 lane.
Why NVMe boot on the Pi 5 matters
Every Pi model before the Pi 5 booted from microSD. That was a compromise: microSD is cheap, small, and universally available, but sustained random-write performance is terrible (typical microSDs deliver 10–30 MB/s random-4k-write, and their controllers wear out fast under database and log workloads). The Pi 4 could boot from USB SSD as a workaround, but USB Mass Storage introduces latency and doesn't give you the low-level control an NVMe device does.
The Pi 5 changed this. It exposes a PCIe Gen 2 x1 lane off the Broadcom BCM2712 SoC via a Molex connector, and every M.2 HAT is a passive adapter from that connector to a standard M.2 M-key socket. Boot from NVMe is a first-class boot device — no U-Boot juggling, no chainloading — set boot order in raspi-config and the Pi's own bootloader handles the rest.
The parts you need
| Part | Purpose | Price (USD, mid-2026) |
|---|---|---|
| Raspberry Pi 5 4GB or 8GB | The SBC | $60–$80 |
| Pi 5 Active Cooler (official) | Thermal solution | $5 |
| Pi 5 M.2 HAT+ (official) or clone | PCIe Gen 2 → M.2 | $12–$25 |
| Samsung 970 EVO Plus 250GB NVMe | Boot + rootfs storage | ~$25 |
| Official Pi 5 27W USB-C PSU | Power (needed for full turbo) | $12 |
| Case with M.2 HAT clearance | Enclosure | $10–$20 |
If you already own a Raspberry Pi 4 Model B 8GB, don't try to shoehorn a Pi 5 M.2 HAT onto it — the Pi 4 doesn't expose PCIe on the header. The two boards look similar but have completely different power and I/O topologies.
If you're starting from scratch and want the smallest possible footprint, the Raspberry Pi Zero W is a different form factor entirely — no PCIe, no active cooler — so keep it in your parts bin for other projects, not for the NVMe build.
Step 1: install the Active Cooler
The official Active Cooler is a small aluminum heatsink with a 5V PWM fan and pre-installed thermal pads for the SoC, the RAM, and the PMIC. It clips onto the four spring-loaded mounting posts on the Pi 5 board — no screws, no thermal grease application, no fan-header shenanigans.
Practical points:
- Peel the thermal-pad backing before installing. Half the "my Pi 5 throttles" threads on r/raspberry_pi are about not removing this film.
- The fan header on the Pi 5 is a small four-pin JST connector labeled
FAN. The Active Cooler plugs directly in; PWM control is automatic via the kernel's thermal driver. - The fan spins up around 60°C and hits maximum around 80°C. It is audible but not intrusive; the Noctua fan crowd has aftermarket options if you want dead-silent.
Expected temperatures with the Active Cooler at 25°C ambient in a well-ventilated case, per community measurements from Jeff Geerling and various forum threads:
| Load | Idle | Web dashboard | Full CPU stress | AI inference load |
|---|---|---|---|---|
| Uncooled Pi 5 | 55°C | 70°C | throttling at 85°C | throttles hard |
| Passive heatsink | 50°C | 62°C | 78°C | ~75°C sustained |
| Official Active Cooler | 42°C | 52°C | 68°C | 65°C sustained |
| Larger fan+heatsink (Argon THRML, ICE Tower) | 40°C | 48°C | 62°C | 60°C sustained |
The point of active cooling on the Pi 5 is not raw temperature — the SoC is fine at 78°C. The point is holding the 2.4 GHz clock without stepping down. A throttled Pi 5 runs 15–20% slower on sustained workloads, and once you've been through a build where you can't tell why compilation is inconsistent, you install the fan first.
Step 2: mount the M.2 HAT
The official Pi 5 M.2 HAT+ ships with a short flexible flat cable (FFC) that plugs into the Pi's PCIe connector, plus a set of standoffs that stack the HAT above the Active Cooler with enough clearance. Third-party HATs like Pimoroni's are the same electrical design with a different physical mount.
Installation steps:
- Unplug the Active Cooler's fan header if it interferes with routing the PCIe FFC. You can plug it back in through a small notch on most HATs.
- Route the FFC to the HAT, with the exposed contacts facing the correct side. Both the Pi and the HAT are labeled — follow those labels, not intuition.
- Screw the Samsung 970 EVO Plus 250GB NVMe into the M.2 slot with the provided screw.
- Stack the HAT onto the four standoffs so it sits above the SoC / Active Cooler.
The Pi 5's PCIe lane is Gen 2 x1 by default — around 500 MB/s theoretical. You can force Gen 3 mode by editing /boot/firmware/config.txt:
That unlocks another ~800 MB/s of sequential throughput but takes the interface outside its officially validated envelope. On a stable HAT with a quality drive it works reliably; on some drive/HAT combos it corrupts data. Test with fio before you trust the setting for anything important.
Step 3: boot from NVMe
Native NVMe boot on the Pi 5 is a raspi-config toggle:
- Boot the Pi 5 from a microSD with a fresh Raspberry Pi OS image.
sudo raspi-config→ Advanced Options → Boot Order → B2 NVMe/USB Boot.- Shut down, remove the microSD.
- Flash a fresh Raspberry Pi OS image onto the NVMe using
rpi-imageron your desktop, then put the NVMe back on the M.2 HAT. - Power up. The Pi 5 boots from NVMe in under 10 seconds vs the 30+ seconds a microSD boot takes.
That's the entire boot dance. No dtoverlays, no U-Boot patches, no custom bootcode.bin swaps. Compared to the Pi 4's USB SSD boot workflow, the Pi 5 is a giant step forward.
Real-world numbers
Community benchmarks from Phoronix and Jeff Geerling's Pi 5 test suite report the following throughput on a Gen 2 x1 lane with a Samsung 970 EVO Plus:
| Metric | microSD (SanDisk Extreme A2) | USB 3 SSD | NVMe on Pi 5 M.2 HAT+ |
|---|---|---|---|
| Sequential read | 90 MB/s | 340 MB/s | ~500 MB/s |
| Sequential write | 50 MB/s | 320 MB/s | ~450 MB/s |
| Random 4k read (IOPS) | ~8,000 | ~20,000 | ~55,000 |
| Random 4k write (IOPS) | ~2,500 | ~15,000 | ~45,000 |
| Boot time to login prompt | 32 s | 12 s | 8 s |
| Idle power draw (rootfs only) | 3.1 W | 4.4 W | 3.7 W |
Random 4k performance is where NVMe pulls ahead most dramatically. That is the workload that dominates web-server logging, database inserts, container spin-up, and package installs — the actual workloads that make a Pi 5 feel like a modern computer rather than a hobbyist board.
Common pitfalls
- PSU under-spec. The Pi 5 wants 5V/5A (27W) under load. A 15W generic USB-C brick will boot but throttle when the NVMe spins up. Use the official 27W supply.
- Skipping the fan clip. No fan means the SoC hits 85°C under sustained load and drops to ~1.5 GHz. If your NVMe workload feels slow, check
vcgencmd measure_tempandvcgencmd get_throttledfirst. - NVMe drive uses too much power. Some enterprise-class drives pull 6–8W under load and can starve the Pi. The Samsung 970 EVO Plus idles under 1W and peaks under 3W, which is comfortable for the Pi's PCIe budget.
- Missing UASP. If you were on USB SSD before, you knew about UAS. NVMe doesn't need it; but people migrating configs sometimes leave
usb-storage.quirksincmdline.txt, which is harmless but not useful. Remove it. - Buying an M-key drive when your HAT is B+M keyed. Rare, but read the HAT spec — most Pi 5 HATs are M-key only.
- Cheap short PCIe FFCs. The official FFC is length-tuned to the connector spacing. A generic FFC can cause link training failures. Keep the one that came in the box.
Case selection
Not every Pi 5 case has M.2 HAT clearance. Look for cases explicitly marketed as "Pi 5 with M.2 HAT" or "NVMe HAT compatible." The Argon NEO 5 M.2 NVMe, the Pimoroni NVMe base, and the Geekworm ICE Tower case are the three most popular options in 2026. Cheap generic cases will get you 90% of the way there but often force a compromise on the fan height.
Optional: VESA mounting the Pi 5 behind a monitor
Once you have the Active Cooler and M.2 HAT installed, the whole assembly is thin enough to VESA-mount behind a monitor. A number of 3D-printable brackets exist on Printables and Thingiverse that hold the Pi 5 + HAT + NVMe stack behind a 100 × 100 mm VESA mount. The result is a completely invisible small server that sits behind your existing monitor, powered off the monitor's USB-C PD output on some models (check that the monitor delivers 27 W; many only deliver 15 W).
If you already have a display like the KOORUI 27-inch 4K QD-Mini LED with a strong USB-C PD output, this is a nearly-zero-desk-space setup. If the monitor is USB-C PD limited to under 27 W, use a dedicated USB-C PSU and route the cable neatly.
Sample workloads and what to expect
Real-world workloads on a Pi 5 with Active Cooler + NVMe boot in mid-2026:
- Home Assistant Core: starts in ~4 seconds vs ~20 on microSD. Snappy UI. Zero perceptible lag on automations.
- Jellyfin media server (transcode-off, direct-play only): handles 1080p H.264 streams comfortably. AV1 direct-play works too. 4K transcoding is not on the menu (no dedicated encode block for real-time 4K).
- Klipper 3D printer host: measurable jitter improvement over microSD. Extruder-planner performance is not the limiting factor.
- Docker / self-hosted stacks (Immich, Vaultwarden, Nextcloud): each container feels snappier by an order of magnitude on cold-start. This is the workload that benefits most from NVMe.
- Local LLM inference (Ollama, small models): the Pi 5's CPU is the limit; NVMe helps model-load speed but not sustained tok/s.
For any of the above, the day-one investment in NVMe boot pays back within the first hour of use.
Bottom line
A Pi 5 with the official Active Cooler and an M.2 HAT+ carrying a Samsung 970 EVO Plus 250GB is under $150 all-in and turns the Pi into a legitimate small home server. Boot is 4× faster than microSD, random-4k throughput is 20× faster, and the SoC holds full clock under sustained load. There is no reason to build a Pi 5 project on microSD anymore unless the project is a headless one-shot that will never see database writes; for everything else — Home Assistant, Jellyfin, Klipper controllers, small AI-inference rigs — NVMe + Active Cooler is the day-one setup.
Citations and sources
- Raspberry Pi 5 official documentation
- Jeff Geerling — Pi 5 NVMe testing
- Phoronix — Pi 5 storage benchmarks
This piece is editorial synthesis based on publicly available information. No independent first-party benchmarking is reported.
