NAS 年度使用报告(第一年)

正式启用的时候我发布了NAS的第一个blog 见:我是怎么做NAS的

当时还不是很稳定,直到最近的一个季度才稳定下来。

整件事情还是要从最早的时候说起。

起源

我来到上海的时候 就只带了 3T 的数据,存放在硬盘上,为了能够读取内容 我买了两个硬盘盒 USB的接口 需要单独供电 插到电脑上即可。

但是我发现 这些硬盘盒 质量好像很差,硬盘盒挂掉的 接触不良的,让我感觉到数据随时有可能会丢。

当时还没打算建造这个工作站,而且在更早期有个 idea 就是我想要躺在床上也能看原始蓝光的番。

蓝光盘 25分钟的番大概7-8G左右。

存储 就非 NAS 不可了。

因为我对 NAS 有着更多自定义的设想 所以成品的 NAS 直接就被我Paas掉了。

然后我的目光转向到从零开始建造一个 NAS,买部件 采购NAS机箱,安装系统,提供服务。

必须要解释的几件事情

为什么选了 windows server

其实这一切都是预算的锅,预算是最棘手的部分。

因为没有一个足够的预算 导致没能买到足够的存储容量,也没有办法无损转换FS,所以 NTFS 只能继续用 并且要保持原始的性能 只能是windows。

不过后来想想 有了 windows server 能跑一些通用的windows 应用 好像没什么亏的。

并且SMB本来就是 windows 这边的

你用了哪些存储策略

目前 我的 NAS 总存储 16TB,有效存储12TB。

两个磁盘为 mirro 模式,存储一些非常重要不能丢的东西。

另外两个是原生磁盘。存储一些丢了不会死的数据,例如游戏备份,电影,电脑/移动设备备份。

