树莓派 NAS 搭配 OLED 状态屏:OpenMediaVault 轻量级家庭存储方案
2026/9/20 1:51:19 网站建设 项目流程

1. 为什么树莓派 NAS 至今仍然值得折腾

树莓派做 NAS 这件事,我从树莓派 3B+ 时代就开始折腾了。那时候 USB 2.0 的带宽跑 Samba 共享,拷贝大文件的速度稳定在 12MB/s 左右,说实话体验很一般。但到了树莓派 4B 和现在的树莓派 5,情况完全不一样了——USB 3.0 接口、千兆网口、最高 8GB 甚至 16GB 内存,这些硬件规格放在一台功耗只有几瓦的小板子上,做家用 NAS 已经完全够用。

这次要聊的这个开源项目,核心思路是用树莓派搭配一块 OLED 小屏幕,跑 OpenMediaVault 作为 NAS 系统,同时用 OLED 实时显示系统状态。外观上走的是简洁实用路线,没有花哨的 3D 打印外壳,就是一块亚克力板加铜柱把树莓派、硬盘和 OLED 固定在一起,放在桌面上不占地方,看起来也干净。

你可能会问:市面上成品 NAS 那么多,群晖、威联通、飞牛 NAS 都有成熟方案,为什么还要自己折腾树莓派?我的答案很直接——功耗、静音、可定制性。一台群晖 DS220+ 空载功耗大概 15W 到 20W,而树莓派 4B 加一块 2.5 寸硬盘,整机功耗可以控制在 8W 以内。一年 365 天开机,电费差距虽然不大,但风扇噪音的差别是实打实的。树莓派方案可以做到完全无风扇,放在卧室里也听不到声音。

这个项目适合什么人?如果你手头已经有一块树莓派(不管是 4B 还是 5),想把它利用起来做一个轻量级的家庭文件服务器、备份节点或者小型媒体库,同时希望有一个直观的状态显示屏,那这套方案非常合适。如果你完全没接触过 Linux 和命令行,可能需要先补一些基础知识,但整体门槛并不高,跟着步骤走能跑通。

OLED 屏幕在这个项目里扮演的角色,不是装饰,而是状态监控终端。你可以让它显示 CPU 温度、内存占用、硬盘容量、网络 IP 地址、当前时间这些信息。树莓派 NAS 通常放在角落或者弱电箱里,没有显示器,每次想看状态都要 SSH 登录,有了 OLED 之后抬头就能看到关键数据,省事很多。

2. 硬件选型与整体方案设计

2.1 树莓派型号怎么选:4B 还是 5

树莓派 4B 和树莓派 5 都能跑 OpenMediaVault,但两者在实际使用中有几个关键差异需要提前想清楚。

树莓派 4B 的优势是成熟稳定、配件便宜、功耗更低。它的 USB 3.0 接口有两个,千兆网口是独立芯片,不占用 USB 带宽。实测下来,USB 3.0 接一块 SATA 硬盘(通过 USB 转 SATA 线),Samba 读写速度可以跑到 100MB/s 左右,基本跑满千兆网络。功耗方面,4B 加一块 2.5 寸机械硬盘,整机空载大约 5W,满载读写大约 10W。

树莓派 5 的优势是性能更强、PCIe 接口可扩展。树莓派 5 新增了一个 PCIe 2.0 x1 接口,通过 M.2 HAT 可以接 NVMe 固态硬盘,速度比 USB 3.0 快不少。但这里有个坑:树莓派 5 的 PCIe 接口默认没有启用,需要在/boot/firmware/config.txt里手动打开,而且早期固件版本对某些 NVMe 硬盘兼容性不好,需要更新固件。另外树莓派 5 的功耗明显更高,满载可以到 12W 以上,电源要求也更高,官方推荐 5V 5A 的电源。

我的建议是:如果你追求稳定省心,选树莓派 4B;如果你想要更好的存储性能,并且愿意折腾 PCIe 和固件,选树莓派 5。对于大多数家用 NAS 场景,4B 的性能已经足够,没必要多花钱上 5。

2.2 存储方案:USB 硬盘还是 NVMe

存储是这个项目里最影响体验的部分。树莓派本身没有 SATA 接口,所以只能用 USB 或者 PCIe 来接硬盘。

