起因

由于我的 NAS 快要撑不住了,所以换了一台新的,顺便记录一下自己对选择 NAS 的考量,但愿能够帮助有同样困扰的朋友节省一些时间。快撑不住了的这台是 Synology 的 DS415+,还要从它的 CPU Intel Atom C2538 说起,这系列的 CPU 有个 BUG,触发的时候会导致无法开机,虽然可以通过在主板上焊一个电阻来防止或者挽救,不过我的这台 NAS 修复后依旧有点问题,具体表现为关机后需要清空 CMOS 才能开机。

品牌

  • Synology(群晖):尽管这台 Synology 出了问题,不过平心而论这其实是 Intel 的原因,而且同时期其他品牌产品也有相同的问题,所以我还是愿意再考虑一下 Synology 的。当然还有个无法回避的原因是从 Synology 迁移到其他品牌时无法无缝迁移,导致成本较高。
  • TrueNAS:另一方面,我对自己组装一台 NAS 也有足够的兴趣,而操作系统的首选便是 TrueNAS。实际上我最后的选择便是放弃了自己组装,转而买了一台 iXsystems 的 TrueNAS Mini XL+ 并加以升级。
    TrueNAS 和 FreeNAS 的区别:其实是一个东西,最开始企业版本的叫做 TrueNAS,后来官方把这两者合并了,然后统一使用 TrueNAS 这个名称。
  • 其他品牌:QNAP 之类的也是不错的选择,不过对于我来说它并不会比 Synology 有更多的优势 (当然也没劣势),所以也就不考虑了。
  • 另外提一下最好选择成熟的系统方案,在基础的系统上安装自己需要的服务不但麻烦又不具有实际上的优势。

性价比

  • 首先 Synology 的性价比肯定是极低的,其价格很大一部分是被系统所占用的,导致硬件往往很垃圾,当然想使用 Synology 的系统又不想额外花钱的可以选择黑群晖,不过毕竟不是正规渠道。
  • 而 TrueNAS 的社区更推崇自己组装,对于硬件的选择、性能以及兼容性之类的问题社区有着很详细的评测、指导和讨论,也就是说性价比很大程度上取决于自己购买的硬件。当然 iXsystems (维护 TrueNAS 的公司) 也有官方产品,不过价格门槛相对较高,性价比自然也偏低。

操作系统

大多数 NAS 都基于 Linux,Synology 也不例外 (其操作系统叫做 DSM),不过一看 FreeNAS(TrueNAS) 的名字就知道它是基于 FreeBSD 的。Linux 和 FreeBSD 两者本身在用作 NAS 时并没有明显的优劣之分,不过具体到 DSM 和 TrueNAS 就有差距了:

  • TrueNAS 对硬件的需求高很多。
  • 用户界面 DSM 更加平易近人一些,而 TrueNAS 则显得更专业一些。
  • DSM 的权限控制操作起来更加简单一些,需要对多个目录分别设置多个用户的权限时,DSM 的管理面板方便多了。而 TrueNAS 就相对麻烦,需要自己设置用户、用户组、目录所属的用户和用户组这些。 自 TrueNAS-12.0 之后,TrueNAS 可以直接对数据集/Dataset (相当于 btrfs 的子卷/subvolume) 设置 ACL 啦,爽到飞起~
  • DSM 中的部分附加功能是通过直接在系统上安装软件包实现的,当然也可以安装 Docker 来使用容器化的程序。而 TrueNAS 上所有的官方软件包都是运行在容器里的 (FreeBSD 上叫做 Jail) 。如果需要运行自己写的程序,都可以通过 Docker/Jail 来实现。另外 DSM 上的软件包的数量也多一些,不过在个人看来很多都是超出 NAS 职责的鸡肋程序。
  • 两者都支持虚拟化技术 (VM),不过由于 Synology 的硬件普遍太过垃圾,实际上往往不足以支撑虚拟机的运行。
  • 另外可能是为了节省成本,DSM 是安装在数据盘上的,直接导致了很多麻烦,例如:
    • 不支持全盘加密,当然目录级别的加密还是支持的,但是加密目录里的文件名/目录名最长不能超过 256 个字符。256 个字符虽然听起来足够,不过尴尬的是有些小姐姐的门牌号全名特别长。
    • 迁移数据到新的设备时很麻烦,往往需要复制数据到额外的硬盘 (假设换别的设备而不是 Synology) 。而这一点上 TrueNAS 就做的很好,系统和数据分开,换新设备的时候只要把硬盘插入新的设备中 (哪怕不是 TrueNAS,只要支持 ZFS),然后导入即可。
  • 总而言之 DSM 对于新手更友好一些,但是同时迁移成本也更高一些。

