NAS——阵列与文件系统方案探讨

前言

本来这样的文章应该是先硬件后软件的。但NAS上特殊在软件方案会反过来对硬件选择产生很大的影响,所以先搞定硬盘组织方案才能更好的选择硬件。

对于接单块硬盘卡片电脑或是双盘位入门NAS整机而言,阵列与文件系统实在是个遥不可及的东西。但一旦开始追求更高的安全或性能,一两块硬盘就不再能满足需要了。

目录

  1. 对比表格
  2. 各自的简介
  3. 性能
  4. 文件完整性与修复
  5. 极端情况下的数据恢复
  6. 总结

简单的对比表格

各自的简介

硬件RAID是一个传统的选择,可以完全不影响CPU占用也不会受操作系统的制约,注意必须要带缓存的卡才能够承受RAID5/6的运算,虽然一些无缓存HBA卡也可用RAID5但写入速度堪比U盘。坏处是它必须要与支持ERC/TLER的硬盘搭配(红盘/酷狼以上)、配备缓存电池或整机UPS避免触发写入黑洞(Write Hole)、并且面对硬盘的读写错误极其脆弱。

mdadm(群晖同款)Linux自带的软阵列,是硬件RAID的完美软件替代。

ZFS号称“最后的文件系统”,可以做到对文件的最佳的保护,可变条带宽度带来比硬件RAID更好的性能,不需要UPS即使意外断电也不会影响已有的数据,对硬盘要求非常宽容,遇到单一错误会尽可能修复并报告(硬阵列早就踢硬盘了),因此为ZFS配硬不必为所谓“NAS设计”多掏钱。问题在于ZFS极力推荐ECC(搞那么些文件校验和在内存里出错就白费功夫了),碎片化使得容量接近满池(80%以上)后性能会急剧恶化,而且扩容只能通过小盘换大盘或是新增一个一样的vdev使这两个vdev组成RAID0关系。

Btrfs是当年Linux阵营对标ZFS的产物,随着ZFS登陆Linux,红帽弃坑,综合各方面均不如直接上ZFS,Btrfs的RAID5/6储存池功能存在致命BUG不能用于生产环境!

储存空间是Windows自带的储存池功能,开发进展慢,支持特性少,性能也差,完全没法用。很可能在不久的未来被砍掉。

SnapRAID非条带化的冗余储存,使得读取只需操作文件所在的硬盘。冗余保护不是实时的,方式是建立快照,发生损坏退回到快照恢复。可以使用容量不同的硬盘组成池,扩容也非常方便,在极端情况下阵列损毁,也能保证幸存硬盘数据的安全。

FlexRAID与unRAID都是商业化的非标准阵列方案,特性中部分类似于SnapRAID,具体技术资料不多。


性能

基本各方案都有自己缓存组织形式,可以利用内存和SSD对整个阵列的访问进行加速。最大的不同在于SnapRAID这种模式,虽然没有了阵列叠加加速,但由于NAS访问都是通过网络,现代硬盘连续读写都能达到200MB/s左右并不会成为瓶颈。

文件完整性与修复

阵列只保硬盘不保数据,单纯的阵列冗余已经无法保证数据安全了。RAID5之所以不再安全核心就是硬盘的读写错误率,阵列卡只有在进行巡检操作时才会修复潜在的错误,其他时候发生错误要么会发生传染要么硬盘被视作损坏踢掉。文件完整性校验解决了这个问题,通过校验和可以验明文件真身,验证失败则可以利用奇偶校验进行修复,ZFS这样的文件系统即使极端情况无法修复也能准确得知出错的文件是哪一个。
对于现在多块大硬盘储存,只有配合文件校验和和错误修复功能,才能保证你多年后读出来的文件还是和当年存进去的一个样。

极端情况下的数据恢复

极端情况也就是损毁的硬盘数超过了冗余的数量

对于阵列而言是致命的,因为阵列没有与文件系统对接,已经被踢掉的硬盘强制上线也很容易被再次踢掉,只得通过第三方软件重建虚拟阵列恢复。

对于ZFS而言,只要硬盘还没恶化到完全无法读的地步,都可以强制上线后转移数据,ZFS日志会显示出无法读取和校验出错的文件,其它文件是安全的。

对于SnapRAID而言安全性更进一步,因为不是条带化的分散储存文件,无论坏多少块盘,剩下的数据盘都类似于JBOD的结构,可以读出所有数据。

总结

对于一般家用而言,任何硬件阵列都是不推荐的,除了最简单的RAID1。

ZFS和SnapRAID非常适合,SnapNAS灵活的扩容策略可以很好的适应未来扩容,想追求高性能上10Gbps网络跑满那就得靠ZFS了。


NAS DIY交流群:954341161

jq.qq.com/? (二维码自动识别)

编辑于 2018-11-30

文章被以下专栏收录