USB 方案是最常见的。用一根 USB 3.0 转 SATA 线,接一块 2.5 寸机械硬盘或者 SSD。2.5 寸硬盘不需要额外供电,直接从 USB 取电就行,树莓派的 USB 接口输出电流足够。但要注意,不要用 USB 3.0 的移动硬盘盒接 3.5 寸硬盘,3.5 寸硬盘需要 12V 供电,USB 口供不了,必须用带独立电源的硬盘盒或者硬盘底座。

NVMe 方案只适用于树莓派 5。通过 M.2 HAT 接一块 NVMe SSD,读写速度可以到 400MB/s 以上,但受限于 PCIe 2.0 x1 的带宽,实际速度大概在 450MB/s 左右。这个速度对于家用 NAS 来说绰绰有余,而且 NVMe 没有机械结构,完全静音,抗震性也好。

如果你要用 OpenMediaVault 做 RAID,需要注意:USB 接口做 RAID 不稳定。USB 连接偶尔会掉盘,RAID 阵列一旦掉盘就需要重建,风险很大。所以我的建议是,USB 方案就单盘用,重要数据定期备份到另一块硬盘或者云端。NVMe 方案可以考虑做 RAID 1,但树莓派 5 只有一个 PCIe 接口,要做 RAID 1 需要两个 NVMe 硬盘,得用支持双盘的 M.2 HAT,成本会高不少。

2.3 OLED 屏幕的选型与接线

OLED 屏幕我推荐用0.96 寸 SSD1306 驱动的 I2C 屏幕,分辨率 128x64,价格便宜,十几块钱就能买到。这个屏幕在树莓派社区里资料最多,驱动成熟,Python 库支持也很好。

接线方面,SSD1306 的 I2C 接口只需要四根线:VCC 接 3.3V,GND 接地,SCL 接树莓派的 GPIO 3(物理引脚 5),SDA 接 GPIO 2(物理引脚 3)。树莓派 4B 和 5 的 I2C 引脚位置是一样的,不用担心兼容性问题。

注意:OLED 屏幕的 VCC 一定要接 3.3V,不要接 5V。虽然有些模块标称支持 3.3V 到 5V,但长期接 5V 可能会缩短屏幕寿命,而且 I2C 电平不匹配可能导致通信不稳定。

如果你买的是 SPI 接口的 OLED 屏幕,接线会复杂一些,需要接 7 根线,而且驱动代码也不一样。对于这个项目,我强烈建议用 I2C 接口的屏幕,省事。

2.4 整体结构设计思路

这个项目的结构设计遵循一个原则:最小化、无风扇、易维护

底部是一块亚克力板,用铜柱把树莓派固定在上面。硬盘用双面胶或者扎带固定在亚克力板的另一侧。OLED 屏幕用铜柱固定在树莓派上方,角度稍微倾斜,方便查看。所有线缆用扎带整理好,从侧面走线。

电源方面,树莓派 4B 用官方 5V 3A 电源,树莓派 5 用官方 5V 5A 电源。如果你要接 3.5 寸硬盘,还需要一个独立的 12V 电源给硬盘供电。整个系统没有风扇,靠自然散热。树莓派 4B 在 NAS 负载下 CPU 温度大概 60 到 70 度,加一个小散热片就够了。树莓派 5 温度会高一些,建议加一个散热片或者小风扇,但如果你对噪音敏感,可以限制 CPU 频率来降低温度。

3. 系统安装与 OpenMediaVault 配置

3.1 系统镜像的选择与烧录

OpenMediaVault 官方提供了针对树莓派的镜像,基于 Debian 系统。你可以从 OpenMediaVault 官网下载最新的树莓派镜像,然后用 Raspberry Pi Imager 或者 balenaEtcher 烧录到 SD 卡上。

这里有个细节:SD 卡只用来装系统,不要用来存数据。SD 卡的读写寿命有限,频繁读写容易坏。系统装好之后,所有数据都存到 USB 硬盘或者 NVMe 上。我建议用一张 16GB 或者 32GB 的 A1 或 A2 级别的 SD 卡,速度不用太快,但质量要可靠,杂牌卡容易出问题。