文件系统 (ZFS vs Btrfs)

  • 基于 FreeBSD 的系统自然是选择其招牌 ZFS,而基于 Linux 的系统建议选择 Btrfs,因为 ext4 的功能实在不足以胜任现代文件系统的要求。
  • 两者都支持透明压缩、自动修复静默数据损坏等功能。
  • 两者都可以使用快照,理论上 ZFS 的快照功能比 Btrfs 更轻量一些,不过日常使用中基本感受不出来区别。
  • ZFS 对内存容量的需求确实更高,但并没有传言的那么夸张。至于必须使用 ECC 内存的的说法其实并不确切,因为实际上不使用 ECC 内存的 ZFS 在稳定性上并不会弱于其它文件系统,但是话说回来,ZFS 会花费大量资源来确保数据的一致性,而这都建立在使用 ECC 内存的基础上,所以如果不使用 ECC 内存,那么可能不如直接选择一些对硬件资源要求更低的文件系统。

RAID

  • 首先是避免 RAID5/RADIZ1,常言道福无双至祸不单行,对于硬盘来说尤其如此,在重建 RAID 的过程中另一块硬盘同时出错的概率其实相当高,运气好的话仅仅是丢一些文件,运气不好整个 RAID 都难以被读取。
  • Synology 有自己家的 SHR RAID,如果数据盘的容量大小不一致,这种 RAID 有一定用途,不过都使用 NAS 了,还是避免拼凑硬盘这种做法。
  • RAID vs RAIDZ
    • RAIDZ 只能在使用 ZFS 时开启,并且是基于数据块而不是整块硬盘的。当然 ZFS 也可以使用普通 RAID,不过一般不会这么做。
    • Linux MD (Linux 软件 RAID) 不会处理静默数据损坏,不过可以依靠 Btrfs 来挽救。
    • 两者其实都可以解决 write hole 的问题,只是 RAIDZ 不需要额外的硬件。
    • RAIDZ 不支持动态扩容,不过也算不上严重的缺点,毕竟普通 RAID 扩容时也比较危险。
    • 掉盘后重建的速度两者各有优势,普通 RAID 更快一些,不过 RAIDZ 重建时不需要重建空的数据块。简而言之,硬盘空闲容量越多,重建时普通 RAID 相比 RAIDZ 花费的时间也越多。

一些关于 ZFS 额外考量

添加 SLOG 能否提升写入速度

  • 首先提一下 ZIL (ZFS Intent Log) 也就是 ZFS 的日志系统,在写入文件的同时会写入日志以应对突发状况 (例如断电和崩溃),日志比实际文件小很多,不过在默认情况下是存储在存储池中的,所以会占用写入性能。
  • SLOG (Separate Intent Log) 则是专门用来存放 ZIL 的设备,而把 ZIL 写入一个独立的设备可以保证日志的快速存储以及减轻存储数据的硬盘压力,所以我们选择 SLOG 设备的标准也很简单了:
    • 延迟低(所以选择 PCIe NVMe SSD 而不是 SATA SSD)
    • 速度快
    • 支持断电数据保护(Power Loss Data Protection),这个东西其实不仅仅包括了突然断电的状况,也包含了系统崩溃之类的情况,所以很难说使用 UPS 可以完全替代这个功能。
    • 容量不用太高:只需要能承载整个系统 5 秒内可以写入的最大容量即可。顺便提一下如果 SLOG 的容量太大,可以通过 Over-Provision (设置预留空间) 降低可用容量以换取性能提升。
    • 根据社区的测试其实就是有钱就上 Optane,没钱可以用 Samsung 之类的凑合一下,至于垃圾固态真没必要。当然实际上大多数用户根本不用上 SLOG,具体请看下面。
  • 在我们理解了 ZIL 和 SLOG 的作用之后就会发现他们的主要作用是提高稳定性,而并不是我们通常所想的写入缓存,再加上 ZIL 仅仅影响同步写入,而我们日常生活中更多进行的是异步写入,也就是说对于一般用户添加 SLOG 对写入速度的提升其实是非常局限的

添加 L2ARC 能否提升读取速度

  • ZFS 使用的一级缓存总是内存,最常用的文件会被 ZFS 放在一级缓存也就是内存中。L2ARC (Level 2 ARC) 即是指二级缓存,通常比比一级缓存(内存)容量更大但是速度更慢,当然肯定是要比硬盘快的,不然就真没必要了。
  • 按照这样理解我们很容易得出内存较小的情况可以添加 L2ARC,而内存较大情况可能效果不明显的结论。不幸的是这个结论是有问题的,事实上 L2ARC 工作时需要将映射表等大量信息存储在内存中,也就是说 L2ARC 的存在会占用更多内存,而这些被占用的内存本来是可以用来缓存文件的。所以实际上内存太小的机器反而不推荐添加 L2ARC,而内存足够大并且难以升级的机器才是适合添加 L2ARC 的。
  • 另外如果访问的文件比较固定,那么 ARC 的命中率就会比较高,这时候 L2ARC 的作用也不明显。
  • 按照 ixsystems 在 TrueNAS 11.3 的官方文档中的说法:L2ARC 不应当用于低于 32GB 内存的机器上,而 L2ARC 的容量应当不超过内存容量的十倍
  • 综上所述,个人更推荐直接往死里堆内存,堆到极限再考虑 L2ARC。

