搭建家庭 NAS 服务器有什么好方案?

在家里存一些视频什么的,最好也可以一直挂着BT下载 可以双硬盘确保备份
被浏览
10,209,258
钱乎 等 302 人赞同了该回答

我的1000元计划——用一块西数4TB红盘的京东售价组装一台容量4TB的NAS。
这可能是最疯狂的捡垃圾NAS方案,关键是它还比很多低端NAS方案稳定。
唯一的劣势就是省电,毕竟功耗与性能总有取舍。

注意,捡垃圾学习思路,不是让你去找同型号的零件!

目录

  1. 成果展示
  2. 配置思路
  3. NAS的性能误区!重要!
  4. ZFS的和硬RAID探讨

关于硬件和软件的详解会有空了在专栏写


成果展示

装这台NAS的主要性能要求有三个

  1. 跑ZFS
  2. 跑SMB
  3. 挂PT

最后搞出来了个这么玩意,最终花费1100元,虽然贵了100但双故障冗余的可靠性红盘能比?

可以和全塔比高低的中塔服务器机箱,机箱配套的硬盘架卖家补发中暂时外挂

首先这是个高性能NAS——相对ARM卡片电脑和集成CPU的嵌入式平台而言。4块硬盘组成一个RAIDZ2的ZFS储存池,可以承受最大两块硬盘损毁(真的拔了玩过)。基于Debian的系统功能强大装上docker甚至pve就能为所欲为,但是我的4G内存并不支持我这样做,所以就干脆全都丢给ZFS的ARC用了。

kB       reclen   write   rewrite   read     reread
8388608      64   183448    43485   245343   259565                                                                          
8388608     128   198837   165468   241536   245957                                                                          
8388608     256   201460   163627   246981   211150                                                                          
8388608     512   201829   166400   242618   244266                                                                          
8388608    1024   199446   162405   248667   246538                                                                          
8388608    2048   197599   166600   243693   246366                                                                          
8388608    4096   195965   163445   248695   247657                                                                          
8388608    8192   199045   166364   244308   248861                                                                          
8388608   16384   177223   167274   251068   253064

性能上,使用iozone进行8G大小读写测速,可以达到200MB/s连续写,250MB/s连续读,跑满千兆网线绰绰有余。


配置思路

如何才能做到极限省钱?兼容SAS硬盘是关键。因为普通主板无法直接兼容SAS硬盘,使得这些服务器拆机的宝贝价格可以压进100元每TB,运气足够好甚至可以压到接近50元每TB。足够便宜的价格可以后续再用RAID冗余的方式来补足可靠性的短板。

LSI 9211-8i

然后就是如何才能极限控制平台价格了,硬件阵列卡(特指带缓存的硬件阵列卡)想都不要想,要么是SAS1时代的古董,要么远超预算。而且有ZFS这样的文件系统完全用不着上硬阵列。

通道卡也不能太旧,那些看起来便宜的通道卡只支持不超过2TB的硬盘。最后的选择也就只剩下LSI SAS 2008芯片的9211/9210系列,其中8口均价150,4口均价80。

ASUS PIKE 2008

但如果是某型号的专用配件呢?那就会便宜很多了。华硕的PIKE卡,通过专用接口连接到主板上,一头是PCIe x4另一头是PCIe物理形状的SAS接口,最后通过主板上的SATA形式的SAS口连接硬盘。和LSI 9211-8i相同主控的PIKE 2008只需要50元,搭主板一起只花了160,相当于买卡送主板,还是送的服务器主板。

华硕 P8B-E/4L

这块主板卖得那么便宜也不是全无道理,一方面它强制使用ECC内存,非ECC直接无法开机。另一方面机智的奸商硕把远程管理模块作为配件销售,所以这块主板空有远程管理接口实际上是不能用的。当然这些都不是问题,支持ECC甚至还成了省钱的优势,大容量的ECC贵可1G的小容量比普通内存反而便宜。

=== START OF INFORMATION SECTION ===
Vendor:               SEAGATE
Product:              ST2000NM0001
Revision:             0002
Compliance:           SPC-4
User Capacity:        2,000,398,934,016 bytes [2.00 TB]
Logical block size:   512 bytes
Rotation Rate:        7200 rpm
Form Factor:          3.5 inches
Logical Unit id:      0x5000c50040a19c4b
Serial number:        Z1P0KXFV0000C2101UZ6
Device type:          disk
Transport protocol:   SAS (SPL-3)
Local Time is:        Tue Oct 23 23:41:02 2018 CST
SMART support is:     Available - device has SMART capability.
SMART support is:     Enabled
Temperature Warning:  Enabled

=== START OF READ SMART DATA SECTION ===
SMART Health Status: OK

Current Drive Temperature:     46 C
Drive Trip Temperature:        68 C

Manufactured in week 39 of year 2011
Specified cycle count over device lifetime:  10000
Accumulated start-stop cycles:  152
Specified load-unload count over device lifetime:  300000
Accumulated load-unload cycles:  152
Elements in grown defect list: 1

Vendor (Seagate) cache information
  Blocks sent to initiator = 2033537357
  Blocks received from initiator = 1029365188
  Blocks read from cache and sent to initiator = 21113236
  Number of read and write commands whose size <= segment size = 3444386
  Number of read and write commands whose size > segment size = 0

Vendor (Seagate/Hitachi) factory information
  number of hours powered up = 18516.58
  number of minutes until next internal SMART test = 13

Error counter log:
           Errors Corrected by           Total   Correction     Gigabytes    Total
               ECC          rereads/    errors   algorithm      processed    uncorrected
           fast | delayed   rewrites  corrected  invocations   [10^9 bytes]  errors