烧录完成后,把 SD 卡插到树莓派上,接上网线,通电。第一次启动需要几分钟,系统会自动扩展分区。启动完成后,在浏览器里输入树莓派的 IP 地址,就能看到 OpenMediaVault 的登录界面。默认用户名是admin,密码是openmediavault

注意:第一次登录后立刻修改默认密码,并且把系统语言改成中文(如果你需要的话)。OpenMediaVault 的 Web 界面支持中文,在“系统”->“常规设置”里可以切换。

3.2 挂载硬盘与创建共享文件夹

登录 OpenMediaVault 后,第一步是挂载硬盘。在“存储器”->“磁盘”里,你应该能看到接在 USB 或者 NVMe 上的硬盘。选中硬盘,点击“擦除”,然后到“文件系统”里创建新的文件系统。对于 Linux 环境,推荐用 ext4 格式,稳定性和兼容性最好。如果你需要在 Windows 和 Linux 之间共享硬盘,可以用 exFAT,但 exFAT 不支持 Linux 的权限管理,OpenMediaVault 的一些功能会受限。

创建文件系统后,点击“挂载”。挂载完成后,到“共享文件夹”里创建一个新的共享文件夹,选择刚才挂载的文件系统,设置好名称和权限。

接下来配置 SMB/CIFS 服务,这是 Windows 和 macOS 都能用的文件共享协议。在“服务”->“SMB/CIFS”里启用服务,然后到“共享”里添加一个新的共享,选择刚才创建的共享文件夹。设置好访问权限,默认是允许所有用户读写,你也可以创建用户和用户组来精细控制权限。

3.3 用户与权限管理

OpenMediaVault 的用户管理是基于 Linux 系统的用户和用户组。在“用户”->“用户”里可以创建新用户,设置用户名和密码。创建用户后,需要把用户加入到相应的用户组里,比如users组,这样才能访问共享文件夹。

权限管理这块,我踩过不少坑。OpenMediaVault 的权限分为共享文件夹权限SMB 共享权限两层。共享文件夹权限控制的是文件系统层面的访问,SMB 共享权限控制的是网络访问。两层权限必须都配置正确,否则会出现“能看到共享文件夹但打不开”或者“能打开但无法写入”的问题。

我的经验是:先配置共享文件夹权限,再配置 SMB 共享权限。共享文件夹权限里,给需要访问的用户或用户组设置读写权限。SMB 共享权限里,同样给这些用户或用户组设置读写权限。如果还是不行,检查一下共享文件夹的所属用户和所属组,确保当前用户有权限访问。

3.4 树莓派系统优化与调整

OpenMediaVault 装好之后,还需要对树莓派系统做一些优化,才能让 NAS 跑得更稳。

第一件事是关闭不必要的服务。树莓派默认开启了一些服务,比如蓝牙、音频、WiFi(如果你用网线的话),这些服务会占用 CPU 和内存资源。在 OpenMediaVault 的“系统”->“服务”里可以关闭不需要的服务。或者直接 SSH 登录,用systemctl命令关闭。

第二件事是调整 swappiness。Linux 默认的 swappiness 值是 60,意味着系统会积极使用交换分区。对于 NAS 来说,频繁的交换会拖慢速度,而且 SD 卡的读写寿命有限。建议把 swappiness 调到 10 或者更低。编辑/etc/sysctl.conf,添加vm.swappiness=10,然后执行sysctl -p生效。

第三件事是设置静态 IP。NAS 的 IP 地址最好固定,否则每次重启后 IP 变了,其他设备就找不到共享文件夹了。可以在路由器里设置 DHCP 静态分配,或者直接在 OpenMediaVault 的网络设置里配置静态 IP。

第四件事是开启硬盘休眠。如果硬盘长时间不用,可以让它休眠,省电也延长寿命。在 OpenMediaVault 的“存储器”->“硬盘”里可以设置休眠时间。但要注意,频繁启停对硬盘寿命也有影响,所以休眠时间不要设太短,建议 30 分钟以上。

4. OLED 状态显示的实现

4.1 I2C 接口的启用与测试

树莓派的 I2C 接口默认是关闭的,需要手动启用。在 OpenMediaVault 的 Web 界面里,到“系统”->“树莓派”->“接口”,勾选 I2C 并保存。或者 SSH 登录后,执行raspi-config,在“Interface Options”里启用 I2C。