游戏备份指的是 游戏本体 例如GTA5 在游戏的第一个版本里可以无限股票(bug),但是在后续的版本被修复掉了。我可以随时还原到以前的版本 跑去刷股票 (笑

文件系统均被我转换到了ReFS

顺便说一下 我目前的12TB 只剩下 2.56TiB了(注意单位)

你的NAS上跑了哪些服务

  • SMB
  • Aria2
  • Caddy
  • BaiduPan
  • Docker
  • ShareList (on docker)

这个NAS设计用途 最后被我精简成这样了。

Aria2 用来进行长任务下载,有些东西可能上百G 靠笔电下载太坑了。

Caddy主要提供WebUI的服务

百度云盘实际上还是蛮划算的 每年两百多块 10TB容量,并且可以保证你的数据不丢。主要为我提供关键数据备份(每天上传22-25GB左右),和一些转存的东西下载。

Docker 跑一些不支持windows的软件 或者 我想保持windows系统完整性的时候 我就会把应用启动在 docker 上,例如 sharelist,MySQL

sharelist是一个神奇,不过我主要用来挂载onedrive企业盘分享的内容,因为如果不解析出下载链接 只能在浏览器中下载。解析出下载链接之后就可以摆脱Aria2进行下载了,非常惬意。

有关于DNS

这部分是个大坑。

因为不是特别容易找出问题。

windows 自带的 DNS 服务 在第一冷查询的时候 要耗时十几秒,随着查询的频率的提升 才能越来越快。

smartdns 我也使用过,windows,linux上都用过。在 linux 是上 基于Hyper-V的,但仍然有很高的错误率 不是很明白 为什么会这样。就是会突然跑着跑着 不解析了,或者解析到错误的地址。

unbound 这个其实相对于 smartdns 会稳一点 但还没达到我要求的标准,有时候仍然会解析失败。 同样也是跑在Hyper-V的Linux里。

我的标准是 除了网络断线外 不能有解析错误。

这里是我跑24H的测试结果

unbound: 每5min 查询一次

dnsping -i 5m dns.illyasviel.server 192.168.50.1
20:33:36 I dnsping v1.1.4: will query until interrupted, sleeping 5m0s in between, the server 192.168.50.1:53 for A (1) record for dns.illyasviel.server.
20:33:36 I   1.0 ms   1: [dns.illyasviel.server.        1088    IN      A       192.168.50.163]
20:38:36 I   1.0 ms   2: [dns.illyasviel.server.        788     IN      A       192.168.50.163]
20:43:36 I   1.0 ms   3: [dns.illyasviel.server.        488     IN      A       192.168.50.163]
...
21:53:36 E  25.2 ms  17: server error: <nil>
21:53:36 I  25.2 ms  17: []
22:58:36 E   9.0 ms  30: server error: <nil>
22:58:36 I   9.0 ms  30: []
01:03:36 E  10.0 ms  55: server error: <nil>
01:03:36 I  10.0 ms  55: []
03:03:36 E  11.4 ms  79: server error: <nil>
03:03:36 I  11.4 ms  79: []
06:08:36 E  10.0 ms 116: server error: <nil>
06:08:36 I  10.0 ms 116: []
19:18:36 E  18.0 ms 274: server error: <nil>
19:18:36 I  18.0 ms 274: []
19:23:36 E  19.0 ms 275: server error: <nil>
19:23:36 I  19.0 ms 275: []
19:28:36 E  10.0 ms 276: server error: <nil>
19:28:36 I  10.0 ms 276: []
19:33:36 E  10.0 ms 277: server error: <nil>
19:33:36 I  10.0 ms 277: []
19:38:36 E  11.0 ms 278: server error: <nil>
19:38:36 I  11.0 ms 278: []
19:43:36 E  10.0 ms 279: server error: <nil>
19:43:36 I  10.0 ms 279: []

11 errors (3.79%), 279 success.
response time (in ms) : count 290 avg 1.7827672 +/- 2.512 min 0 max 25.2017 sum 517.0025
# range, mid point, percentile, count
>= 0 <= 0 , 0 , 0.34, 1
> 0.9 <= 1 , 0.95 , 20.69, 59
> 1 <= 1.1 , 1.05 , 70.00, 143
> 1.2 <= 1.4 , 1.3 , 70.69, 2
> 1.4 <= 1.6 , 1.5 , 71.03, 1
> 1.8 <= 2 , 1.9 , 80.69, 28
> 2 <= 2.5 , 2.25 , 90.00, 27
> 2.5 <= 3 , 2.75 , 93.79, 11
> 3 <= 3.5 , 3.25 , 95.52, 5
> 3.5 <= 4 , 3.75 , 96.21, 2
> 8 <= 9 , 8.5 , 96.55, 1
> 9 <= 10 , 9.5 , 97.24, 2
> 10 <= 12 , 11 , 98.97, 5
> 16 <= 18 , 17 , 99.31, 1
> 18 <= 20 , 19 , 99.66, 1
> 25 <= 25.2017 , 25.1009 , 100.00, 1
# target 50% 1.05944
# target 90% 2.5
# target 99% 16.2

一天中 有11个请求失败了,这些失败的请求 很有可能让我打不开某个网页

ASUS路由器的dnsmasq: 每5min一次

dnsping.exe -i 5m dns.illyasviel.server 192.168.50.1
18:03:59 I dnsping v1.1.4: will query until interrupted, sleeping 5m0s in between, the server 192.168.50.1:53 for A (1) record for dns.illyasviel.server.
18:03:59 I   3.0 ms   1: [dns.illyasviel.server.        0       IN      A       192.168.50.163]
18:08:59 I   1.0 ms   2: [dns.illyasviel.server.        0       IN      A       192.168.50.163]
18:13:59 I   1.0 ms   3: [dns.illyasviel.server.        0       IN      A       192.168.50.163]
...

0 errors (0.00%), 298 success.
response time (in ms) : count 298 avg 1.2963201 +/- 0.4665 min 0.9307 max 3.0010000000000003 sum 386.3034
# range, mid point, percentile, count
>= 0.9307 <= 1 , 0.96535 , 29.87, 89
> 1 <= 1.1 , 1.05 , 71.14, 123
> 1.6 <= 1.8 , 1.7 , 71.48, 1
> 1.8 <= 2 , 1.9 , 87.92, 49
> 2 <= 2.5 , 2.25 , 99.33, 34
> 2.5 <= 3 , 2.75 , 99.66, 1
> 3 <= 3.001 , 3.0005 , 100.00, 1
# target 50% 1.04878
# target 90% 2.09118
# target 99% 2.48559

好了 舒服了

在 windows server 上的失败 可能是由于较弱的性能,memory flip,windows 本身的bug 等等等。

但我没有那个资源再去验证了。所以我的结论就是 不要再windows server上用DNS服务器。

硬盘热拔插设计

MS04 是自带硬盘热拔插的,但在其真正使用场景中,一次都没有用过。这也驱使我重新对NAS(家用)的一些思考。

hot plugin

热拔插的目的是什么?什么时候才需要?带来了什么问题?如何解决?

我对于hot plugin的理解就是: 提升可维护性,减少故障不可用时间。

当某个物理资源失效,需要通过 hot plugin 用备件替换 来快速恢复到正常状态,这通常伴随着 丢失数据,主板或模块报警,软件资源不可用或降级。

RAID

使用单个硬盘来保存单个数据 会有各种风险,那么此时有一个比较好的方案 就是 RAID

先来拿 RAID 1 来举个🌰,RAID 1 需要两块磁盘,单个数据会分别保存到两块磁盘上,在这个阵列中 如果其中一个物理磁盘损坏,另外一个磁盘仍然保持可用,数据没有丢失,资源也可以被访问。此时只需将受损的物理磁盘拔出来 再找个备件插回去,等待阵列重建,即可恢复正常,整个过程不需要关机,不需要停止客户端服务。problem resolved。

你真的需要吗?

就拿我自己来说 每周也就周六周末 有相对较多的时间来去存取数据,一到五 基本就晚上一会儿的时间来看东西,其他时间 基本上 要么在上传 要么在下载,我和NAS的直接交互 占用时间非常少,因为物理上产生的中断,影响最大的就是这些 上传和下载(通常都在备份到云端)。

当灾难真正发生的时候,肯定也是要停止上传下载,看日志,看SMART,看系统报告,所以 对于上述 RAID 1 的方案来讲,一半的特性都没掉了,

那么既然少了一半特性,我们是不是应该回收成本,RAID 1 阵列卡,替换成软件备份,这样就可以保证数据不会丢,在硬件上 会减少一些空间,

那么如果在机箱的选择上 没有热拔插模块,又能进一步的缩减空间和成本。

扩容

可能有人会想到扩容,但我要告诉你,肯定不会有人天天扩容的,扩容是一件很麻烦的事情,并且需要文件系统支持。并且 还能遇到对扩容不是那么友好的文件系统,例如 ZFS (每次只能double)。

SMB客户端的问题

客户端非常之坑 这需要分平台来说。

windows 10

win 10 是支持最好的一个平台,因为 他们的内核都是几乎一样的。所以 几乎碰不到问题。(AX200 会遇到断流,更新驱动可缓解 但很难避免)

Android

从这里开始 以下平台都需要关闭 数据传输加密

在 Android 上 包括 TV 定制版,或多或少都会有点卡顿,但目前的体验上来讲 只是传输文件 just fine。。。

在Android上 每一个带 smb 协议的应用,都是一个 客户端,客户端和客户端之间的实现参差不齐,所以 实际体验 跟 应用有很大关联。

Apple

iOS

这里以 iPhone 12 Pro 为基准

因为 Apple一向用的都是高质量的硬件,并且很多应用都有质量很高的代码实现。

所以 在一些场景下 吊打所有平台和设备。

不过 iOS 自带的文件可以链接 SMB 但不能预览,但可以点开看。有时候会出现连不上的情况。

VLC

VLC 的 SMB 实现是最棒的 流畅不卡顿,NAS 上有很多 ASMR,都可以通过 VLC 来播放 同时支持后台播放。the best and best。

macOS

链接很慢,但连上之后就还好,正常使用。因为这代 M1 的 无线网卡速度非常有限,所以没办法测出最高速度,而且 macOS 本身 就不喜欢给传输速度。

Linux

因为 我的 linux 都是跑在虚拟机上的 这可能对你来说没什么参考价值。

不过客户端的选择很多 挂载到本地目录之后 就可以随便访问了。例如 cifs-utils

看蓝光原盘的问题

普通蓝光原盘的速率是 40 Mbps,但实际上传输效果不尽人意。

windows 10

一部电影 基本上时长在 120 分钟左右。

受限于 AX200 断流的影响 可能看着看着就卡住不动,然后连带播放器一起崩溃。

iOS

这台 iPhone 12 是表现良好的,用 VLC 链接服务器,直接播放就可以了,但仍然会有大量发热(耗电)。

另外 VLC 似乎不支持 HDR 内容

Android

测试设备使用的是 Samsung Galaxy Note 9,使用 MXPlayer 链接服务器 并播放,有严重卡顿。

UPS

Uninterruptible Power Supply

在中国的一线城市,几乎不会遇到断电的现象,这一点做的是非常厉害的,所以 在一个很稳定的环境下 可能是不需要 UPS的(注意 我这里说的是 可能不需要,而不是一定不需要)。

但家庭环境往往比较复杂,我在年初的时候 遇到了一个问题,在 一周里 总闸空开 pop 了 3 次,每次电源断开,都可能会损伤 机械物理硬盘,当时就想赶紧入一个 UPS,但后来查证是空开坏掉了 更换之后 家里供电就恢复 stable 了,后来就不了了之了。

但如果你的大环境 供电没有那么那么稳定,我还是建议你 买个UPS,可以参考 LinusTechTips 给每个员工的电脑都安装了 UPS。

关于以后的大升级

机械物理硬盘 还是太吵,尽管现在是 5400 转的 4T 盘,夜深人静的时候还是很吵。

NAS上的硬盘 最怕的无非就是以下情况:

  • 不稳定的电源
  • 震动
  • 高负载(读/写)

另外 说一个小Tips,硬盘阵列密集部署 是非常怕震动的(共振),还有刚开机的启动电流 这可能直接让电源触发过载保护(顺序延迟启动)。

如果把 这些硬盘 换成 2.5 英寸的 SSD / NVME SSD,就可以解决 发热和震动噪音问题了,还有硬盘寻道时间,并且可以缩减空间,唯一的一个问题就是: 成本。

在目前我的NAS设计寿命到达前 可能可以以目前 1.5x 成本买到当前的容量,但是 这是我以后需要考虑的。