Nas数据存储:NAS存储方案
- 数据存储
- 6天前
- 29热度
- 0评论
Nas的数据存储方案可分为2种,即:
- 集中存储
所有的硬盘在一台电脑上。 - 分布式存储
硬盘在多台电脑上,由多台电脑共同组成存储系统。
1、集中存储
1.1、RAID阵列
磁盘阵列raid是高可用方案,是预防某块(某几块)硬盘突然挂掉的方案,详见:磁盘阵列Raid
1.2、ZFS存储池
ZFS号称“最后的文件系统”,可以做到对文件的最佳的保护,意外断电也不会影响已有的数据,对硬盘要求非常宽容,遇到单一错误会尽可能修复并报告(硬阵列早就踢硬盘了)。
支持 | 条带(RAID0),镜像(RAID1),RAID-z(类似RAID5),RAID -z2(类似RAID6),RAID-z3(允许3盘故障数据不损坏) |
扩容 | 以大盘换小盘(如2x1TB→2x2TB),添加设备进入存储池。 不能向阵列里添加新硬盘(这是硬伤) |
升级 | 无 |
缓存 | 使用系统内存作为读写缓存(ARC) 使用SATA/SAS/NVME SSD作为读缓存(L2ARC)和写缓存(ZIL) |
优点 | 免费(Freenas&Nas4free) RAID-z/z2/z3读写速度很快(400MB/s+) 免费支持高性能,支持使用SATA/SAS/NVME SSD缓存加速,支持使用系统内存缓存加速(几十GB/s读写) RAID-z/z2/z3没有传统RAID5/6的Write Hole 不会因为断电导致阵列崩溃,不必配备BBU(电池) |
缺点 | ZFS极力推荐ECC内存,很多计算靠内存完成 文件系统碎片化,长时间后读写性能严重下降,且无法进行碎片整理 不能向已有阵列里添加新硬盘,也不能进行RAID模式升级迁移 |
1.3、Windows存储空间
支持 | 简单——所有硬盘容量简单相加 双向镜像——每个文件复制为两份存放在两个不同的硬盘上,可用空间为所有硬盘容量相加的一半,允许一块硬盘故障 三向镜像——每个文件复制为三份存放在三个不同的硬盘上,可用空间为所有硬盘容量相加的三分之一,允许两块硬盘故障 奇偶校验——类似RAID5,但须使用powershell命令手动指定“列数”,否则可能导致空间浪费 |
扩容 | 以大盘换小盘(如2x1TB→2x2TB),添加设备进入存储池,向阵列里添加新硬盘(如3x1TB 奇偶→4 x1TB 奇偶) |
升级 | 无 |
双向镜像和三向镜像没有涉及RAID5一样的奇偶校验,读写性能接近单盘性能,基本不占用CPU资源,但空间浪费大。
简单模式下,当剩余空间足够时,支持从存储池删除硬盘,被删除硬盘上的文件会被系统自动转移到其他硬盘上。
对于S.M.A.R.T健康状况不佳的硬盘,将其从存储池删除,可以防止硬盘后续故障时导致的数据丢失。
但此法只适用于有征兆的硬盘故障,硬盘突然故障时仍然会丢失数据。
奇偶校验的写入速度慢(例如30MB/s),但可通过使用SSD缓存补偿。(一次性写入大量数据,缓存满了以后还是会掉到原来的速度)
储存空间是Windows自带的储存池功能,开发进展慢,支持特性少,性能也差,完全没法用。很可能在不久的未来被砍掉。
1.4、unRAID/FlexRAID/SnapRAID
使用类似RAID-4技术,由一或两块校验盘(黑)+n块数据盘组成(绿)
校验盘的容量要大于每块数据盘容量,阵列总容量为数据盘容量之和(4+4+4+3+3+3+2)
一或两块校验盘分别可以承受一或两块硬盘故障
SnapRAID非条带化的冗余储存,使得读取只需操作文件所在的硬盘。冗余保护不是实时的,方式是建立快照,发生损坏退回到快照恢复。可以使用容量不同的硬盘组成池,扩容也非常方便,在极端情况下阵列损毁,也能保证幸存硬盘数据的安全。
扩容 | 以大盘换小盘(如1TB→2TB),向池里添加新硬盘(添加比校验盘更大的盘时,该盘自动成为校验盘) |
优点 | 对数据盘容量没有规定,可方便添加不同容量的硬盘进入阵列,总容量直接相加 支持SSD做写缓存以提高写入性能 每颗数据盘分别独立,使用XFS文件系统,可独立在其他Linux电脑上读写 即使故障盘数超过可承受数量,也仅丢失故障盘上的文件,正常盘上文件不受影响(RAID-5/6一旦阵列崩溃,所有文件丢失) 文件共享时,自动整合所有硬盘内数据(例如访问“电影”文件夹时,该文件夹的内容为每块硬盘上的“电影”文件夹相加) |
缺点 | 依据盘数,需购买不同价格的软件许可,系统必须保持在线以验证许可的有效性 写入数据时,目标盘和校验盘写,其他盘读,(RAID5为所有盘同时读写),无缓存时写入速度受限 无读缓存,读文件时性能为单盘读性能(RAID5为n-1倍单盘读性能) 添加、替换硬盘时必须停止阵列运行(普通RAID支持在阵列运行时后台操作) |
1.4、详细对比
[1]
Btrfs是当年Linux阵营对标ZFS的产物,随着ZFS登陆Linux,红帽弃坑,综合各方面均不如直接上ZFS,Btrfs的RAID5/6储存池功能存在致命BUG不能用于生产环境!
文件完整性与修复
阵列只保硬盘不保数据,单纯的阵列冗余已经无法保证数据安全了。
RAID5之所以不再安全核心就是硬盘的读写错误率,阵列卡只有在进行巡检操作时才会修复潜在的错误,其他时候发生错误要么会发生传染要么硬盘被视作损坏踢掉。
文件完整性校验解决了这个问题,通过校验和可以验明文件真身,验证失败则可以利用奇偶校验进行修复,ZFS这样的文件系统即使极端情况无法修复也能准确得知出错的文件是哪一个。
极端情况下的数据恢复
极端情况也就是损毁的硬盘数超过了冗余的数量
对于阵列而言是致命的,因为阵列没有与文件系统对接,已经被踢掉的硬盘强制上线也很容易被再次踢掉,只得通过第三方软件重建虚拟阵列恢复。
对于ZFS而言,只要硬盘还没恶化到完全无法读的地步,都可以强制上线后转移数据,ZFS日志会显示出无法读取和校验出错的文件,其它文件是安全的。
对于SnapRAID而言安全性更进一步,因为不是条带化的分散储存文件,无论坏多少块盘,剩下的数据盘都类似于JBOD的结构,可以读出所有数据。
2、分布式存储
ceph等,以后再补充
3、方案选择
数据存储,想要保证数据安全最可靠的方案是:备份,多份备份,异地备份。
3.1、不喜欢折腾
买群辉或QNAP,显然不会是硬阵列,所以要么直接用,要么组RAID1, 方便安全,不折腾。
3.2、阵列
对于一般家用而言,除了最简单的RAID1,任何阵列都是不推荐的。
RAID0,坏一块盘,所有的数据丢失,排除。
RAID5,如果你用的是4*4T的硬盘,那一块硬盘坏掉后,RAID重建失败的概率是62%,用企业级别硬盘的话失败的概率就降低为2-9%,这个是和硬盘容量大小、硬盘读取错误率有关。详见:磁盘阵列Raid
3.3、ZFS
zfs居然不能扩容:不能添加新硬盘,不能改变zfs模式,排除
3.4、unRAID/FlexRAID/SnapRAID
校验盘和数据盘分开的方式,如果有较多块硬盘,比如大于4块,还是比较合适的,至少比RAID5靠谱。但是读写速度上不去,一般只能单块硬盘,当然可以加SSD缓存的方式。
3.5、理想方案
1、在同一台服务器上,2块硬盘组成RAID1,可以保证任何一块硬盘坏了,数据不丢失,服务不中断。(高要求,高保障,如果可靠性没那么高,可以用单盘)
2、在同一网内的不同服务器上(实在不行,在同一台服务器上也行),单块硬盘,每天晚上做数据同步,防止操作误删除、中病毒了、服务器物理损坏(比如服务器烧掉了)等,还可以恢复昨天的数据。
3、在异地,每周做一次数据同步,可以防止服务器中勒索病毒,当天没发现。
参考资料