这是关于RAID级别的典型问题 。
什么是:
RAID代表独立磁盘冗余arrays(一些教导“廉价”,表明它们是“正常”磁盘;历史上有内部冗余磁盘,非常昂贵,因为这些不再可用的首字母缩写已经适应)。
在最普通的级别上,RAID是一组在同一读写操作上运行的磁盘。 SCSI IO在卷(“LUN”)上执行,并以一种引入性能增加和/或冗余增加的方式分配给底层磁盘。 性能提高是条带化的function:数据分布在多个磁盘上,允许读取和写入同时使用所有磁盘的IO队列。 冗余是镜像的function。 整个磁盘可以保存为副本,或者可以多次写入单独的条带。 或者,在某些types的raid中,不是逐位复制数据,而是通过创build包含奇偶校验信息的特殊条带来获得冗余,在发生硬件故障的情况下可用来重新创build任何丢失的数据。
有几种configuration可以提供不同级别的这些好处,这些好处在这里涵盖,每个configuration都有一个偏向于性能或冗余的方面。
评估哪个RAID级别适合您的一个重要方面取决于其优点和硬件要求(例如:驱动器数量)。
这些types的RAID(0,1,5) 大部分的另一个重要方面是,它们不能保证数据的完整性,因为它们是从存储的实际数据中抽象出来的。 所以RAID不能防止损坏的文件。 如果一个文件被任何方式破坏,腐败将被镜像或分区,并提交到磁盘,无论如何。 但是, RAID-Z确实要求提供数据的文件级完整性 。
在直接连接的存储上有两层可以实现RAID:硬件和软件。 在真正的硬件RAID解决scheme中,有专用的硬件控制器,专用于RAID计算和处理的处理器。 它通常还有一个由电池供电的高速caching模块,因此即使在电源出现故障后,也可以将数据写入磁盘。 这有助于消除系统未完全closures时的不一致性。 一般来说,好的硬件控制器的性能比软件对手要好,但是它们也有相当大的成本和复杂性。
软件RAID通常不需要控制器,因为它不使用专用RAID处理器或单独的高速caching。 通常这些操作是由CPU直接处理的。 在现代系统中,这些计算消耗最less的资源,尽pipe会产生一些边际延迟。 RAID由FakeRAID直接处理,或由人工控制器处理 。
一般来说,如果有人select软件RAID,他们应该避免使用FakeRAID,并为他们的系统使用操作系统本地软件包,例如Windows中的Dynamic Disks,Linux中的mdadm / LVM,Solaris中的ZFS,FreeBSD以及其他相关发行版。 FakeRAID使用硬件和软件的组合,导致硬件RAID的初始显示,而软件RAID的实际性能。 另外,将arrays移动到另一个适配器(如果原始失败)通常是非常困难的。
另一个地方RAID是常见的集中式存储设备,通常称为SAN(存储区域networking)或NAS(networking附加存储)。 这些设备pipe理自己的存储并允许连接的服务器以各种方式访问存储。 由于多个工作负载包含在同一个磁盘上,通常需要具有高冗余度。
NAS和SAN之间的主要区别在于块与文件系统级导出。 SAN导出整个“块设备”,如分区或逻辑卷(包括构build在RAIDarrays之上的块)。 SAN的例子包括光纤通道和iSCSI。 NAS导出“文件系统”,如文件或文件夹。 NAS的例子包括CIFS / SMB(Windows文件共享)和NFS。
RAID0(也称为条带)有时被称为“当驱动器出现故障时您将留下的数据量”。 它实际上是针对“RAID”,其中“R”代表“Redundant”。
RAID0会将您的数据块分割为与磁盘相同的块(2个磁盘→2个磁盘,3个磁盘→3个磁盘),然后将每个数据写入单独的磁盘。
这意味着单个磁盘故障会破坏整个arrays(因为您拥有第1部分和第2部分,但没有第3部分),但它提供了非常快速的磁盘访问。
它在生产环境中并不经常使用,但可用于严格限制临时数据丢失而不会造成影响的情况。 它通常用于caching设备(如L2Arc设备)。
总可用磁盘空间是数组中所有磁盘的总和(例如,3x 1TB磁盘= 3TB的空间)

RAID 1(也称为镜像)将您的数据复制到两个或更多磁盘上(尽pipe通常只有两个磁盘)。 如果使用两个以上的磁盘,则每个磁盘上都存储相同的信息(它们全部相同)。 只有less于三个磁盘时,才能确保数据冗余。
RAID 1有时会提高读取性能。 RAID 1的某些实现将从两个磁盘读取,以提高读取速度。 有些只能从其中一个磁盘读取,这不会提供任何额外的速度优势。 其他人将从两个磁盘读取相同的数据,确保每次读取时arrays的完整性,但是这将导致与单个磁盘相同的读取速度。
它通常用于磁盘扩展很less的小型服务器,例如1RU服务器,可能只有两个磁盘空间或需要冗余的工作站。 由于“损失”空间的高昂开销,使用小容量,高速(和高成本)驱动器可能导致成本过高,因为您需要花费两倍的资金才能获得相同级别的可用存储空间。
总可用磁盘空间是arrays中最小磁盘的大小(例如2个1TB磁盘= 1TB的空间)。

