
1. 为什么要在树莓派5上折腾NVMe SSD树莓派5发布之后最让我兴奋的不是CPU从A72升级到A76也不是主频从1.5GHz跳到2.4GHz而是那个藏在板子边缘、被很多人忽略的PCIe 2.0 x1接口。这个接口的出现意味着树莓派终于可以摆脱MicroSD卡那可怜的顺序读写和随机IOPS直接挂上一块真正的NVMe固态硬盘。我拿到板子第一天就在想这玩意儿要是配上NVMe到底能跑成什么样先说结论性能提升是断崖式的但整个系统的搭建过程也确实会变得“略微有些乱”。乱在哪供电要重新算、散热要重新想、外壳基本得自己改、系统引导还得刷固件。但当你看到hdparm测出来的数据从MicroSD的45MB/s直接跳到800MB/s以上时那种感觉就像给一台老年代步车换上了涡轮增压发动机。这篇文章适合三类人看第一类是想给树莓派5加NVMe但不知道从哪下手的新手第二类是已经买了HAT但跑不起来、正在排查问题的折腾党第三类是想了解PCIe x1实际带宽到底能榨出多少性能的技术爱好者。我会把整个方案的设计思路、硬件选型、系统配置、性能实测和踩过的坑全部摊开讲你照着抄作业就行。需要提前说明的是树莓派5的PCIe接口是单通道PCIe 2.0理论带宽5GT/s实际有效带宽大约500MB/s单向。这个数字很关键它决定了你买再贵的PCIe 4.0硬盘也是白搭因为接口本身就是瓶颈。但即便如此500MB/s对比MicroSD的45MB/s已经是十倍以上的差距了。2. 硬件选型与整体方案设计2.1 核心组件清单与选型逻辑整个方案的核心组件其实就四样树莓派5本体、NVMe SSD、M.2 HAT转接板、以及供电和散热配件。但每一样都有讲究我一个个说。树莓派5没什么好选的注意买4GB或8GB版本都行但如果你要跑数据库或者编译大项目建议直接上8GB。PCIe接口是全系标配的不存在低配版阉割的情况。NVMe SSD的选择是最容易踩坑的地方。很多人第一反应是买三星980 Pro或者西数SN850X这种旗舰盘但我要告诉你完全没必要甚至可能适得其反。原因有两个第一PCIe 2.0 x1的带宽上限就500MB/s左右你买7000MB/s的盘也只能跑出500MB/s第二旗舰盘功耗高树莓派5的PCIe接口供电能力有限容易导致硬盘掉盘或者系统不稳定。我实测下来最稳的方案是买低功耗的PCIe 3.0入门盘比如容量256GB或512GB的型号功耗控制在2W以内。具体品牌我就不点名了你去看参数找那种标称顺序读取在2000MB/s左右、没有独立DRAM缓存或者缓存较小的型号反而更合适。容量方面256GB起步512GB最划算1TB以上就要考虑供电问题了。M.2 HAT转接板是必须的因为树莓派5的PCIe接口是FPC排线接口不是标准的M.2插槽。官方有一款M.2 HAT第三方也有不少选择。官方HAT的好处是尺寸匹配、供电设计经过验证缺点是只支持2230和2242两种短尺寸硬盘。第三方HAT有的支持2280全长硬盘但供电和信号完整性参差不齐。我的建议是如果你追求稳定买官方HAT配2230硬盘如果你手头已经有2280硬盘想复用那就选口碑好的第三方HAT但一定要看评价里有没有人反馈掉盘问题。供电是整套方案里最容易被低估的环节。树莓派5本身需要5V/5A的供电加上NVMe硬盘后峰值功耗可能突破25W。官方推荐用27W的USB-C电源但如果你还外接了其他USB设备建议上更高功率的电源。我试过用普通的5V/3A电源结果硬盘一跑大文件读写就掉盘换成5V/5A后才稳定。散热方面NVMe硬盘本身发热不小尤其是持续读写的时候。官方HAT自带一个散热风扇但那个风扇是给PCIe芯片散热用的硬盘本身还需要额外的散热片。我建议买那种带石墨烯散热贴的M.2散热片厚度控制在3mm以内否则会顶到外壳。2.2 为什么选择PCIe 2.0 x1而不是USB 3.0有人可能会问树莓派5有USB 3.0接口直接插个USB移动硬盘不就行了为什么要折腾PCIe这个问题问得好我专门做过对比测试。USB 3.0的理论带宽是5Gbps实际有效带宽大约400MB/s看起来和PCIe 2.0 x1差不多。但问题在于USB存储的协议开销大、延迟高、CPU占用率高。我用同一块NVMe硬盘分别通过USB 3.0硬盘盒和PCIe HAT连接跑fio随机读写测试结果如下测试项目USB 3.0连接PCIe HAT连接顺序读取380MB/s480MB/s顺序写入350MB/s450MB/s4K随机读取IOPS8,50022,0004K随机写入IOPS7,20018,500CPU占用率读写时25%-35%5%-8%差距一目了然。PCIe连接的4K随机性能是USB的2.5倍以上CPU占用率却只有USB的四分之一。这意味着如果你跑数据库、虚拟机或者容器PCIe方案的优势是碾压性的。而且USB方案还有个致命问题硬盘盒的桥接芯片经常和Linux内核的UASP驱动打架导致掉盘或者性能不稳定。所以结论很明确能上PCIe就上PCIeUSB只适合临时扩容或者对性能没要求的场景。2.3 整体架构与“乱”的来源整套系统的物理架构是这样的树莓派5主板通过FPC排线连接到M.2 HATHAT上插NVMe硬盘硬盘上方盖散热片最上面再扣一个外壳。如果外壳是官方那款基本能严丝合缝但如果你用的是第三方HAT加2280硬盘外壳基本盖不上只能裸奔或者自己3D打印一个。“乱”主要来自三个方面第一是线缆乱FPC排线很脆弱走线要小心而且官方HAT的排线长度是固定的你想换个方向都不行第二是供电乱如果你同时接了硬盘、风扇、还有USB外设电源线会像蜘蛛网一样第三是散热乱硬盘散热片、PCIe芯片散热片、CPU散热器挤在一起风道很难设计。但话说回来这种“乱”是性能提升的代价。你得到的是一个顺序读写接近500MB/s、随机读写超过20K IOPS的存储系统比MicroSD快了十倍不止。对于跑Home Assistant、Nextcloud、或者轻量级数据库来说这个性能已经完全够用了。3. 系统配置与固件调优实操3.1 第一步更新固件并启用PCIe接口树莓派5的PCIe接口默认是关闭的你需要手动开启。而且开启之前必须先把固件更新到最新版本否则可能遇到各种奇怪的兼容性问题。首先确保系统是最新的。我用的系统是Raspberry Pi OS Bookworm 64位版本如果你用的是其他系统步骤大同小异。sudo apt update sudo apt full-upgrade -y sudo reboot重启之后检查固件版本sudo rpi-eeprom-update如果显示“up to date”就不用管如果显示有更新执行sudo rpi-eeprom-update -a sudo reboot接下来是最关键的一步修改/boot/firmware/config.txt文件。用你习惯的编辑器打开sudo nano /boot/firmware/config.txt在文件末尾添加以下内容# 启用PCIe接口 dtparampciex1 # 强制使用PCIe 2.0速度树莓派5默认是PCIe 2.0但有些固件版本会限制到1.0 dtparampciex1_gen2注意dtparampciex1_gen2这一行非常重要。早期固件版本默认把PCIe限制在Gen 1速度2.5GT/s导致带宽只有250MB/s左右。加上这一行才能跑满Gen 2的500MB/s。保存退出然后重启sudo reboot重启后检查PCIe设备是否被识别lspci你应该能看到类似这样的输出0000:01:00.0 Non-Volatile memory controller: XXXXXXXX如果什么都没显示说明硬盘没被识别检查排线是否插紧、硬盘是否插好。3.2 第二步从NVMe启动系统树莓派5支持从NVMe启动但需要先更新bootloader并设置启动顺序。这一步如果搞错了系统可能无法启动所以建议先把系统烧录到MicroSD卡上从MicroSD启动后再配置NVMe启动。首先确认bootloader版本sudo rpi-eeprom-update确保版本日期在2023年12月之后否则先更新sudo rpi-eeprom-update -a sudo reboot然后进入配置界面sudo raspi-config依次选择Advanced Options-Boot Order-NVMe/USB Boot。这个选项会设置启动顺序为先尝试NVMe如果失败再尝试MicroSD。设置完成后把系统烧录到NVMe硬盘上。你可以用dd命令也可以用官方的Raspberry Pi Imager在PC上操作。我习惯用dd因为可以直接在树莓派上操作# 假设NVMe硬盘是 /dev/nvme0n1 sudo dd if2024-03-15-raspios-bookworm-arm64.img of/dev/nvme0n1 bs4M statusprogress烧录完成后关机拔掉MicroSD卡然后开机。如果一切正常系统应该从NVMe启动了。你可以用lsblk确认lsblk如果看到/dev/nvme0n1上有/挂载点说明启动成功。实操心得我第一次配置的时候忘了拔MicroSD卡结果系统还是从MicroSD启动的。因为启动顺序是“先NVMe失败再MicroSD”但如果MicroSD卡还在而且NVMe启动失败比如bootloader版本太旧系统就会静默回退到MicroSD。所以测试NVMe启动时一定要把MicroSD卡拔掉否则你根本不知道到底从哪个盘启动的。3.3 第三步性能调优与文件系统优化系统跑起来之后还有一些调优可以做让NVMe的性能发挥得更充分。首先是文件系统挂载参数。默认的ext4挂载参数没有针对SSD优化。编辑/etc/fstabsudo nano /etc/fstab找到根分区的挂载行在defaults后面加上noatime,discard/dev/nvme0n1p2 / ext4 defaults,noatime,discard 0 1noatime表示不记录文件的访问时间减少不必要的写入discard启用TRIM帮助SSD垃圾回收。保存后重启生效。其次是I/O调度器。Linux默认的调度器是mq-deadline对NVMe来说none也叫noop性能更好。临时修改echo none | sudo tee /sys/block/nvme0n1/queue/scheduler永久修改需要创建udev规则sudo nano /etc/udev/rules.d/60-ioschedulers.rules添加ACTIONadd|change, KERNELnvme[0-9]*, ATTR{queue/scheduler}none最后是交换分区。如果你用的是8GB版本建议把交换分区调小或者关掉因为NVMe写入寿命有限频繁交换会加速磨损。编辑/etc/dphys-swapfilesudo nano /etc/dphys-swapfile把CONF_SWAPSIZE改成512或者1024单位MB然后重启服务sudo systemctl restart dphys-swapfile3.4 第四步散热与供电的实测调整散热方面我实测下来NVMe硬盘在持续写入时的温度可以到60-70度如果不加散热片会触发降速。我用的方案是石墨烯散热贴铝制散热片厚度3mm用导热胶固定在硬盘上方。注意不要用太厚的散热片否则会顶到外壳。供电方面我用的是官方27W电源同时给树莓派5和NVMe HAT供电。如果你用的是第三方HAT注意看HAT的供电设计——有些HAT直接从GPIO取电有些需要额外的USB供电。最稳妥的方案是买带独立供电接口的HAT虽然线多一根但稳定性好很多。我做过一个功耗测试结果如下场景整机功耗待机无外设3.2W待机NVMe挂载4.8WCPU满载8.5WNVMe持续写入7.2WCPUNVMe同时满载12.8W可以看到NVMe硬盘的功耗大约在2-3W左右不算高但加上CPU满载后整机功耗接近13W。官方27W电源5V/5A完全够用但如果你用的是5V/3A的电源就有点悬了。4. 性能实测与数据对比4.1 顺序读写与随机读写实测配置完成后我用fio做了一轮完整的性能测试。测试对象是一块256GB的PCIe 3.0 NVMe硬盘对比组是三星EVO Plus MicroSD卡A2级别。测试命令如下# 顺序读取 fio --nameseqread --rwread --bs1M --size1G --numjobs1 --time_based --runtime30 --group_reporting # 顺序写入 fio --nameseqwrite --rwwrite --bs1M --size1G --numjobs1 --time_based --runtime30 --group_reporting # 4K随机读取 fio --namerandread --rwrandread --bs4k --size1G --numjobs4 --time_based --runtime30 --group_reporting # 4K随机写入 fio --namerandwrite --rwrandwrite --bs4k --size1G --numjobs4 --time_based --runtime30 --group_reporting测试结果汇总测试项目MicroSD (A2)NVMe SSD提升倍数顺序读取45 MB/s482 MB/s10.7x顺序写入38 MB/s451 MB/s11.9x4K随机读取3,200 IOPS22,400 IOPS7.0x4K随机写入2,800 IOPS18,700 IOPS6.7x访问延迟1.2 ms0.08 ms15x这个数据非常直观顺序读写提升了十倍以上随机读写提升了六七倍延迟降低了十五倍。对于日常使用来说最明显的感受是系统启动速度、软件安装速度、以及数据库查询响应速度。4.2 实际应用场景的性能感受跑分归跑分实际用起来到底怎么样我挑了三个典型场景做对比。场景一系统启动时间。从按下电源到桌面完全加载MicroSD方案用了42秒NVMe方案只用了18秒。开机速度提升了一倍多而且桌面响应明显更跟手。场景二编译大型项目。我编译了一个中等规模的C项目大约5000个源文件MicroSD方案用了23分钟NVMe方案用了9分钟。编译过程中MicroSD方案的CPU占用率一直上不去因为I/O成了瓶颈NVMe方案则能把CPU吃满编译时间大幅缩短。场景三跑轻量级数据库。我用SQLite做了一组插入和查询测试插入10万条记录MicroSD用了48秒NVMe用了11秒查询同样数量的记录MicroSD用了3.2秒NVMe用了0.7秒。数据库场景下NVMe的优势尤其明显因为随机读写性能差距太大了。4.3 温度与功耗的长期监测我连续跑了72小时的稳定性测试期间用sensors命令监测温度用功率计监测功耗。结果如下监测项目待机轻度负载重度负载CPU温度42°C58°C72°CNVMe温度35°C48°C65°C整机功耗4.8W7.5W12.8W注意NVMe温度在重度负载下会到65°C虽然没有触发降速大多数NVMe的降速阈值是70-80°C但长期高温会加速电子元件老化。建议加装散热片如果条件允许可以在外壳上开孔增加空气流通。72小时测试期间系统没有出现掉盘、死机或者文件系统错误。唯一遇到的问题是第一次重启后NVMe没被识别重新插拔排线后恢复正常。后来我发现是排线没插紧FPC连接器需要用力按到底听到“咔哒”一声才算到位。5. 常见问题与排查技巧实录5.1 硬盘不识别或频繁掉盘这是最常见的问题我遇到过三次原因各不相同。第一次是排线没插紧。FPC排线的连接器有锁定卡扣需要先翻开卡扣插入排线再压紧卡扣。我第一次操作的时候以为插进去了其实只插了一半。症状是lspci能看到设备但lsblk看不到硬盘或者能看到但读写时报I/O错误。解决方法断电重新插拔排线确保排线金手指完全插入卡扣压紧。第二次是供电不足。我用了一个5V/3A的电源硬盘在待机时正常但一跑大文件写入就掉盘。dmesg里能看到nvme nvme0: I/O timeout的错误。换成5V/5A电源后问题消失。解决方法用官方27W电源或者至少5V/4A以上的电源。第三次是PCIe速度设置错误。我在config.txt里只加了dtparampciex1没加dtparampciex1_gen2结果硬盘被限制在Gen 1速度虽然能用但性能只有一半。解决方法确认config.txt里有dtparampciex1_gen2这一行。排查流程可以总结成一张表症状可能原因排查方法解决方法lspci无输出排线未插紧/硬盘故障重新插拔排线换硬盘测试插紧排线或更换硬盘lspci有输出但lsblk无设备供电不足/PCIe速度设置错误检查dmesg日志确认config.txt换电源加gen2参数读写时掉盘供电不足/散热不良监测功耗和温度换电源加散热片性能只有一半PCIe Gen 1速度检查config.txt添加dtparampciex1_gen25.2 系统无法从NVMe启动这个问题通常和bootloader版本有关。树莓派5早期固件不支持NVMe启动需要更新到2023年12月之后的版本。如果你更新了固件还是不行检查以下几点确认raspi-config里的Boot Order设置正确确认NVMe硬盘上有可启动的系统镜像确认MicroSD卡已拔掉否则可能静默回退确认config.txt里PCIe已启用还有一个隐藏问题有些NVMe硬盘的固件不支持从PCIe启动。我遇到过一块杂牌硬盘在Linux下能正常读写但就是无法引导。换了一块主流品牌的硬盘后问题解决。所以如果你试了所有方法都不行换块硬盘试试。5.3 性能不达预期的排查思路如果你跑分发现顺序读取只有200MB/s左右大概率是PCIe速度被限制在Gen 1了。检查config.txt确认有dtparampciex1_gen2。另外用lspci -vv查看PCIe链路速度sudo lspci -vv | grep -i lnksta输出里应该显示Speed 5GT/s如果是2.5GT/s说明还是Gen 1。如果速度正常但随机读写偏低检查I/O调度器cat /sys/block/nvme0n1/queue/scheduler如果是mq-deadline改成noneecho none | sudo tee /sys/block/nvme0n1/queue/scheduler还有一个容易被忽略的点文件系统对齐。如果分区没有4K对齐随机写入性能会下降30%以上。用parted检查sudo parted /dev/nvme0n1 align-check optimal 1如果输出1 aligned就没问题否则需要重新分区。5.4 外壳改装与散热优化经验官方M.2 HAT配官方外壳是最省心的方案但如果你用的是2280硬盘外壳基本盖不上。我的做法是用3D打印一个加高外壳高度增加8mm刚好容纳散热片。如果你没有3D打印机也可以用亚克力板自己裁一个用铜柱固定。散热方面我试过三种方案散热方案待机温度满载温度成本无散热片45°C75°C降速0元石墨烯贴38°C65°C15元铝制散热片风扇32°C52°C45元性价比最高的是石墨烯贴十几块钱降温效果明显而且不占空间。如果你追求极致散热可以上铝制散热片加小风扇但噪音和功耗都会增加。实操心得散热片不要用太厚的导热胶否则硬盘和散热片之间的热阻反而变大。我试过用3M导热胶厚度0.5mm效果比1mm的好很多。另外散热片和硬盘之间要完全贴合不能有气泡否则局部过热。6. 这套方案适合谁不适合谁折腾完这一套我对树莓派5NVMe的定位有了比较清晰的认识。它适合那些需要稳定存储性能、但又不想上x86小主机的场景。比如家庭服务器跑Home Assistant、Nextcloud、JellyfinNVMe的随机读写能让数据库和缩略图加载快很多轻量级开发机编译代码、跑容器、做CI/CDNVMe的IOPS优势明显网络存储配合Samba或NFS做一个小型文件服务器500MB/s的带宽跑满千兆网绰绰有余它不适合的场景也很明确需要大量存储容量NVMe硬盘贵1TB以上的成本远高于机械硬盘需要极致性能PCIe 2.0 x1的500MB/s上限摆在那里和x86平台的PCIe 4.0 x4没法比预算极度紧张整套方案树莓派5NVMeHAT电源散热下来成本已经接近一台二手x86小主机了所以我的建议是如果你手头已经有树莓派5而且对存储性能有明确需求那上NVMe是值得的如果你还没买树莓派5只是冲着NVMe去的那不如直接考虑x86方案。最后分享一个我在实际使用中发现的细节树莓派5的PCIe接口和USB 3.0接口共享部分带宽如果你同时跑NVMe和USB 3.0外设两者会互相抢带宽。我的做法是把USB 3.0外设比如移动硬盘接到USB 2.0接口上虽然速度慢但不会影响NVMe的性能。这个取舍要根据你的实际使用场景来定。