read:   2986932142        0         0  2986932142          0        856.020           0
write:         0        0         0         0          0        528.266           0
verify: 627314524        0         0  627314524          0        103.547           0

Non-medium error count:        0

No self-tests have been logged

硬盘很谜,我买的这ST2000NM0001根本没有标准的SMART可以读取和监控,只能利用smartctl看到温度、通电时间、启停循环等基本信息,然后就是一个不知道有什么用的ECC日志表。不管怎么说1W8的通电时间对于服务器硬盘而言离淘汰还远着,而且到手第一时间就已经进行了全盘坏道扫描没有任何问题。就算意外挂了也能通过阵列重建轻松恢复。

运行iozone测试时的CPU占用率

最后是CPU,真的是个U都能跑(树莓派还是别指望),直接最便宜的G1610走起。注意上图黄色的Wait-IO其实算是CPU空闲等硬盘的时间,ZFS占用最大30%左右,这还是计算量较大的RAID-Z2,比我的预计低。

系统最后选择的基于Debian的Openmediavault(简称OMV),FreeNAS只允许ZFS做数据盘太反人类了,而且Debian对我而言也熟悉一点。

OMV虽然没有内置ZFS支持,但可以通过安装插件达成。ZFS on Linux并不比FreeBSD的版本差,ZFS功能上完全不用担心。

  pool: ZFS_4TB_RAIDZ2_Pool
 state: ONLINE
  scan: scrub repaired 0B in 0h22m with 0 errors on Mon Oct  8 11:15:42 2018
config:

        NAME                        STATE     READ WRITE CKSUM
        ZFS_4TB_RAIDZ2_Pool         ONLINE       0     0     0
          raidz2-0                  ONLINE       0     0     0
            scsi-35000c50040a19c4b  ONLINE       0     0     0
            scsi-35000c50040a1ba8f  ONLINE       0     0     0
            scsi-35000c50040a335a3  ONLINE       0     0     0
            scsi-35000c50040a33813  ONLINE       0     0     0

errors: No known data errors

因为一共就4G内存而且主要做储存,就放弃折腾PVE、Docker了,把ZFS的ARC最大值手动设置到3G,榨干最后一点自由的内存。

OMV就是个装在Debian上提供WEB界面的超级软件包,抛掉界面这就是个Debian,Linux能怎么用就可以怎么用,搭个Minecraft服务器也是可以的,不过那样的话就要减少给ZFS分配的缓存空间了。


NAS性能误区

奸商(比如VedioTalk)喜欢用Plex编码推流和视频转码来推销新的赛扬J主板,甚至有极端小白给NAS配上了i7 8700。

Plex编码推流和视频转码本身就是个伪需求。Plex重编码推流1080P码率达8Mbps,这是什么概念?高画质的1080P BDrip都只有5Mbps左右的码率!而且硬件编码画质本身就糟糕。也就是对于大部分影视资源Plex重编码推流既劣化画质又增加体积。完全的一无是处。

视频转码,仅对自己手机/摄像机拍摄的视频有意义,因为这些设备为了高画质输出码率往往很高不适合归档保存,因此高参数重编码是有价值的。而对于大部分本身就有压制组转码过的影视资源而言,重新转码就是在费时费力劣化画质,文件大小也难以得到有效压缩。

仅做文件共享用途的NAS,CPU只要能亮机就行,老旧的Atom嵌入式主板是个很好的选择,注意它们是否拥有千兆网卡和足够的硬盘接口就行。需要做软阵列或其它高级用途,按需求选择CPU。如果真的有闲钱,全套都升级成服务器级的配件,比买i7更值得。


ZFS的和硬RAID探讨

首先更正两个ZFS的性能误区,

  1. ZFS推荐大内存但不强制大内存,8G只是FreeNAS的推荐值,其实低至1G也能运行,Oracle文档中最低要求为2G。
  2. ZFS没有要求硬盘数量对齐2^n+p的说法,ZFS的动态条带会自动分配校验空间占用。

硬件RAID对个人用户其实是个不实用的东西。无缓存的控制器只跑得动1/0/10几种简单阵列,5/6需要高端阵列卡才能发挥性能。硬盘必须支持ERC/TLER(至少红盘档次才开放该功能),保证硬盘不会因为一点小错误而被踢掉。而且硬件RAID只保硬盘不保数据,即硬盘下线可以重建,数据损坏是不会被修复的。硬件RAID还需要电池或UPS来防止写入漏洞问题,还有迁移的麻烦等等。对于没有全套服务器环境的个人用户而言,硬RAID就是请了个大爷回家,稍有不注意轻则降级重则损毁。

相比之下ZFS对硬件几乎无要求,不仅不需要昂贵的阵列卡,NAS硬盘也完全没有必要,普通硬盘也保3年挂了去售后就行。性能上超出缓存的连续读写表现也很好,追求随机读写和高IOPS就需要加钱大内存ARC和固态硬盘L2ARC/ZIL。

最重要的是ZFS提供了文件完整性保护,文件写入时都生成了相应的校验,定期进行擦洗(scrub)可以检测文件完整性,及时修复损坏。比如今年八月的腾讯云发生的静默损坏,就是硬件RAID无法应对而ZFS可以修复的。

ZFS作为文件系统直接接管多硬盘,重建和擦洗都只针对有数据的部分,而硬RAID就不知道硬盘数据情况了初始化就得全盘跑一遍,重建也只能全盘跑一遍。需要转移的时候导入和导出也十分方便,而硬RAID搬家得连卡带阵列标记清硬盘端口号才敢小心翼翼的搬。而ZFS直接找到另一台装有不低于原ZFS池版本的电脑插进去导入就行。


NAS DIY交流群:954341161

更多回答