启用后,安装 I2C 工具:sudo apt install i2c-tools。然后执行i2cdetect -y 1,如果屏幕接线正确,你应该能看到一个地址,通常是0x3c或者0x3d。这个地址就是 OLED 屏幕的 I2C 地址,后面写代码的时候要用到。

注意:如果i2cdetect显示的是UU而不是地址,说明 I2C 地址被驱动占用了,需要先卸载驱动。如果什么都没显示,检查接线是否正确,特别是 SDA 和 SCL 有没有接反。

4.2 Python 驱动库的安装与配置

OLED 屏幕的驱动库我用的是luma.oled,这个库支持多种 OLED 屏幕,文档也比较全。安装方法:

pip install luma.oled

如果你用的是树莓派 5,可能需要先安装libopenjp2-7libtiff5这些依赖:

sudo apt install libopenjp2-7 libtiff5

安装完成后,写一个简单的测试脚本,确认屏幕能正常显示:

from luma.core.interface.serial import i2c from luma.oled.device import ssd1306 from luma.core.render import canvas serial = i2c(port=1, address=0x3C) device = ssd1306(serial) with canvas(device) as draw: draw.text((0, 0), "Hello NAS", fill="white")

运行这个脚本,如果屏幕上显示“Hello NAS”,说明驱动配置正确。

4.3 系统状态数据的采集

OLED 要显示系统状态,首先得把数据采集出来。树莓派上采集系统信息,最方便的是用psutil库:

pip install psutil

psutil可以获取 CPU 使用率、内存占用、磁盘容量、网络流量等信息。比如:

import psutil cpu_percent = psutil.cpu_percent(interval=1) memory = psutil.virtual_memory() disk = psutil.disk_usage('/mnt/data')

CPU 温度需要从系统文件里读:

def get_cpu_temp(): with open('/sys/class/thermal/thermal_zone0/temp', 'r') as f: temp = float(f.read()) / 1000 return temp

网络 IP 地址可以用socket库获取:

import socket def get_ip(): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: s.connect(('8.8.8.8', 80)) ip = s.getsockname()[0] except: ip = '127.0.0.1' finally: s.close() return ip

4.4 OLED 显示界面的设计与实现

显示界面我设计成四行,每行显示一个关键信息:

  • 第一行:CPU 温度和 CPU 使用率
  • 第二行:内存使用率和内存总量
  • 第三行:硬盘使用率和硬盘总量
  • 第四行:IP 地址和运行时间

代码实现上,用一个主循环,每隔几秒刷新一次屏幕。为了避免屏幕闪烁,可以用luma.oledcanvas上下文管理器,每次刷新时先清空再绘制。

import time from luma.core.interface.serial import i2c from luma.oled.device import ssd1306 from luma.core.render import canvas from PIL import ImageFont serial = i2c(port=1, address=0x3C) device = ssd1306(serial) font = ImageFont.load_default() def display_status(): cpu_temp = get_cpu_temp() cpu_percent = psutil.cpu_percent(interval=0.5) memory = psutil.virtual_memory() disk = psutil.disk_usage('/mnt/data') ip = get_ip() with canvas(device) as draw: draw.text((0, 0), f"CPU: {cpu_temp:.1f}C {cpu_percent}%", font=font, fill="white") draw.text((0, 16), f"MEM: {memory.percent}% {memory.total//1024//1024}M", font=font, fill="white") draw.text((0, 32), f"DSK: {disk.percent}% {disk.total//1024//1024//1024}G", font=font, fill="white") draw.text((0, 48), f"IP: {ip}", font=font, fill="white") while True: display_status() time.sleep(5)

这个脚本跑起来之后,OLED 屏幕上就会实时显示系统状态。你可以把它设置成开机自启动,这样每次树莓派启动后,OLED 自动开始工作。

4.5 设置开机自启动

让 OLED 显示脚本开机自启动,最简单的方法是创建一个 systemd 服务。新建一个文件/etc/systemd/system/oled-status.service

[Unit] Description=OLED Status Display After=network.target [Service] ExecStart=/usr/bin/python3 /home/pi/oled_status.py Restart=always User=pi [Install] WantedBy=multi-user.target

