DIY NAS:打造高性价比家庭存储服务器

DIY NAS 的起因
原先使用的是一台威联通 TS-453Dmini 搭配山特 TG-BOX UPS,日常文件存储和照片备份都能胜任。但随着 Docker 容器数量增加,特别是切换到 Immich 进行图片管理后,CPU 性能明显捉襟见肘。再加上系统盘 SSD 突然故障,促使这次升级 NAS 设备。
这里要表扬下 JD,SSD 硬盘已经买了 3 年多,换货的时候因为缺货直接给退了。
升级有两上方向选择:
- 成品NAS:排除了群晖(系统优秀但硬件性价比低),几乎下单了新威联通,但考虑到系统使用疲劳且主要需求是跑Docker,最终放弃
- DIY NAS:自由度高、性价比突出,适合爱折腾的用户
“攒机”清单
部件 | 型号 | 价格 | 备注 |
---|---|---|---|
CPU + 主板 | R9 6900HX + AX7 ITX | 1242.00 | 淘宝 |
内存 | 金邦 16G-6000 | 210.00 | 闲鱼 |
机箱 | 乔思伯 N2 | 537.00 | 京东 |
电源 | TT 550W 钢影 | 127.00 | 闲鱼 |
系统盘 | 铠侠 1TB | 427.39 | 京东 |
数据盘 | 原有硬盘 | ||
CPU 散热器 | 利民 AXP90-X47 | 134.00 | 京东 |
系统盘散热器 | 利民 HR-09 | 40.00 | PDD |
机箱风扇 | 利民 TL-C12 PRO | 63.19 | PDD |
定制电源线 | MOD | 87.80 | 淘宝 |
SATA 数据线 * 4 | 63.20 | 淘宝 | |
SATA 转换头 * 2 | 14.70 | 淘宝 | |
风扇防护网 * 2 | 4.84 | 淘宝 | |
2.5 转 3.5 转接盒 | 30.80 | 淘宝 | |
合计 | 2981.92 |
比威联通 TS-466C 的 3061.00 要便宜一丢丢,实际配件清单比预期长,源于组装过程中遇到的各种"小意外"。
组装 NAS
组装没有太复杂的,主要记录下过程中遇到的突发“事故“ 和一些经验。
CPU 风扇
首次购买的淘宝支持 AM4 的风扇,但是因为这个 CPU 上有长条型保护盖无法安装。最终更换了多平台的散热器并拆掉背板后问题解决。

SATA 线
SATA 线两头都有点特别,一头左/右侧弯,另一头垂直弯,如下图:

左右弯是因为机箱和主板的 SATA 接口有冲突,结果弯头插上主板还是无法安装,最后加了两个转接头才成功安装。


另一头垂直弯是因为后面机箱散热的原因。
定制电源
一共定制了 4 条线:
- 24p 模组线 | 0.25m
- CPU 8p 模组线 | 0.25m
- 一拖一大4p 电源线 * 2 | 0.25m
其中比较特殊的是两条大 4p 电源线,因为乔思伯两个电源接口非常靠近,需要一正一反两条弯头电源线。

网上有专门针对 N2 的一拖二个大 4p 电源线,考虑到最多要支持 5 块硬盘,确保供电稳定,最后放弃了这个方案。

机箱风扇
原装12mm机箱风扇采用抽风设计,导致两块硬盘温度高达50+℃。升级方案:
- SATA线和电源线均使用弯头,为风扇腾出空间
- 更换为15mm风扇
- 采用镂空面积更大的防护网

最后合体



系统安装
系统选择
系统上也有几个选择:
TrueNAS Scale
这个是一个关注很久的系统,从一开始的 FreeNAS 到 TrueNAS Core 再到现在主推的 Scale,底层也从 FreeBSD 切换到 Debian,使用 zfs 文件系统,加上完善的管理界面是个不错的选择。最终因为资源占用以及相较于通过 WebUI 更喜欢直接命令行,所以放弃这个选项。
飞牛 FnOS
飞快崛起的一款国产免费 NAS 系统,也是基于 Debian 深度定制,非常轻量级对硬件要求很低,界面也很现代,移动端支持也不错。官网上看到在和其它硬件厂商也开始合作,其它成品 NAS 应该有压力。使用 Btrfs 文件系统,整个生态还在快速发展中。再持续观望观望吧。
Debian
最终选择的还是纯 Debian 系统,主要原因:
- 原生各种资源占用更低
- 没有深度定制,系统限制更少,操作确定性更高
- 大部分应用已经通过 Docker 容器运行和系统无关
- 之前已经买过一些付费软件,比如 Plex 这类,所以也不依赖系统自带组件
系统安装
省略部分简单内容,记录关键配置操作。
系统的磁盘情况,一共 5 块磁盘:
- 系统盘:M.2 NVMe 1T | ext4
- 数据盘:HDD 8T * 2 | ZFS mirror
- 数据扩展盘:SSD 1T | ext4
- 临时文件: HDD 4T | ext4
安装 Debian (略)
配置 Debian (略)
新建用户,复制证书,修改 ssh 端口,限制帐号登录,安装 docker,zsh 等等

