某一天,当你 { 不想把数据放在云上,想有一个 home lab } 时,你可能就会进入一个深坑。

这里记录了一些过去几年以来搭建 NAS 过程中发生的事情。但是在继续之前还是想说一句,在捡垃圾或者买新品之前认真考虑一下,或许手头的东西已经能够实现自己的需求了,又或许自己根本没有想象中的需求。总之就是千万别上头!

在开头先来展示一下我遇到的最大的一个坑,你能看出下面这根线有什么问题吗?

什么是 NAS?

NAS 的全称是 Network-Attached Storage。从功能上来看只要能通过网络提供文件访问服务的任何设备都可以是一台 NAS。你的路由器如果支持插入 USB 设备并且通过 SMB 等协议在局域网共享文件,那你的路由器完全就可以是 NAS。当然,一部手机,一个树莓派,一台笔记本电脑,一台台式机,甚至是机架式服务器都可以被当作 NAS 来使用。当然,也有一些专门的厂家会做成品 NAS,例如可能大家都听说过的群晖,威联通等。

硬件的选择

在硬件层面,可能可以从如下几个方面来考虑选择使用什么样的设备。

首先是性能的强弱。例如只是需要简单的文件共享,那么几乎任何硬件都可以满足这样的需求;但是如果想要自建影音服务器,那么可能就需要 CPU 足够强大的算力,或者有一个足够强大的显卡(比如 Intel 自带的 UHD 系列)进行转码;再比如如果需要使用类似 zfs 这样的文件系统,或者需要跑一大堆 docker 和虚拟机,那可能就需要考虑有一定大小的内存以及处理器性能。

然后还有可扩展性。通常大容量的 NAS 都会使用 3.5 寸机械硬盘,一台机器能够有多少个 3.5 寸盘位是购买时需要考虑的。除此之外,如果资金充足可能还会考虑全部使用 SSD 的 NAS,或者使用 SSD 作为缓存,此时使用何种接口的固态硬盘以及机器能够插入多少这样的盘也是需要考虑的。例如前一段时间有一批便宜的 U.2 盘,正常机器是没有这样的接口的,需要从 PCIe 或者 M.2 接口转接,可能还需要额外的供电。

如果要在局域网快速地访问 NAS 上的文件,那拥有一个足够高速的网络就是必要的了。现在常见机器的电口速率都是 1Gbps 或者 2.5Gbps,如果期望更高速的互联,就需要考虑带有 10Gbps 甚至更高速率网口的设备。

除此之外,还有可能会关心的是尽量避免数据的损坏。例如用 UPS 来处理意外的掉电,让 NAS 有充足的时间关机;上 ECC 内存;用软/硬 RAID 等。

对于部分群体来说,体积的大小也是一个重要的部分。可以想象,用路由器和树莓派这样的设备,并且没有太多硬盘的话,NAS 的占地面积是很小的,但是这样的设备可能不会有太高的性能也不能插太多的硬盘(当然你可以用 USB 外接一个大的硬盘盒)。成品 NAS 通常是平衡稍微好一些的,但是价格会比较贵,特别是某些厂家,内存和网口都和黄金一样。如果接受比成品 NAS 稍微大一些体积的机器,现在也有很多淘宝商家有做 NAS 机箱,可以直接买来自己组装一台。如果不太在意体积,那可以直接买带有比较多硬盘位的塔式机箱直接组装一台 PC。

最后,如果想要把 NAS 放在距离自己比较近的地方,噪音是一个非常需要注意的点。3.5 寸硬盘的随机读写有非常吵的炒豆子声音(bilibili 有原声大碟,可以前往收听),如果是 7200 转的企业盘,那硬盘和机箱共振的低频噪音在环境比较安静的时候也是极其烦人的。

XPS 和 NUC

在最开始,我有一个移动硬盘和一台 Dell 的 XPS,并且想用来挂 PT 和用 SMB 在局域网共享文件,于是便简单地直接把这个盘插到 XPS 上。但是当时移动硬盘在硬盘侧的接口其实是比较脆弱和糟糕的,在插拔多次后会变得一碰就掉盘,稳定性特别差。此外,笔记本电脑在桌面的占地面积其实也很大了,而且我平常也要用它,不适合 7x24 小时放在那里不动。