然后执行:

sudo systemctl daemon-reload sudo systemctl enable oled-status.service sudo systemctl start oled-status.service

这样每次树莓派启动后,OLED 显示脚本会自动运行。如果脚本崩溃了,systemd 会自动重启它。

5. 常见问题与排查技巧实录

5.1 OLED 屏幕不亮或显示异常

这是最常见的问题,我遇到过好几次。排查思路按顺序来:

第一步,检查接线。I2C 的四根线有没有接反?VCC 是不是接了 3.3V?SDA 和 SCL 有没有接错?树莓派的 GPIO 引脚图网上到处都是,对照着检查一遍。

第二步,检查 I2C 是否启用。执行ls /dev/i2c*,如果只看到/dev/i2c-1,说明 I2C 已经启用。如果什么都没看到,说明 I2C 没启用,需要重新配置。

第三步,检查 I2C 地址。执行i2cdetect -y 1,看看能不能扫描到地址。如果显示0x3c,说明屏幕通信正常。如果显示--,说明屏幕没有响应,可能是接线问题或者屏幕坏了。

第四步,检查驱动库版本luma.oled的版本不同,API 可能有差异。如果你用的是旧版本,可能需要调整代码。建议用最新版本。

我踩过的一个坑:有些 OLED 屏幕的 I2C 地址是0x3d而不是0x3c,代码里写死了0x3c就显示不出来。遇到这种情况,把地址改成0x3d试试。

5.2 硬盘挂载失败或掉盘

USB 硬盘掉盘是树莓派 NAS 的常见问题。原因通常有三个:供电不足、USB 线质量差、硬盘休眠设置不当

供电不足是最常见的。2.5 寸硬盘虽然标称只需要 5V 0.5A,但启动瞬间电流可能超过 1A。如果树莓派的电源功率不够,或者 USB 线太细,就会导致硬盘掉盘。解决办法是换一个功率更大的电源,或者用带独立供电的 USB Hub。

USB 线质量差也会导致掉盘。有些便宜的 USB 3.0 线屏蔽不好,高速传输时误码率高,硬盘就会掉。换一根质量好的线试试。

硬盘休眠设置不当也会导致掉盘。如果休眠时间设得太短,硬盘频繁启停,反而容易出问题。建议把休眠时间设到 30 分钟以上,或者干脆关闭休眠。

5.3 SMB 共享无法访问

SMB 共享无法访问,排查起来比较繁琐。我整理了一个速查表:

问题现象可能原因解决方法
能看到共享文件夹但打不开共享文件夹权限不足检查共享文件夹的所属用户和权限
能打开但无法写入SMB 共享权限只读在 SMB 共享设置里改为读写
提示用户名或密码错误用户未加入用户组把用户加入users
网络邻居里看不到 NASSMB 服务未启用在服务里启用 SMB/CIFS
访问速度很慢网络协商问题检查网线是否千兆,SMB 协议版本设为 SMB3

还有一个隐藏问题:Windows 10/11 默认禁用了 SMB1 协议,而有些老设备只支持 SMB1。如果你用老设备访问 NAS,可能需要在 Windows 里启用 SMB1 支持。但 SMB1 有安全风险,不建议长期使用。

5.4 系统温度过高

树莓派 4B 在 NAS 负载下温度到 70 度左右是正常的,但如果超过 80 度,就会触发降频,性能下降。树莓派 5 温度更高,满载可以到 85 度。

解决办法:加散热片。树莓派 4B 加一个铝制散热片,温度可以降 10 度左右。树莓派 5 建议加一个带风扇的散热器,但如果你对噪音敏感,可以限制 CPU 频率。在/boot/firmware/config.txt里添加:

arm_freq=1500

这样可以把 CPU 频率限制在 1.5GHz,温度会明显下降,但性能也会有所损失。对于 NAS 来说,1.5GHz 的性能已经足够。

5.5 我的独家避坑经验

折腾树莓派 NAS 这几年,我总结了几条经验,都是踩坑踩出来的:

第一,SD 卡一定要用好的。我一开始用杂牌 SD 卡,跑了三个月就坏了,系统直接起不来。后来换成三星 EVO 或者闪迪 Extreme,稳定跑了一年多没问题。