各个级别的 RAIDZ 的区别

  • Mirror: 就是两个盘镜像,这个严格来讲跟 RAIDZ 没什么关系。
  • RAIDZX: X 个容错盘,需要至少 X+2 枚硬盘组成。可能有人不服气了,我4块硬盘凭什么不能组 RAIDZ3? 当然可以,只是这样其实不就是4个 mirror 么。
  • 就像前文中提到过的,ZFS 不支持动态扩容,所以一开始就要决定好要使用什么级别的 RAIDZ,否则后期更换会很麻烦。
  • 不同数量的硬盘使用不同级别的 RAIDZ 有性能差距,不过个人使用的情况一般是读取大于写入的,所以问题不是很大。
  • 由于上述原因建议把 NAS 所有盘位一开始就插满,例如直接组一个总计8枚硬盘RAIDZ2,基本是要好于两组4枚硬盘的RAIDZ1,因为前者可以允许任意两块硬盘出错,而后者只能允许每组中分别有一块硬盘出错。

硬件选择

  • 如果主板和处理器支持,资金充裕就使用 ECC 内存吧,不过个人使用其实也不用强求,只是千万别买洋垃圾就是了。
  • 主板的 SATA 接口尽量多,最好支持 IPMI,可以很方便的进行管理。多余的 PCIe 插槽可以用来装网卡、SAS 扩展卡或者 PCIe SSD。如果需要 10G 接口,那么可以挑一个集成了相应模块的主板。
  • CPU 对于个人使用而言,i3 或者 Atom 就足以满足日常需求了,这两个系列的侧重点不同,一般而言同级别的 i3 和 Atom 相比较而言:
    • i3 核心频率更高些,处理器功能更多些,同时有集成显卡,更容易买到。
    • Atom 则在核心数目上有优势,同时持支更大的内存容量,功耗也更低。
    • 两者都有支持 ECC 内存的型号。
    • Atom 虽然没有集成显卡,但是大多数集成 Atom 处理器的主板都自带显卡模块(当然是渣画质的那种),并且功耗极低。同时这类主板的 CPU 大多为被动散热,使用时需要保证风道可以经过散热鳍片,或者自己往鳍片上装一个风扇。
  • 对于功耗问题,尽量选择低功耗的硬件吧,不是为了省那点电费,主要是功耗高了散热压力也更大,从而会导致设备更吵闹,当然如果是直接把设备扔到地下室之类的那就无所谓了。不过一般情况下没有必要专门选择低功耗版 CPU,因为多数情况下“低功耗版”仅仅是对峰值功耗而言的,而对于待机时的功耗往往没有明显差距。
  • 有条件的建议给 NAS 配上 UPS 供电。
  • 硬盘:
    • 建议买 NAS 专用硬盘,尽管有些厂家其实是营销成分更多一些,但是大多数 NAS 专用硬盘确实是对多硬盘的共振和温度问题进行了优化的。
    • 转数选择 5400RPM 即可,7200RPM 功耗更高而且更吵,对于 NAS 而言性能提升也不是那么明显。
    • 氦气填充的硬盘是否比空气填充的稳定性高很多这个问题一直有争议,不过氦气填充的硬盘确实更安静。
    • 一定不要选 SMR/叠瓦盘,这类硬盘完全不适合 RAID。
  • 10G 网卡
    • 这个根据个人需求来吧,不过 10G 网卡使用中有不少坑就是了,当然随着普及程度的提升体验会越来越丝滑。
    • 接口太多倒没必要,主要是 10G 交换机还是太贵,两个接口一个接主力机(同样 10G 网卡),另一个接交换机就足够了。
    • 仿造 Intel 的产品(例如10gtek),好多都是有散热问题的,在有暴力风扇的支撑下还行,放到空间狭小的 NAS 中就撑不住了。
    • 另外例如 Asus 之类的驱动只支持部分操作系统,买的时候也需要注意一下。
    • 至于接口类型,SFP+ 接口网卡功耗低、价格低,SFP+ 线的延迟也更低不过价格比 10Gbase-T 贵,而 10Gbase-T(RJ45) 与多数人平常用的接口兼容。
  • 电源不要太省,功率买大了也不会更耗电,但是买小了那就真的是灾难了,至于规格方面 80+ Gold 足以,白金、钛金之类的倒是完全没必要。还有现在的电源大多是模块化的,买的时候要注意是否有足够的 SATA 供电口,不然到时候一个 SATA 供电口给一堆硬盘供电还是很容易出问题的。
  • 首先尽量远离硬件 RAID 阵列卡,并不是因为这个技术本身太过糟糕,而是大部分阵列卡都很烂,而且很容易碰到驱动问题。