拍的照片越来越多,存到 Google Photo 上或者 Google Drive 上不放心,还是放在自己手里舒服,而且归档整理也更方便。打算组个小服务器或者 NAS,先学习一下存储技术。
RAID (Redundant Array of Independent Disks), 独立磁盘冗余阵列,是通过多块磁盘组成阵列,来达到 提高性能 或/并 提高数据可靠性 的一种技术。
RAID 可能有(因为具体情况具体分析)的特点包括:
- 容量大
- 性能强
- 可靠性高
RAID 有不同的类型,你见过/用过的大概率有 RAID 0, RAID 1, RAID 5, RAID 10(RAID 1 + 0)等,下面介绍一下不同的 RAID。
要理解 RAID,可以这样思考:如果让你设计存储系统,你会怎么设计呢?最简单的方式就是一大堆磁盘堆在一起,一个一个的顺序存储文件,这种设计叫做 JBOD(Just a Bunch Of Disks),逻辑简单,易于扩展。
JBOD 太简单了,没有任何“设计”在里边,上面的设计稍稍改变一下,就能极大的提高性能:假设我们有 5 个磁盘,我们把要存储的文件均匀的分成 5 份,同时存储。通常数据的写入速度是受限于磁盘的写入速度的,如果同时把原文件的 1 / 5 写入到 5 个磁盘里,大概就只花费原来 1/5 的时间。这就是 RAID 0。至少需要 2 块磁盘才可以组成 RAID 0。
RAID 0 是最快的 RAID 存储方式,但是 RAID 0 缺少对数据的保护,可靠性低:文件被均匀的分到每个磁盘里,任何一个磁盘损坏,所有的文件就都损坏了,因为每个文件都缺了一部分。
要提高存储的可靠性,最简单直接的方法就是做备份。在写入时,每个文件都同时写入到两个(或以上)磁盘里,这样写入速度与原始磁盘几乎相同,提高了存储的可靠性,坏了一个磁盘,还有备份。这种设计强调对数据的保护,提高可靠性,与 RAID 0 形成了鲜明的对比,叫做 RAID 1。
组成 RAID 1 的磁盘阵列,可用空间降为原来的 50%,速度可能会稍有降低,阵列中坏了一个盘时,可以直接换掉,RAID 1 会自动将备份的数据写入新盘,完成备份。
RAID 0 注重速度,RAID 1 注重安全。这时聪明的你可能想到了,如果同时使用 RAID 1 和 RAID 0 ,不就又快又安全了吗? 先将几块磁盘组成 RAID 1 保护数据,外面套一层 RAID 0 提高写入速度。每个 RAID 都是黑箱,里面的 RAID 1 对外就是一个磁盘,里面有数据保护,外面的 RAID 0 分配数据,提高写入速度。这就是 RAID 1 + 0, 经常写作 RAID 10。至少需要 4 块磁盘才可以组成 RAID 10。
同理还有 RAID 01, 里层是 RAID 0, 外层是 RAID 1,与 RAID 10 相比,两者存储空间相同,写入速度相同,但是 RAID 01 的安全性低于 RAID 10,自己想想为什么?
RAID 10 又快又安全,也有缺点:每个磁盘都有一个独立的备份,成本高。有没有办法减小备份盘的数量,降低成本呢?
有。人们设计了不同的算法,来计算/校验每个磁盘上的数据,例如使用 XOR 校验。一个例子:一共 8 块磁盘,文件被分为 7 份,同时还有 1 份校验,一共 8 份数据,存在 8 个磁盘上,假如 1 个磁盘坏了,可以根据剩下的 7 块原始数据,计算出坏盘的数据。每个磁盘存入不同文件的校验,每个磁盘都是其他磁盘的“备份”。这样,就是 RAID 5。至少需要 3 块磁盘才可以组成 RAID 5。
可以这样理解:在 RAID 10 和 RAID 1/0 之间的一种设计,比 RAID 10 略差,比 RAID 0/1 稍好,就起名 RAID 5 了。
在磁盘很多时,RAID 5 可以提供接近 RAID 0 的性能,同时提高了数据的可靠性,也没有“浪费”很多磁盘空间,是目前应用广泛的一种 RAID 设计。
但是随着磁盘空间的增大,校验的时间也在增长。RAID 5 的单盘备份全体也降低了数据的可靠性:假如在一块磁盘坏了后还没完成新盘校验/备份时,又有一块盘坏了,那数据就丢失了。针对这种情况,人们这样修改 RAID 5:再增加一块校验块,一个文件有两个校验块,每个校验块都可以完成对数据的恢复。这就是 RAID 6。至少需要 4 块磁盘才可以组成 RAID 6。
RAID 6 与 RAID 5 相比,降低了写入速度(因为多了一次校验),提高了性能,RAID 6 最多支持 2 块磁盘同时坏掉,两块磁盘同时损坏的可能性很小,因此 RAID 6被认为足够安全。
其他的 RAID 设计,例如 RAID 3, RAID 4,因为综合性能不如 RAID 5 等,应用很少(我本人没见到过)。还有其他类似 RAID 10 的组合,例如 RAID 50, RAID 60。还有一些私有的 RAID ,一般是存储公司自己设计的,这里不做讨论。
参考: www.seagate.com/manuals/network-storage/business-storage-nas-os/raid-modes/