DIY一个8盘位全闪NAS

接上篇LSI RAID卡芯片和各个OEM对应卡型号列表里说的后续DIY NAS的想法,经过快3个月的时间,终于来更新整个DIY过程了,总结起来在整个过程中,收获的主要还是折腾的乐趣,要说折腾的尽头是白群晖,随着时间的推移,个人还是比较认同的,不过不得不说白群晖确实太贵了,都说群晖是买软件送硬件,但是这软件也太贵了点。

需求描述和分析

说起来,为啥会有个DIY NAS的需求呢?一个重要的原因是家里的小宝贝出生了,不知不觉也拍了好多的照片和视频,还是希望能更长久的把这些记忆保留下来。另外呢,之前更新自己的电脑,淘汰下来一套i5 6500 CPU加16G内存以及主板的准系统,买个机箱还有电源就直接可以用了,本着废物利用的原则,做个NAS也不亏,而且还多了很多可玩性。

其实单纯从保存数据来说,将数据存放到任何一个公有云的对象存储上,是个最终极的方案,因为目前各个厂商提供的对象存储数据持久性SLA都达到了11或者12个9(99.999999999%-99.9999999999%),这基本意味着几乎不存在数据丢失的可能性了。但是确实这个方案也是最贵的,毕竟每TB存储每月都需要消耗对应的存储费用,随着时间增长,即使是最便宜的冷归档类型,也依然是个不小的消耗。

那到底需要多少的存储容量呢?针对我个人而言,目前可预见的容量,应该不会超过10T,当前1-2年内所需求的容量更小,大概只需要1到2T的样子。

针对这个容量,其实已经可以考虑全SSD的存储方案了,其实相比于使用HDD的方案,纯SSD的NAS有以下几个好处:首先是噪音角度,相比HDD运行时的“炒豆子”声来说,SSD 0噪音,这可以直接解决夜间安静环境下HDD低频噪音对睡眠质量的影响;其次是稳定性和数据安全角度,根据我们公司数据中心有比较大规模的SSD和HDD的使用经验,同时参考backblaze提供的统计数据,可以看出SSD的稳定性远超过HDD,这带来了两个优势,一个是相比HDD,SSD损坏的概率低,这可以减少存储池修复的可能性,另外因为读写速度上SSD快很多,在坏盘的情况下,SSD也可以做到更坏的修复速度,从而可以提供更好的数据持久性。

当然SSD依然还是有缺点的,很明显当前SSD比HDD依然贵很多,以当前的价格来说,SSD成本大约0.4元/GB(大多数1T SATA SSD),HDD大概只有0.12元/GB(西数HC550 16T)。但是对于我目前的容量需求来说,使用SSD的成本相比HDD没有差距太大,多花的那部分成本,对于0噪音来说是相当值得的。

除了磁盘的选型,还有一些其他的需求,诸如盘位数量大于等于4,硬盘需要支持热拔插,存储池可以动态扩容,移动端、桌面端数据自动同步等等,不过这些也都算是比较基础的需求了。

硬盘笼选择

针对硬盘热拔插的需求,肯定还是要搞个硬盘笼的,不管怎么说,相比于直接把硬盘塞机箱里,有个热拔插硬盘笼一下子逼格就上来了。

所以一直花了不少精力去找合适的硬盘笼,主要还是集中于服务器的拆机件,这里给几个当时考虑的一些方案。

浪潮12盘位3.5寸硬盘笼

首先第一个选择是买浪潮的12盘位3.5寸硬盘笼,目前的价格大概150块钱的样子,还挺便宜,感觉应该都是当初Chia矿老板淘汰下来的,这些硬盘笼基本都有大4P的电源接口以及MiniSAS(SFF8087)接口,使用起来还是比较方便的,当然缺点是确实占地比较大,毕竟是适配的2U机箱,因为本来也一直坚持全闪的方案,所以3.5寸的硬盘位就没有必要了,即使很便宜,依然放弃了这个方案。

Intel 8盘位热插拔笼子(8 AnyBay)

