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

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

DIY NAS 的起因

原先使用的是一台威联通 TS-453Dmini 搭配山特 TG-BOX UPS,日常文件存储和照片备份都能胜任。但随着 Docker 容器数量增加,特别是切换到 Immich 进行图片管理后,CPU 性能明显捉襟见肘。再加上系统盘 SSD 突然故障,促使这次升级 NAS 设备。
这里要表扬下 JD,SSD 硬盘已经买了 3 年多,换货的时候因为缺货直接给退了。

升级有两上方向选择:

  1. 成品NAS:排除了群晖(系统优秀但硬件性价比低),几乎下单了新威联通,但考虑到系统使用疲劳且主要需求是跑Docker,最终放弃
  2. 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 上有长条型保护盖无法安装。最终更换了多平台的散热器并拆掉背板后问题解决。

motherboard

SATA 线

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

sata wire


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

adapter
motherboard with adapter

另一头垂直弯是因为后面机箱散热的原因。

定制电源

一共定制了 4 条线:

  • 24p 模组线 | 0.25m
  • CPU 8p 模组线 | 0.25m
  • 一拖一大4p 电源线 * 2 | 0.25m

其中比较特殊的是两条大 4p 电源线,因为乔思伯两个电源接口非常靠近,需要一正一反两条弯头电源线。

4p power

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

4p 1to2

机箱风扇

原装12mm机箱风扇采用抽风设计,导致两块硬盘温度高达50+℃。升级方案:

  • SATA线和电源线均使用弯头,为风扇腾出空间
  • 更换为15mm风扇
  • 采用镂空面积更大的防护网
15mm fan

最后合体

motherboard with CPU fan
top view
back view

系统安装

系统选择

系统上也有几个选择:

TrueNAS Scale

这个是一个关注很久的系统,从一开始的 FreeNAS 到 TrueNAS Core 再到现在主推的 Scale,底层也从 FreeBSD 切换到 Debian,使用 zfs 文件系统,加上完善的管理界面是个不错的选择。最终因为资源占用以及相较于通过 WebUI 更喜欢直接命令行,所以放弃这个选项。

飞牛 FnOS

飞快崛起的一款国产免费 NAS 系统,也是基于 Debian 深度定制,非常轻量级对硬件要求很低,界面也很现代,移动端支持也不错。官网上看到在和其它硬件厂商也开始合作,其它成品 NAS 应该有压力。使用 Btrfs 文件系统,整个生态还在快速发展中。再持续观望观望吧。

Debian

最终选择的还是纯 Debian 系统,主要原因:

  1. 原生各种资源占用更低
  2. 没有深度定制,系统限制更少,操作确定性更高
  3. 大部分应用已经通过 Docker 容器运行和系统无关
  4. 之前已经买过一些付费软件,比如 Plex 这类,所以也不依赖系统自带组件

系统安装

省略部分简单内容,记录关键配置操作。
系统的磁盘情况,一共 5 块磁盘:

  • 系统盘:M.2 NVMe 1T | ext4
  • 数据盘:HDD 8T * 2 | ZFS mirror
  • 数据扩展盘:SSD 1T | ext4
  • 临时文件: HDD 4T | ext4

安装 Debian (略)

配置 Debian (略)

新建用户,复制证书,修改 ssh 端口,限制帐号登录,安装 docker,zsh 等等

system information

配置 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更具性价比也更有乐趣。