写这篇文章一方面是因为这两天有谈论全闪 NAS 的热度,另一方面也是希望抛砖引玉,看看能不能集思广益找到更好的方案。
我大概从十几年前 m2 ssd 普及开始,笔记本一定都选双 ssd 的型号,原因是我会组软 raid 来保证可用性。目前经手了六七台电脑,因为扩容前后大概用过十几块 m2 ssd ,坏过一块,原因是主控坏了。
因为我是用在笔记本上的,所以挑选的都是中等价位的非高性能产品,目的是控制功耗和发热,同时我会刻意挑选有颗粒生产能力的原厂品牌。由于有组 raid 的需求,我实际上会倾向同样的型号直接买两个。台式机也有一些 ssd ,加上笔记本替换下来的,多数都是通过拆分卡上了 nas ,总体上应该经手过三十块左右,nas 里出现过一个盘写锁定变只读,其他都是因为盘位不够被替换掉了。
前两年入手了一个摩方 m6, 这是个双 ssd 的小机器,便携性很好。我把它当作网络移动硬盘用来存储临时快照(备份)。机器散热很差,里面的 ssd 温度经常有 50+,因为没坏过所以我也没管它,反正就是出差或者旅行的临时中转。
我个人感觉 ssd 挂了基本不用挣扎,但理论上只是主控坏了是可以移花接木来修复的,只是我从来没有实践过。而且我的使用策略上来说,备份是足够的,所以不会真的考虑去维修。
过去十多年里,我有过多个的机械硬盘 NAS ,经手过大概二三十块硬盘,前几年陆陆续续处理掉了,数据要么上云冷存,要么进了 ssd 里面。
可能是我运气比较好,机械硬盘也就坏过两三块。所以从我个人的经验来说,hdd 怎么用大概 ssd 就怎么用,没有区别。本质上不能指望单一副本的可靠性,3-2-1 原则一视同仁。
这部分是这篇文章的重点,以我的经验来说,机械和全闪 NAS 在技术路线和使用方式上还是差别挺大的。
时间大概写的,记忆不一定准确。大致就是 m2 ssd 刚开始流行的时候,当时的企业级产品主要还是 u2 接口。
由于我比较神经质加偏执,非要在笔记本上搞 raid1 ,还是吃了点苦头的。当时能选的方案主要就是 mdadm 和 lvm+mdadm 。nvme 协议的 ssd 相对于 sata 时期在写平衡、trim 方面好了很多,但实践证明,它仍旧不太适合基于块镜像的 raid1 场景。
最主要的问题是 scrubbing ,毕竟块层面上是不带校验信息的,而 ssd 的块又不具有 hdd 块的物理映射,所以最大的感受就是机器经常在做 scrubbing ,那时候容量又小,读写量非常大。好在 ssd 本身比较坚挺……
同一个时期,我组了一个架构比较特殊的 NAS 。由于工作原因,我这边参与了一个分布式的存储项目,每个节点都是全志 arm 的单板机,只带一块机械硬盘,然后通过大量节点组建高可靠性的分布式存储。软件层面上使用的是 glusterfs 。我在自己家里复刻了一个八盘位的系统。
笔记本和 NAS 的架构差异让我理解到,传统 raid 已经过时了。
之后我的笔记本存储方案过渡到了 btrfs raid1 ,由于它是基于 file extent 的,所以就省去了 scrubbing 这个行为。事实证明我没有看走眼,多年之后 fedora 将 btrfs 作为默认的文件系统。
这里最大的优势实际上是笔记本 ssd 的迁移升级。当我换新的笔记本的时候,我会拆下旧机器的一条 ssd ,与新机器上一条空 ssd 一起装机,在新 ssd 上重建 raid1 之后,旧机器 ssd 归位,新机器再上一条空 ssd 再重建一次就完成了迁移。由于 ssd 本身性能够高,加上又是文件系统级别的复制,这个重建比起机械盘上基于块的重建快太多了。
同时期我也重新组了机械 NAS ,从两盘位到四盘位一路折腾到八盘位十六盘位。主要的软件方案是 FreeNAS/TruNAS 也就是 zfs 。之所以盘位一加再加,核心问题就是存储池的规划缺乏前瞻性,扩容是个很麻烦的事情。简单说就是 zfs 鼓励你一开始就组建好 4Tx8 阵列,而不是隔一段时间加一块硬盘这样。
这个阶段的对我来说比较重大的影响是,我开始大量使用基于 CoW 的快照。由于我 3-2-1 的原则坚持比较到位,实际上的数据损失风险已经不是副本丢失,而是由于备份间隔不够导致的历史版本被覆盖。
快照极大简化了备份这件事的心智负担,我也花了比较大精力人工对我的数据进行去重。结果是我的存储空间需求大大降低了,这也为后期过渡到全闪存储提供了可能。
这个阶段笔记本上方案没有太大变化,验证过 opal sed 都是坑,所以又回到 luks 方案了。有一点小区别就是我增加了摩方 m6 这个中转设备,因为基于 CoW 的快照本质上不是完整的副本,所以外置存储作为独立副本还是有必要的,出差或者移动办公作用很大。
我的 NAS 也在处理掉机械盘后逐渐变成纯闪方案,机器还是之前为机械方案组建的机器。保留的原因是它用的服务器主板,cpu 通道多,而且主板支持 bifurcation 拆分,立创打两张 retimer 卡就能搞出八个盘位来。
软件方面 NAS 我直接替换成了 fedora+btrfs ,即我的所有物理机器,包括 m6 那个移动设备,都用了一样的系统。这个改动主要是方便数据同步,用 send/receive 就可以通过网络完成快照的传递,支持增量同步而且是二进制流效率很高。
这里最大的转变其实是存算分离的需求没有了,主要是我被 aws 和阿里云的抢占式实例惯坏了,自己家里已经没有了算的需求,那么高性能的存储需求也就不存在了。可能未来我会将存储系统降级到低功耗的全闪设备上。算力需求上云这个话题可以再开帖子另说。
这里只是我的一点经历和体验,我非常想听到大家对于个人存储的看法,很多时候可能就是一个想法最重要。
还有很多使用细节,比如 ipv6 公网访问,或者在存储池之上建立其他服务什么的,因为与全闪关系不大就不多说了。
我说的内容只是建立在我的经验和需求之上的,可能未必适合每个人,思路仅供参考。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.