这是Intel一个颜值和功能都超级能打的硬盘笼,具体的参数可以参考Intel的Spec文档(不得不说Intel的文档写的是真的好),甚至当前这个时间点,依然在量产状态,这个笼子一般来说都是在2U机箱上做竖插24盘位的组件的,这几乎是我心目中最理想的硬盘笼选择,8盘位AnyBay,支持SATA、SAS、U.2 NVMe接口的硬盘,特别是在现在咸鱼有大量的U.2接口的大容量企业级SSD,价格十分友好。最关键的是这个硬盘笼的尺寸非常完美,可以无缝的塞进两个5.25英寸光驱位中,网上也有这个硬盘笼搭配银欣(SilverStone)SG02-F机箱组NAS的方案:全网首发【8盘位热插拔NVMe SSD NAS】DIY指南简章,不得不说这个方案真的让人流口水,但确实不得不说成本太高了。

这个硬盘笼呢,什么都好,就是成本太高,不仅仅笼子本身(大约1100+)更重要的是其配套的组件,首先这个硬盘笼是MiniSAS HD(SFF‑8643)接口的,支持这个接口的HBA或者RAID卡也比较贵,其次如果说要支持8个NVMe硬盘的话,需要准备8个OcuLink接口,那PCIe转OcuLink接口的转接卡又是不小的支出。更重要的是,8个NVMe需要32个PCIe lane,这直接超出了当前大部分平台的能力,基本只有服务器平台的CPU+主板才能支持这么多的PCIe lane,成本很可观。最后还有一个不得不考虑的问题,U.2 NVMe硬盘一般来说功耗都比较高,很多盘能到10几20W往上,如果是8块硬盘,那整体功耗可能会超过100W,所以散热的问题就不得不考虑了,这个笼子如果插NVMe硬盘的话,需要额外的散热。

所以呢,东西虽好,但确实不符合我当前的需求和预算(流下贫穷的泪水)。据说H3C也有类似的笼子,价格要便宜1半,如果大家有类似的需求可以考虑。好像类似的8盘位AnyBay硬盘笼,各家OEM都有,但是好像好买且价格合适的不多。

Intel 8盘位热插拔笼子(4 AnyBay + 4 SATA/SAS)

这是另外一个Intel的硬盘笼子,大概可以算是上面笼子的低配版,文档看这里,这个笼子支持4个NVMe + 4个SATA/SAS硬盘,价格在淘宝也相对便宜,看到加上PCIe转接卡大概1000不到可以拿下,其实是个不错的选择,但是依然超出我的预算不少(继续流下贫穷的泪水)。

Intel 8盘位热插拔笼子(8 SATA/SAS)

Intel还有一种硬盘笼(Intel出的好东西真不少啊),文档看这里,这个笼子支持8个SATA/SAS硬盘,使用两个MiniSAS(SFF8087)接口,是一开始我选中的方案,整体还是很平衡的,淘宝大概400不到,在我找到下面的硬盘笼之前,一度准备剁手入了。

HP热插拔380 G6/G7硬盘笼

这个是我最后选择的笼子,这个硬盘笼原本是给HP DL380G6/G7升级16盘位的套件,在HP那边的编号是:507690-001516914-B21(这俩编号是一个东西),这个套件包含的几个组件和对应的物料编号如下:

硬盘笼子:463173-001 496074-001
硬盘背板:507690-001 451283-002
硬盘供电线:514217-001
硬盘SAS数据线:498425-001 493228-005

为什么我选择这个硬盘笼子呢,因为它真的便宜,笼子加上背板、送供电线和两根SAS线,只需要50块钱,当然是不带硬盘托架的,不过算上硬盘托架的价钱也只需要80。80块钱真买不了上当和吃亏。说实话它也有一些小问题,比如坑爹的HP不知道为啥要设计成横向的两个4盘位,尺寸比竖向8盘位相比宽了一点点,直接导致没办法塞进2个5.25英寸光驱位。另外电源接口的设计也比较恶心,是向外的,如果想塞进机箱,那突出来的电源线会成为一个大问题,另外HP的电源接口定义也是每代一改,虽然复用了10pin的接口,但是定义并不标准,导致我花了非常长的时间去寻找各个pin的定义,生怕弄错接口定义把背板烧了,最终还是在一个德语的论坛找到一个评论说了这个硬盘笼子的定义,需要说明的是这个背板不接3.3V的供电也没有影响,所以也是淘宝了两根大4P的电源线和10pin线,自己DIY了一个电源线,最终把这个硬盘盒的供电问题解决。总的来说,主要这个笼子实在是太便宜了,便宜到它的这几个缺点都可以忍受(还是流下贫穷的泪水)。