配置 zfs
sudo apt update && sudo apt upgrade
# install ZFS packages
sudo apt install linux-headers-$(uname -r) linux-image-amd64 kmod -y
sudo apt-add-repository contrib
sudo apt install zfsutils-linux
# import zfsmode
sudo modprobe zfs
# 检查 model
lsmod | grep zfs
# 创建 zpool
sudo zpool create -o ashift=12 -O atime=off -o feature@lz4_compress=enabled <pool_name> mirror </dev/disk/by-id/xxx> </dev/disk/by-id/yyy>
# 检查 zpool 状态
sudo zpool status
# 创建 dataset 并优化性能
sudo zfs create <pool_name>/<dataset_name>
sudo zfs set atime=off <pool_name>/<dataset_name>
sudo zfs set dedup=off <pool_name>/<dataset_name>
# 对于文档较多的 dataset 可以启用压缩
sudo zfs set compression=lz4 <pool_name>/<dataset_name>
创建一个定时任务每周进行一次存储池的数据校验和修正, sudo crontab -e
增加以下内容
0 12 */7 * * zpool scrub <pool_name>
第一次使用 zfs 格式踩了一个坑,在创建 zpool 时,使用的是 /dev/sdx 这样格式的设备名,某一天重启后通过 sudo zpool status
发现有块磁盘离线了,开始以为硬盘损坏,通过 lsblk
检查,发现是设备名发生了变化,最后使用 id 或者 uuid 重建 zpool,具体步骤如下。
# 卸载一块硬盘
sudo zpool detach <poolname> </dev/sdx>
# 通过 id 或者 uuid 重新挂载硬盘
sudo zpool attach <poolname> </dev/disk/by-id/xxxx>
# 通过以下命令监控同步状态,等新硬盘处于 online 状态后重复上两步替换另外一块硬盘
sudo zpool status <poolname>
未经测试不知是否可以通过 sudo zpool replace <poolname> </dev/sdx> </dev/disk/by-id/xxxx>
一次性操作完成。
UPS 配置
通过 USB 接口连接 NAS 和 UPS,断电后在一定条件实现自动关机。开始以为比较复杂,实操下来还是比较简单,说明现在 Debian 对于外设支持已经做得比较好了。
sudo apt install apcupsd
# /etc/apcupsd/apcupsd.conf
UPSTYPE usb
#DEVICE /dev/ttyS0
DEVICE
# 关机策略主要修改以下两个参数
# 剩余电量的关机阈值,电池电量不足 20% 时关机
BATTERYLEVEL 20
# 剩余预估续航时间阈值,续航不足 5 分钟时关机
MINUTES 5
编辑完成后,执行
# 重启服务
sudo systemctl restart apcupsd.service
# 检查 UPS 状态
sudo apcaccess status
Docker 应用(另起一篇介绍)
经验总结
折腾是一件痛并快乐的事
乔思伯N2机箱质感出色,是优秀的NAS机箱选择:
优点:
- 紧凑设计,外观精致
- 5盘位布局合理
待改进:
- 理线空间紧张,部分接口需要转接
- 散热效果一般,仍有优化空间(室温 24℃ 个别硬盘温度达到 47℃)
- 硬盘安装方式简陋(橡胶+螺丝),建议参考成品NAS的硬盘架设计
- 红色的硬盘指标灯在外面看不到
其它问题:
- SATA 硬盘线有点偏硬,理线的时候只有暴力
- 主板仅 4 个 SATA 接口,扩展需转换卡
- 双网口(Intel I226-V)中仅一个正常工作
- 无统一操作界面,只有 SSH
DIY NAS的过程虽充满挑战,但最终获得的定制化体验和性能提升令人满意。对于有一定技术基础的用户,这无疑比成品NAS更具性价比也更有乐趣。