在单纯只有一个移动硬盘并且需要体积比较小的机器的情况下,Intel NUC(比如豆子峡谷,或任何的迷你主机)就是一个不错的选项。

正经的常用的硬盘接口是 SATA 口,NUC 一般会提供一个 SATA 口的 2.5 寸硬盘位。一部分移动硬盘实际上是一个这样的硬盘外面套了一层硬盘盒得到的。例如下图里我的硬盘把外壳拆掉之后可以发现就是个标准的 2.5 寸硬盘加上一个可以移除的 SATA 转 USB 的设备,所以可以直接无缝插入 NUC 的那个盘位。

WARNING:如果你要拆你自己的移动硬盘请确认是否是和我的一样是 SATA 转 USB 的设计,有部分厂家的移动硬盘是直接只有 Type-C 口这样的设计。这个拆卸操作大概率是不可逆的,会弄坏你的硬盘盒外壳。还有一部分大容量的移动硬盘会比较厚,需要确认一下。

通过硬盘柜外接更多的硬盘

如果想要在 NUC 上接入更多的硬盘,或者接入 3.5 寸硬盘,那么就需要额外的硬盘柜了。这类硬盘柜基本上是提供数个 SATA 接口的盘位,通过 USB 连接到主机的,一般只有 500 MB/s 的速率,对于机械硬盘来说勉强还是够用的。因为 3.5 寸盘需要的供电比较大(一个企业盘的启动功耗可以接近 30W),并且需要 12V 供电,这类硬盘柜都会有自己的独立供电。但是厂家提供的供电是否足够稳定和充足是一个问题,特别是在使用企业级硬盘的时候。

除了供电方面的问题,散热也是一个大问题。上图是两个 5400 转的 NAS 盘,它们的发热情况勉强还是可以接受的。一般按照下图这样用一个小风扇对着吹吹还是可以把温度控制在 30-40 度的。但是如果使用的是 7200 转的企业盘,这样散热风会往两边跑可能就不太够了,硬盘工作温度太高也可能会影响它的寿命。此外,这样竖插的方式可以感受到其实是不太稳的。

淘宝会有一些商家在卖下图这样的硬盘笼,并且背后可以安装一个风扇。硬盘的固定方式看起来也稍微正常一点,再在淘宝找找对应的延长线,可以构造出下面这样的方案。至少散热和硬盘的固定是解决了。但是供电还可能有些潜在的问题,我这样做的时候坏过两个盘。

除了上面说的这个不带风扇的硬盘柜(它便宜)以外,一些公司也会出售看起来长得像成品 NAS 一样的硬盘柜。例如下图这样的。这类柜子贵一点,但是用起来也还不错。

NAS 机箱

XPS 或者 NUC 的问题之一就是拓展性不是特别好,例如 NUC 内置的硬盘接口一般只有一个 SATA 和一至两个 M.2,如果需要接入更多的硬盘一种方法就是用 USB 硬盘盒。还有一种方案是用 M.2 转出一条 PCIe,或者通过它带的雷电加上一个硬盘盒转到 NVMe 再转到 PCIe,然后再插一些 PCIe 转 SATA 的卡。但是这样的操作其实也有些麻烦了,并且设备的占地面积也有些大了,而且硬盘还是需要独立的电源,不如直接找个机箱组装一个正常的主机,或者用 NAS 机箱,组一台稍微比商业 NAS 大一些(但是性能高不少)的机器。

可能最经典的 NAS 机箱是矿渣蜗牛星际1,特点是便宜。另外还有一些个人做的机箱,这就稍微贵一些了,比如老鸽的宝藏盒2,Tank 的机箱3(他们家还有单独的外接硬盘笼),还有半人马座机箱4。它们的特点就是贵,但是别的毛病其实感觉还好。除此之外还有些大厂似乎也开始做这样的机箱了,比如银欣和乔思伯。

购买这些机箱的时候一般要看看评测,比如硬盘的散热怎么样,能塞下多大尺寸的主板(ITX,MATX 还是 ATX),可以插的 PCIe 设备是半高还是全高的以及可以使用什么样的电源。如果只能使用 1U 或者 SFX 电源,那在电源上要花的钱可能就比能使用 ATX 电源的机箱多上不少。

在折腾了好几个不同的 NAS 机箱之后,我最终收敛到了一个普通的塔式机箱(后面会解释这部分内容,因为我的 NAS 和日用主机合并了)。