RAID/HBA卡选择

针对上面几个硬盘笼,特别是最终我选的硬盘笼,都使用了MiniSAS(SFF8087)接口,所以要想使用硬盘笼的话,需要有支持MiniSAS接口的SATA控制器或者RAID/HBA卡,根据之前的调查,大致有几种方案:

1. 可以使用MiniSAS转4SATA线实现,不过需要注意的是,这种线是区分正反的,正向线是MiniSAS口转4SATA,需要买反接线,将4SATA转换成MiniSAS口,从而实现将主板上的4个SATA口转成一个MiniSAS口。
2. 市面上还有一些基于类似ASM1166(或者类似芯片)的PCI-E转SFF-8087转接卡,但ASM1166原生只支持6SATA Port,是否两个SFF-8087端口的8个端口都能使用,这个存疑。
   另外还有也有一些M.2转8口SATA扩展卡也是用的两个SFF-8087转接卡,理论上也可以使用。
3. 使用拆机的服务器HBA卡,比如基于LSI SAS 2008/2308的一众原厂或者OEM HBA卡。

最终我还是选择了相对成熟的HBA卡方案,一顿精挑细选,最终选了SuperMicro家的AOC-S2308L-L8I 9217-8i,基于SAS 2308芯片,PCIe 3.0 x8的接口,支持两个SFF-8087接口,这是一张OEM卡,对应的原厂卡型号是LSI SAS9217-8i,市面上除了SuperMicro之外,还有很多OEM也会出相同芯片的卡,比如浪潮、IBM等等,选择还是比较多的。我选的是2308的方案,这个芯片算是2008芯片的升级,其实区别不大,最主要的升级就是从PCIe 2.0 x8变成了PCIe 3.0 x8,整体带宽会高点。另外需要注意的一点是,这两个芯片有两种固件:IT(Initiator Target)模式和IR(Integrated RAID)模式,IT模式是类似HBA卡的直通模式,没办法组建RAID;IR模式是类似RAID卡的模式,可以组建简单的RAID0和RAID1。另外这两种固件是可以互刷的,区别只是在产品名字上是9207还是9217(9217是IR模式,9207是IT模式,所以我买的卡也是原厂IR模式刷的IT固件)。最后其实这个卡有个比较大的散热方面的问题,根据原厂的User Guide文档。这张卡默认情况下有接近10W(默认9.8W,最大16W)的功耗,且最低要求200 linear feet per minute的风量,在服务器环境下散热都不是问题,但是放到家用的机箱里,如果没有主动散热的情况下,这张卡会非常的烫手!所以最终我又找了一个12cm的风扇专门对着卡的散热片吹,从而解决散热问题。

硬盘选择

上面的这些组件搞定,最终就是买硬盘了,之前提到现在全新的SATA SSD大概0.4元/GB,一块1TB的SSD大概400左右,说实话还是不便宜的,所以我又勇敢的选择了大船货!其实现在二手拆机SSD,量最大,最划算的还是U.2的硬盘,不到1000块钱可以买到4T左右的企业级SSD,而且这些企业级SSD寿命极高,稳定性也相当好,而且相比于SATA接口,U.2因为是PCIe链路,可以做到传输层的数据保护,可惜的是咱们的硬盘笼不支持。于是就只能选择SATA接口的SSD,一下子可选范围就少了不少,最终还是选了当前比较火的Sandisk/闪迪云盘ECO,但是相比于更火的1.92T容量的版本,我最终买了960G容量的版本,相比于1.92T这个容量点,我猜960G容量用来做系统盘的概率更大点,说不准能抽奖抽到写入量超低的盘😁。相比于全新盘,这个拆机盘的价格就很实惠了。目前的价格是960G容量版本230块,不到0.24元/GB,属实是相当划算了。

NAS系统选择