1E RAID级别与RAID 1类似,因为数据总是写入(至less)两个磁盘。 但是,与RAID1不同的是,只需在多个磁盘之间交错数据块,就可以支持奇数个磁盘。
性能特征与RAID1类似,容错性与RAID 10类似。该scheme可以扩展到超过三个的奇数磁盘(可能称为RAID 10E,尽pipe很less)。

RAID 10是RAID 1和RAID 0的组合。1和0的顺序非常重要。 假设您有8个磁盘,它将创build4个RAID 1arrays,然后在4个RAID 1arrays的顶部应用RAID 0arrays。 它至less需要4个磁盘,并且必须成对添加额外的磁盘。
这意味着每一对中的一个磁盘可能会失败。 所以,如果你有A1,A2,B1,B2,C1,C2,D1,D2盘的A,B,C和D盘,你可以从每盘(A,B,C或D)丢失一盘,一个正常的数组。
但是,如果从同一组丢失两个磁盘,则该arrays完全丢失。 您可能会损失(但不能保证)50%的磁盘。
在RAID 10中保证高速度和高可用性。
RAID 10是一个非常常见的RAID级别,特别是对于高容量的驱动器,其中单个磁盘故障在RAIDarrays重build之前更容易发生第二个磁盘故障。 在恢复过程中,性能下降速度远远低于RAID 5,因为它只需要从一个驱动器读取数据就可以重build数据。
可用磁盘空间是总空间总和的50%。 (例如,8x 1TB驱动器= 4TB的可用空间)。 如果使用不同的大小,则每个磁盘只能使用最小的大小。
值得注意的是,linux内核的raid驱动程序叫做md,可以用raid10configuration一些奇怪的驱动器,例如3或5个磁盘raid10:
https://en.wikipedia.org/wiki/Non-standard_RAID_levels#Linux_MD_RAID_10

这是RAID 10的反面。它创build两个RAID 0arrays,然后在顶部放置一个RAID 1。 这意味着您可能会损失每个集合(A1,A2,A3,A4或B1,B2,B3,B4)中的一个磁盘。 在商业应用程序中很less见,但是可以使用软件RAID。
要绝对清楚:
它不提供超过RAID 10的额外速度,但大大减less冗余,应该不惜一切代价避免。
数十年来,RAID 5一直是最常用的RAID级别。 它提供了arrays中所有驱动器的系统性能(除了小的随机写入,这会产生轻微的开销)。 它使用一个简单的XOR操作来计算奇偶校验。 在单个驱动器发生故障时,可以使用已知数据上的XOR操作从其余驱动器重build信息。
不幸的是,在发生驱动器故障的情况下,重build过程非常密集。 RAID中的驱动器越大,重build的时间越长,发生第二次驱动器故障的可能性也越大。 由于大型caching驱动器的重build数据要多得多,性能也要差得多,所以通常不推荐使用7200RPM或更低的RAID5。
raid5的最大大小几乎能保证重build产生另一个驱动器故障,造成所有数据丢失,大约是12TB。
这个数字基于驱动器制造商通常报告的10 ^ 14 SATA驱动器的不可恢复的读取错误(URE)率。 实际上这意味着每100,000亿位驱动器将会抛出一个URE。 这或多或less等于12TB。
如果我们以七个2TB驱动器为例来说明RAID 5。 当驱动器出现故障时,剩下六个驱动器。 为了重buildRAID,控制器需要通过6个驱动器读取每个2TB的数据。 看上面的图,几乎可以确定在重build结束之前会发生另一个URE。 一旦发生这种情况,突袭5和其上的所有数据都将丢失。
将RAID 5放在可靠的(电池支持的)写caching之后也是必要的。 这样可以避免小写操作的开销,以及在写入过程中发生故障时可能发生的片状行为。
RAID 5是向arrays添加冗余存储的最具成本效益的解决scheme,因为它只需要损失1个磁盘(例如,12x 146GB磁盘= 1606GB的可用空间)。 它至less需要3个磁盘。

RAID 6类似于RAID 5,但是它使用两个磁盘而不是一个磁盘(第一个是XOR,第二个是LSFR),因此可以从arrays中丢失两个磁盘而不会丢失数据。 写入惩罚高于RAID 5,并且您有一个较小的磁盘空间。
值得考虑的是,最终raid6会遇到与raid类似的问题5。 更大的驱动器会导致更大的重build时间和更多的潜在错误。 最终在重build之前导致RAID和所有数据的失败。