CPU、主板和内存

如果只是正常的并不需要太高性能的 NAS 需求的话,估计买一些前几代的 Intel 或者 AMD 的家用中低端处理器就可以了。如果需要转码的话可以考虑 Intel 的带核显的 CPU。我之前尝试闲鱼捡过一些略微企业级的垃圾,比如超微的 X11SCA-F,这是块 ATX 主板,现在闲鱼价格是小几百,可以支持 8 或 9 代 Intel CPU,或者那个时间段的一些 Xeon。为什么考虑它呢?主要是想要个 IPMI,方便人不在并且把机器弄挂的时候远程管理。它还可以支持 ECC UDIMM(但是只能搭配 Xeon 或者 i3-8100),SATA 接口也足够充足,看起确实挺好的。其实还有一些更常见一点的服务器淘汰品用的是 RDIMM,相比于 UDIMM 来说也便宜很多。

如果期望高频一点的 CPU 但还需要 ECC 的话是可以考虑 AMD 的。Intel 在 12 代以前消费级处理器是基本不给 ECC 支持的,12 代以后虽然有了,但是主板需要用 W 系列的芯片组(比如 W680),价格会贵非常多。AMD 倒是一直都能支持,主板也不需要特殊的芯片组,只要买的时候看看厂家写的是否支持就行了。当然,如果还需要 IPMI 就麻烦很多了。

不过用了很长一段时间之后感觉确实也不需要太企业级的功能了,把 NAS 和正常的工作主机拆成两个还很占地方,所以最终就合并成了一台机器。找了个正常的 ATX 主板和比较新消费级 CPU,按照下面一节的方式接入硬盘。具体的使用方式是裸机上跑 Linux 作为 NAS 的系统,然后套一个 Windows 虚拟机并且直通显卡作为日常的使用环境。或许之后会单独介绍一下这部分的内容,也可以参考付主席的指南5

通过 HBA 卡接入更多的硬盘

一般主板会自带一些 SATA 口(例如 ITX 可能会带 4 个,MATX 和 ATX 可能会带有 6-8 个),如果觉得这些口不够用,那可能就需要额外的扩展卡来引出更多的 SATA 口。还有一种情况是硬盘属于 SAS 接口,那也需要 SAS 卡了。这些卡有分两种,一种是只有接入硬盘的功能,还有一种是自带硬件 RAID(这些卡也比较贵)。现代处理器其实已经不错了,可以考虑使用软 RAID。

比较常用的可以捡到的垃圾是 LSI 9207-8i/8e/4i4e6,这里 i 表示内接(也就是如下图接口开在机箱内部),e 表示外接(类似显卡的 HDMI 接口开在机箱外部)。内接的接口是 SFF-8087,它一个口可以接四个 SATA/SAS,如果直接接入硬盘的话应该要买一个 SFF-8087 转 4x SATA 的线。此外某些 NAS 机箱的背板也会提供直接的 SFF-8087 或者 SFF-8643 接口,也就可以直接购买相应的线。内接的这些线应该最长只能到一米,外接的话是 SFF-8088 或者 SFF-8644(这个接口对应的卡是 LSI 9300-8e,贵很多),长度可以长一些,应该是能到两米,当然也有可以直接转出来 4x SATA 的线。

正常用的话 LSI 9207 系列就够了,一般稍微有点风吹一吹就还可以,也不算太热。官方文档写的功耗一般是 9.8W6,如果想要再省点电,可以考虑 9211 系列,功耗是 8.04W7,损失只有从 PCIe 3.0 降级到了 PCIe 2.0(但都是八条通道)。一般主板芯片组扩展出来的那个 x16 外观的接口实际只有 4 个通道,PCIe 2.0 x4 的速度大约可以有 2GB/s,所以如果是 HDD 的话也没什么问题。如果主板好一些有 PCIe 拆分,或者直连 CPU 的那个通道没有什么设备占用的话,能接上 PCIe 2.0 x8 那 8 个固态应该也能跑满。

最后,除了上面说的 HBA 卡以外,还有一些 PCIe 转 SATA 的扩展卡也可以考虑,甚至还有一些从 M.2 转出 5 个 SATA 的设备。