所有硬件的问题搞定,最后就只剩下软件层面的选择了,到底该用什么系统呢?一开始想使用TrueNAS,主要是看中ZFS的能力,但是试用了一小段时间TrueNAS之后,感觉这系统是真的很难用,门槛太高了,虽然运维这玩意对我来说并不是太大的瓶颈,但是确实各个方面都不太好用,特别是相关的软件生态上差很多。
于是乎就又试了试黑群晖,一开始我其实是抵制黑群晖的,因为有点担心数据安全问题,不确定会不会哪天就崩了,但是试用了一下之后,觉得确实群晖的生态做的太好了,体验拉满。于是就去简单研究了一下黑群晖的实现原理,发现其实黑群晖的相关项目都是开源的,都放在了RedPill-TTG这个组织下,其中最关键的对群晖内核的hack都在RedPill-TTG/redpill-lkm这个项目里,大致翻了翻代码,基本上就是通过加载模块的方式,欺骗群晖的内核,让其认为自己是跑在群晖专有的硬件上。了解了之后,黑群晖在我心目中好感倍增,话说感觉群晖这绝对是套路满满,都说黑群晖的尽头是白群。估计群晖官方默许黑群晖行为的原因大概和Windows一样,反正最终都会买我。

不过相比于直接把群晖跑在裸机上,我采取了一个另外的方法,把群晖跑在了虚拟机里,这样做的目的主要也是为了方便以后迁移,对我来说当前的硬件平台只是个相对临时的解决方案,为了后续能更好的跨平台迁移,所以我选择将黑群晖跑在虚拟机里,而对于HBA卡来说,采取的是硬件直通的方式直通给虚拟机,从而确保SMART等功能的正常使用。这里分享一下我现在用的虚拟机的XML,有需要的可以参考一下:

<domain type="kvm">
  <name>Synology</name>
  <uuid>5ce24e3b-627b-468a-bcd5-53ff58d9731d</uuid>
  <memory>8388608</memory>
  <currentMemory>8388608</currentMemory>
  <memoryBacking>
    <hugepages/>
  </memoryBacking>
  <vcpu>4</vcpu>
  <os firmware="efi">
    <firmware>
      <feature enabled='no' name='secure-boot'/>
    </firmware>
    <type arch="x86_64" machine="q35">hvm</type>
    <boot dev="hd"/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode="host-passthrough"/>
  <clock offset="utc">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="no"/>
  </clock>
  <pm>
    <suspend-to-mem enabled="no"/>
    <suspend-to-disk enabled="no"/>
  </pm>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="raw"/>
      <source file="/data0/Synology/boot.img"/>
      <target dev="sda" bus="usb"/>
    </disk>
    <interface type="bridge">
      <source bridge="br0"/>
      <mac address="11:22:33:44:55:66"/>
      <model type="virtio"/>
    </interface>
    <console type="pty"/>
    <hostdev mode="subsystem" type="pci" managed="yes">
      <source>
        <address domain="0" bus="1" slot="0" function="0"/>
      </source>
    </hostdev>
    <memballoon model="none"/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='vga' vram='16384' heads='1' primary='yes'/>
    </video>
  </devices>
</domain>

总结和后续

目前的这套NAS方案已经运行了2个多月,看起来还算稳定,这段时间内没出现过大的问题。如果折腾半天就只为了存点照片也有点浪费,所以除了存储功能之外,我又跑了个PCDN业务,目前收益也还不错,我是100M的上传带宽,目前每天大概能有个5块钱的收益,至少电费能覆盖了,跑着玩玩吧~

想想当前这套还有什么不足,个人觉得一个比较大的缺点是占地,目前我是用了乔斯伯的V4做的机箱,但是硬盘笼是不太好直接放进机箱了,所以只是简单的放在了外壳上,整体相比于家用的NAS产品还是大了一圈,另外确实硬盘笼比双5.25寸光驱位大了点,即使后续换了机箱,可能也不太好直接放进去。

另外就是CPU这些硬件配置了,一方面当前这颗CPU TDP还是比较大的,65W,必须有主动散热,另外HBA卡也需要主动散热,所以离真正的0噪音还有点距离,理论上换用嵌入式的低功耗CPU+SATA转MiniSAS的方案,可以做到整机完全没有任何机械活动的部件,做到真正意义上的0噪音。

最后就是另一个方向,换到稍微低端点的数据中心CPU+主板,功耗会高一些,但是可扩展性会极大的增强,包括ECC内存以及U.2硬盘、IPMI这些都可以支持。具体往后该如何演进,还是等待当前套系统继续运行一段时间吧。