RAID 50是一个嵌套级别,与RAID 10非常相似。它将RAID 5arrays和条带数据组合在一个RAID 0中。只要多个磁盘从不同的 RAID 5中丢失,就会同时提供性能和多个磁盘冗余arrays。
在RAID 50中,磁盘容量是nx,其中x是条带化的RAID 5的数量。 例如,如果一个简单的6磁盘RAID 50(尽可能最小),如果在两个RAID 5中有6x1TB磁盘,然后将其划分为RAID 50,那么您将拥有4TB的可用存储容量。
RAID 6是指RAID 60,因为RAID 5是指RAID 50。基本上,您有多个RAID 6,然后在RAID 0中将数据分条。此设置允许集合中的任何单个RAID 6的最多两个成员失败而没有数据丢失。 RAID 60arrays的重build时间可能相当长,因此arrays中的每个RAID 6成员都有一个热备用通常是个好主意。
在RAID 60中,磁盘容量是n-2x,其中x是条带化的RAID 6的数量。 例如,如果一个简单的8磁盘RAID 60尽可能小,那么如果您将两个RAID 6中的8x1TB磁盘划分为一个RAID 60,则您将拥有4TB的可用存储容量。 正如你所看到的,这给了RAID 10在8个成员arrays上所能提供的相同数量的可用存储空间。 尽pipeRAID 60会稍微冗余,但重build时间将会更长。 一般情况下,只有在拥有大量磁盘的情况下才需要考虑RAID 60。
由于ZFS彻底改变了存储和文件系统之间的交互方式,RAID-Z有点复杂的解释。 ZFS包含卷pipe理(RAID是卷pipe理器的function)和文件系统的传统angular色。 因此,ZFS可以在文件的存储块级别执行RAID,而不是在卷的条带级别执行RAID。 这正是RAID-Z的function,将文件的存储块写入多个物理驱动器,包括每个条带的奇偶校验块。
一个例子可以使这个更清楚。 假设您在ZFS RAID-Z池中有3个磁盘,则块大小为4KB。 现在你写一个文件到系统,正是16KB。 ZFS将把它分成4个4KB的块(正常的操作系统)。 那么它将计算两个校验块。 这六个块将被放置在驱动器上,类似于RAID-5如何分配数据和奇偶校验。 这是对RAID5的改进,因为没有读取现有的数据条来计算奇偶性。
另一个例子build立在以前。 说这个文件只有4KB。 ZFS将仍然需要构build一个奇偶校验块,但现在写入负载被减less到2个块。 第三个驱动器将免费为其他并发请求提供服务。 只要写入的文件不是池的块大小的倍数乘以less于一个的驱动器(即[文件大小] <> [块大小] * [驱动器-1]),就会看到类似的效果。
处理卷pipe理和文件系统的ZFS也意味着您不必担心alignment分区或条带块大小。 ZFS使用推荐的configuration自动处理所有这些。
ZFS的本质抵消了一些经典的RAID-5/6注意事项。 ZFS中的所有写入都是以写入时复制的方式完成的; 写入操作中所有更改的块都写入磁盘上的新位置,而不是覆盖现有块。 如果由于某种原因导致写入失败,或者系统在写入过程中失败,则写入事务要么在系统恢复后(在ZFS意向日志的帮助下)完全发生,要么完全不发生,从而避免潜在的数据损坏。 RAID-5/6的另一个问题是在重build期间潜在的数据丢失或无声的数据损坏; 常规的zpool scrub操作可以帮助在数据丢失之前捕获数据损坏或驱动问题,并且所有数据块的校验和将确保重build期间的所有损坏都被捕获。
RAID-Z的主要缺点是它仍然是软件RAID(并且受到CPU计算写入负载而不是让硬件HBA卸载它所引起的相同的小延迟)。 HBA支持ZFS硬件加速将来可能会解决这个问题。
由于没有中央机构执行任何标准function,所以各种RAID级别已经发展并被普遍使用标准化。 许多供应商已经生产了偏离上述说明的产品。 他们发明一些新奇的营销术语来描述上述概念之一(在SOHO市场中这种情况最为频繁)也是很常见的。 在可能的情况下,试着让供应商真正地描述冗余机制的function(大多数人会自愿提供这些信息,因为再也没有秘密了)。
值得一提的是,有RAID 5的实现允许你只用两个磁盘启动一个arrays。 它将数据存储在另一个条带和奇偶校验上,类似于上面的RAID 5。 这将像RAID 1一样执行奇偶校验计算的额外开销。 好处是您可以通过重新计算奇偶校验将磁盘添加到arrays。
还有RAID一百万!
所以读取的磁盘将会是快速,可怕的写入,但我想象得非常可靠,哦,你会得到1/128的可用空间,所以从预算的angular度来看不是太好。 不要用闪存驱动器做这个,我尝试着点燃大气。