我最终用的是 LSI 9207-8e 然后外接一个硬盘笼(上面也提到过了,其实就是把硬盘盒加上延长线的方案改成了 HBA 卡加上电源拉出来一些供电连硬盘,不过这样放在外面灰会稍微有点大)。放在外面的主要原因是买机箱的时候没注意 3.5 寸盘位的数量,最后发现有些不够而且自带的盘位散热似乎也不是特别好。外接的硬盘供电可能稍微有些麻烦,一种是从机箱电源拉出来一些线,另一种是随便找个电源,然后短接那个 24pin 其中两个开机引脚就可以了,这个操作淘宝有些方便的接口可以帮你完成。最后大概就是下面这样的感觉。

踩坑记录

这里有一些踩过的坑,希望大家不会遇到它们,也不会烧掉自己的硬盘和主板。

模组线的混用

如果是自己装机器,特别是用小机箱很可能会用到非原厂的定制线。虽然接入主板硬盘这样设备的那端接口是具有统一标准的,但是在电源侧的接口似乎并没有统一的规范。比如不同电源同一个形状的接口的几个引脚的定义可能会不一样。同样都是 2x2 方形的一个口,12V 和 5V 对应的引脚可以是颠倒的!所以模组线是不应该在不同型号之间电源之间互用的(换电源的时候千万别偷懒不拆线)。

如果用错了线,12V 和 5V 接反了那么硬盘是会烧的,主板芯片组也可以顺带烧掉,万一弄不好的话 CPU 也可以坏😦。

最近还有一些更糟糕的新闻,同一个厂家同一个型号的电源引脚规范还可以不一样,有人送修换新之后用旧的线把硬盘烧了8 9

“定制”电源线

那针对电源定制的模组线有没有问题呢?回到文章最开头的图,下面这个接口叫做大 4D 接口(我猜这个名字应该和它的形状有些关系,是个 D 形),现在一般可以用来直接接入硬盘笼的背板,或者用来转接一些 SATA 的供电接口的。它提供 5V 和 12V 的供电。

这个接口并不是对称的,中间两个引脚接地,旁边两个分别是 5V 和 12V。它的的四个引脚的意义我在下面的图标出来了。你可以发现,这根线的这两个大 4D 口无论怎样一定有一个是错的!所以用了这根线观测到的现象就是,多接几个硬盘用到了这两根中错误的那根线的时候就会闻到一阵糊味。

SATA 线

如果说前面两个电源线相关的问题会让你的硬盘炸掉的话,那 SATA 线出问题就会让你用着很烦。我用过几根质量比较差的 SATA 线,在它们弯折角度比较大的时候会经常出现问题导致你的盘报告 UDMA CRC Error。有些机箱的内部空间会比较紧凑,很容易就一不小心把线 90° 弯折了,所以安装的时候最好注意一下。

NAS 系统和一些软件

如果想要省事,那可以用开源的 NAS 系统比如 TrueNAS 或者考虑用 unRAID。稍微会用 Linux 的话直接在上面开几个 docker 也是可以,文件系统就用 zfs(记得定期做快照和备份)。

实际上常用的软件可能没几个。如果需要一个网盘的话,那么 Seafile 和 Nextcloud 都是不错的选择。Nextcloud 的功能相比 Seafile 会稍微多一些,比如有相册和一系列复杂的 Apps。它的手机端可以自动上传照片、视频等内容,还是挺方便的。

如果想要自建媒体服务器,可以考虑 Emby 或 Jellyfin。后者应该是前者某个时间 fork 出来的开源的版本,Emby 会提供一些更加专业的功能,但是这部分功能需要收费。Emby 的 Android 和 Windows 上的应用都可以不用转码直接播放 HEVC 和 HDR 内容,如果网络带宽够大的话还是十分方便的。Jellyfin 的话 HDR 内容可能不一定可以直接播放,需要转码,这部分可以看 Harry 的博客10

想要自动追剧的话有 Sonarr / Radarr / Prowlarr / qBittorrent 四个软件可以互相联动,最终可以把下载的内容自动导入 Emby / Jellyfin 媒体库。

上面两部分应该是 NAS 最常见的需求了,少见一点的可能是自建的 Overleaf 和 GitLab 服务。GitLab 用起来其实没太大问题,但是 Overleaf Community 版本似乎暂时还没有 git integration11,用起来不一定特别方便。

参考资料