..

使用 OrangePi5 制作一个简易 NAS

硬件篇

之前的 NAS 一直和计算服务放在一台机器上面。随着 SSD 价格走低,于是把服务的存储全部升级成了 SSD。服务器终于没有了炒豆子的硬盘声。

对于一些不重要的数据就暂时利用手边的2块闲置的笔记本机械硬盘和一个无头的 thinkpad 笔记本暂时对付一下。

很快这两块硬盘就被塞满了。于是不得不找新的方案。于是想起来一直闲置的 OrangePi5 开发板, 还有几块因为有坏块而退役的硬盘。

供电的话本来考虑使用 dc-atx 直插电源,但是考虑到后续可能会添置更多硬盘,这个直插电源瓦数不大,担心不够用。索性直接使用 sfx 电源。

Pi5 板子用的是 usb-c 5V 供电。记得官方要求提供 4A 的电源,之前有测试过低负载情况下 2A 电源应该就够了。因为 sfx 电源是 350w 的本身有富裕,就直接从 sfx 电源的 24pin 插头上取电了。翻出了一个之前不知道哪个主板送的电源 24pin 测试母座。自带短接了 pin16 和 pin17 作为开机用。简单做了一个 usb-c 电源线,从 pin23(5v 正极),pin24(接地) 取电。

SATA 接口方面另外购买了一个佳翼 jmb585 的 M.2 的转接卡,扩展出 5 个 SATA 接口提供使用。Pi5 的板子虽然有 M.2 接口,但是长度只支持到 2240,对于 2280 的转接卡只能正常插入,但是没有地方固定。这个时候就只有拿出吃灰好久的 3D 打印机设计一个简单的底座来固定转接卡。一开始的初衷是想要直接设计一个外壳,然后加上背板来支持热插拔的。但这个 3D 打印机本来也就是 diy 的,精度堪忧,而且还有很多问题,暂时打印不了太大的模型。也只能临时过渡一下了。

大概测试了一下,没有什么问题。

软件篇

操作系统:armbian
文件系统:btrfs

如果没有特殊情况我一般是不会对硬盘分区的,不管是 MBR 分区还是 GPT 分区。通常会采用下面两种方案:

btrfs 接管 device
btrfs 虽然是文件系统,但是具有管理设备的能力。可以在线扩展或者缩减分区大小,甚至在线进行设备替换。btrfs 的缺点也很明显,就是整体性能会比 ext4 这类传统文件系统慢一些。不过对于它提供大量新特性,损失一点性能也是可以接受的。
lvm 接管 device
lvm 也可以在线添加或者删除设备,但都是 block 级别的管理。一般来说我会用来对 qemu 或者 iscsi 提供块设备的访问。

由于选择 btrfs 作为根文件系统,并且打算把根系统放在机械硬盘上面,所以 armbian 默认的引导方式就不可用了。

引导方案

从 TF 卡启动
普通的启动方式,整个系统都完整的放到 TF 卡上面。缺点就是 TF 卡速度普遍较慢。而且 TF 容易损坏。手里已经莫名其妙坏了好几张 TF 卡了。
从 MTD 启动 u-boot, 然后启动 ipxe 无盘引导
这次首选的方案。但是测试过程中才发现 Pi5 提供的 u-boot 并没有驱动网卡,所以没有办法进行网络引导。后续有尝试将网卡的信息写入 dts 中。但是加载驱动过程中会报错,依旧没有办法驱动成功。
从 MTD 启动 u-boot,然后启动 grub
和上面的方案类似,只是把 grub 放入 MTD 块中,Pi5 上面提供了一个 16M 的空间,只使用了大概 4M 的样子。再放一个 grub 应该也是够的。但是在调用 bootefi 尝试启动 grub 的时候,直接 crash 了。
从 TF 卡仅启动 kernel
最后只能妥协暂时使用这个方案,保留 TF 卡,但是只是在引导的时候加载 boot 分区里面的 kernel。完整的系统放在机械硬盘里面。引导完整之后 TF 卡其实就不需要使用了。直接弹出都是可以的。具体方法

其它

最后的样子,仍在了客厅的角落。本来是全裸放在这个位置跑了好几天,但是突然想要好像还有一个闲置的乔思伯 N1 机箱,就先拿过来用一用。这个位置高度有限,所以就没装机箱的外壳,也方便硬盘热插拔。主要也是想要利用这个热插拔背板,在需要冷备的时候,可以直接把硬盘插上去,并不影响 NAS 的正常运行。备份完成之后冷备硬盘直接取下来收纳。

测试过程中大概看了一下功耗情况,使用一块 8T 硬盘的情况下,使用 dc-atx 电源负载功耗在 10w 左右波动。后来换成 sfx 电源,因为电源本身有一枚风扇,所以整机功耗可能略高一些。