第二,电源一定要用官方的。树莓派对电源很挑剔,电压不稳会导致各种奇怪的问题,比如 USB 掉盘、WiFi 断连、系统重启。官方电源虽然贵一点,但省心。

第三,重要数据一定要备份。树莓派 NAS 再稳定,也是 DIY 方案,可靠性比不上成品 NAS。重要数据至少备份两份,一份在 NAS 上,一份在另一块硬盘或者云端。

第四,不要频繁插拔 USB 硬盘。树莓派的 USB 接口没有防静电设计,频繁插拔容易损坏接口或者硬盘。如果要换硬盘,先关机再操作。

第五,OLED 屏幕的亮度不要设太高。OLED 屏幕长期高亮度显示会加速老化,出现烧屏现象。建议把亮度设到 50% 左右,或者设置成定时息屏。

6. 性能实测与优化建议

6.1 文件传输速度实测

我用树莓派 4B 加一块 2.5 寸 5400 转机械硬盘做了实测。Samba 共享下,从 Windows 电脑拷贝一个 5GB 的电影文件到 NAS,速度稳定在 95MB/s 到 105MB/s 之间,基本跑满了千兆网络。从 NAS 拷贝到电脑,速度也差不多。

如果用 NVMe 固态硬盘(树莓派 5),速度可以到 400MB/s 以上,但受限于千兆网口,实际网络传输速度还是 110MB/s 左右。所以如果你只是做文件共享,USB 3.0 接机械硬盘已经足够,没必要上 NVMe。

6.2 功耗与噪音实测

树莓派 4B 加 2.5 寸机械硬盘,空载功耗 5.2W,满载读写功耗 9.8W。树莓派 5 加 NVMe 固态硬盘,空载功耗 7.5W,满载功耗 13.2W。这个功耗水平,一年 365 天开机的电费大概在 30 到 60 元之间,非常省电。

噪音方面,2.5 寸机械硬盘有轻微的转动声,但放在桌面上基本听不到。NVMe 固态硬盘完全静音。树莓派本身没有风扇,也没有噪音。整体来说,这套方案比成品 NAS 安静很多。

6.3 进一步优化的方向

如果你想让这套 NAS 跑得更快更稳,可以考虑几个优化方向:

第一,用 Docker 跑额外服务。OpenMediaVault 支持 Docker,你可以在 NAS 上跑一些轻量级服务,比如 AdGuard Home 做网络广告过滤、Jellyfin 做媒体服务器、Nextcloud 做私有云盘。树莓派 4B 的 4GB 内存跑这些服务有点吃力,建议用 8GB 版本。

第二,配置自动备份。OpenMediaVault 有内置的 Rsync 功能,可以设置定时任务,把重要数据备份到另一块硬盘或者远程服务器。我一般设置每天凌晨 3 点自动备份,备份完成后发邮件通知。

第三,监控系统健康状态。除了 OLED 显示,你还可以用 OpenMediaVault 的监控功能,设置 CPU 温度、硬盘 SMART 状态的告警。如果硬盘出现坏道或者温度过高,系统会发邮件提醒你。

第四,考虑升级到 2.5G 网络。树莓派 5 支持通过 USB 3.0 转 2.5G 网卡,网络速度可以提升到 250MB/s 左右。但需要你的路由器和交换机也支持 2.5G,成本会高不少。对于大多数家用场景,千兆网络已经够用。

我个人在实际操作中的体会是,树莓派 NAS 这套方案最大的价值不在于性能有多强,而在于它让你完全掌控自己的数据。成品 NAS 虽然方便,但数据存在别人的系统里,总有一种不踏实的感觉。树莓派 NAS 虽然折腾,但每一块硬盘、每一个服务、每一行代码都是你自己配置的,出了问题也知道怎么修。这种掌控感,是成品 NAS 给不了的。

最后再分享一个小技巧:如果你觉得 OLED 屏幕显示的信息太多,可以做一个轮播效果,每隔几秒切换一屏,比如第一屏显示 CPU 和内存,第二屏显示硬盘和网络,第三屏显示时间和天气。这样屏幕利用率更高,看起来也更舒服。代码实现上,用一个列表存储不同的显示函数,主循环里轮流调用就行。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询