这是有关RAID级别的规范问题。

什么是:



通常使用的RAID级别(包括RAID-Z系列)?
它们是常见的部署方法吗?
每个都有哪些优点和缺陷?


评论

@ erimar77 StackExchange网络的重点是收集SE网络中指定主题的所有知识。这意味着Wikipedia上的数据对任务毫无用处。我对RAID非常熟悉,因此不需要答案,但这只是一个典型的问题。圆锥形问题是对我们可以将所有重复项都指向的一个常见问题的明确答案。不接受“仅在谷歌上搜索”或“它在维基百科上”。维基百科上的文章非常好。

复制到超级用户,我可以在那里复制VTC。请复制答案给“超级用户”(或让我现在复制它)。

#1 楼

RAID:为什么和何时

RAID代表独立磁盘冗余阵列(有些被教导为“便宜”以指示它们是“普通”磁盘;历史上曾经有内部冗余磁盘,它们非常昂贵;因为缩略语已不再适用。)

在最一般的级别上,RAID是一组作用于相同读取和写入的磁盘。 SCSI IO在卷(“ LUN”)上执行,并且以提高性能和/或增加冗余的方式将它们分配到基础磁盘。性能提高是条带化的功能:数据分散在多个磁盘上,以允许读写操作同时使用所有磁盘的IO队列。冗余是镜像的功能。整个磁盘可以保留为副本,或者单个条带可以多次写入。或者,在某些类型的突袭中,不是逐位复制数据,而是通过创建包含奇偶校验信息的特殊条带来获得冗余,该条带可用于在硬件故障的情况下重新创建任何丢失的数据。

有几种配置可提供不同级别的这些好处,这里介绍了这些配置,每种配置都有着性能或冗余的偏见。

评估哪种RAID级别有效的重要方面对于您而言,取决于它的优势和硬件要求(例如:驱动器数量)。

大多数这些类型的RAID(0,1,5)的另一个重要方面是它们不能确保完整性数据,因为它们是从存储的实际数据中抽象出来的。因此RAID无法防止损坏的文件。如果文件以任何方式损坏,则损坏将被镜像或初始化并提交到磁盘。但是,RAID-Z确实声称可以提供数据的文件级完整性。




直接连接的RAID:软件和硬件

可以在直接连接的存储上实现RAID的两层:硬件和软件。在真正的硬件RAID解决方案中,有一个专用的硬件控制器,其处理器专用于RAID计算和处理。它通常还具有一个由电池供电的高速缓存模块,因此即使断电后也可以将数据写入磁盘。当系统没有完全关闭时,这有助于消除不一致情况。一般来说,好的硬件控制器比软件控制器具有更好的性能,但它们也具有很高的成本并增加了复杂性。

软件RAID通常不需要控制器,因为它不使用专用的控制器。 RAID处理器或单独的缓存。通常,这些操作直接由CPU处理。在现代系统中,尽管会产生一些边际延迟,但这些计算消耗的资源最少。 RAID由操作系统直接处理,对于FakeRAID,则由伪控制器处理。

通常来说,如果有人要选择软件RAID,则应避免使用FakeRAID并对其系统使用OS本地软件包,例如Windows中的动态磁盘,Linux中的mdadm / LVM或Windows中的ZFS。 Solaris,FreeBSD和其他相关发行版。 FakeRAID使用硬件和软件的组合,导致硬件RAID的最初外观,但导致软件RAID的实际性能。此外,将阵列移动到另一个适配器通常非常困难(如果原始适配器出现故障)。



集中式存储

其他地方RAID通常在集中存储设备上,通常称为SAN(存储区域网络)或NAS(网络附加存储)。这些设备管理自己的存储,并允许连接的服务器以各种方式访问​​存储。由于在相同的几个磁盘上包含多个工作负载,因此通常需要具有高冗余级别。

NAS和SAN之间的主要区别在于块与文件系统级别的导出。 SAN导出整个“块设备”,例如分区或逻辑卷(包括构建在RAID阵列顶部的设备)。 SAN的示例包括光纤通道和iSCSI。 NAS导出“文件系统”,例如文件或文件夹。 NAS的示例包括CIFS / SMB(Windows文件共享)和NFS。



RAID 0

以下情况很好:不惜一切代价提速! br />
坏情况:您关心数据

RAID0(又称条带化)有时被称为“驱动器发生故障时将剩余的数据量”。它确实违反了“ RAID”的概念,其中“ R”代表“冗余”。

RAID0接收您的数据块,将其分割为与磁盘一样多的块(2磁盘→2个磁盘,3个磁盘→3个磁盘),然后将每块数据写入单独的磁盘。

这意味着单个磁盘故障会破坏整个阵列(因为您拥有Part 1和第2部分,但没有第3部分),但是它提供了非常快速的磁盘访问。

它不经常在生产环境中使用,但是可以在您拥有严格的临时数据且可以迷失了方向。它通常用于缓存设备(例如L2Arc设备)。

总可用磁盘空间是阵列中所有磁盘加在一起的总和(例如3x 1TB磁盘= 3TB空间) )。




RAID 1

好的情况:磁盘数量有限但需要冗余
<发生错误的情况:您需要大量的存储空间

RAID 1(aka Mirroring)会获取您的数据并在两个或多个磁盘(虽然通常只有2个磁盘)上相同地复制它们。如果使用了两个以上的磁盘,则相同的信息将存储在每个磁盘上(它们都是相同的)。当磁盘少于三个时,这是确保数据冗余的唯一方法。

RAID 1有时可以提高读取性能。 RAID 1的某些实现将从两个磁盘读取以使读取速度加倍。有些只会从其中一张磁盘读取,这不会提供任何其他速度优势。其他人将从两个磁盘读取相同的数据,以确保每次读取时阵列的完整性,但这将导致与单个磁盘相同的读取速度。

通常用于具有非常高存储容量的小型服务器。磁盘扩展很少,例如1RU服务器可能仅具有两个磁盘的空间,或者在需要冗余的工作站中。由于“丢失”空间的开销很大,因此对于小容量,高速(和高成本)驱动器而言,它的成本高昂,因为您需要花费两倍的钱才能获得相同级别的可用存储。

总可用磁盘空间是阵列中最小磁盘的大小(例如2x 1TB磁盘= 1TB空间)。



>
RAID 1E

1E RAID级别类似于RAID 1,因为数据始终写入(至少)两个磁盘。但是与RAID1不同,它可以通过简单地在几个磁盘之间交错数据块来实现奇数个磁盘。

性能特性类似于RAID1,容错性类似于RAID10。可以扩展此方案。到三个以上的奇数个磁盘(尽管很少被称为RAID 10E)。




RAID 10

很好何时:您想要速度和冗余

糟糕:不能:失去一半磁盘空间

RAID 10是RAID 1和RAID 0的组合。 1和0的顺序非常重要。假设您有8个磁盘,它将创建4个RAID 1阵列,然后在4个RAID 1阵列之上应用RAID 0阵列。它至少需要4个磁盘,并且必须成对添加其他磁盘。

这意味着每对中的一个磁盘可能发生故障。因此,如果您拥有具有磁盘A1,A2,B1,B2,C1,C2,D1,D2的磁盘组A,B,C和D,则每个磁盘组(A,B,C或D)可能会丢失一个磁盘,一个正常运行的阵列。

但是,如果您丢失了同一组中的两个磁盘,则该阵列将完全丢失。您可能会丢失(但不能保证)多达50%的磁盘。

可以保证RAID 10的高速度和高可用性。

RAID 10是非常常见的RAID级别,尤其是在大容量驱动器中,其中单个磁盘故障使重建RAID阵列之前发生第二个磁盘故障的可能性更大。在恢复过程中,性能降级远低于RAID 5,因为它只需从一个驱动器读取即可重建数据。

可用磁盘空间为总空间的50% 。 (例如8个1TB驱动器= 4TB可用空间)。如果使用不同的大小,则每个磁盘只会使用最小的大小。即3或5磁盘RAID10。




RAID 01

良好时机:从不


错误的情况:总是


这与RAID 10相反。它将创建两个RAID 0阵列,然后将RAID 1放在顶部。这意味着您可能会丢失每组(A1,A2,A3,A4或B1,B2,B3,B4)中的一个磁盘。在商业应用中很少见到,但可以与软件RAID一起使用。

绝对要清楚:


如果您有RAID10阵列, 8个磁盘和一个裸盘(我们将其称为A1),那么您将拥有6个冗余磁盘和1个无冗余磁盘。如果另一个磁盘消失了,则您的阵列仍有85%的机会在运行。
如果您的RAID01阵列具有8个磁盘和一个裸片(我们将其称为A1),那么您将拥有3个冗余磁盘和4个无冗余磁盘。如果另一个磁盘消失了,则阵列仍有43%的机会运行。

它没有提供RAID 10以外的额外速度,但是冗余性却大大降低,应不惜一切代价避免。


RAID 5

好的以下情况:您想要平衡冗余和磁盘空间,或者读取操作几乎是随机的

以下情况不好:随机写入工作负载或大型驱动器

几十年来,RAID 5一直是最常用的RAID级别。它提供了阵列中所有驱动器的系统性能(小的随机写入除外,这会产生少量开销)。它使用简单的XOR操作来计算奇偶校验。在单个驱动器发生故障时,可以使用已知数据的XOR操作从其余驱动器中重建信息。

不幸的是,如果驱动器发生故障,则重建过程将占用大量IO。 RAID中的驱动器越大,重建所需的时间就越长,并且第二个驱动器发生故障的机会就越大。由于大型慢速驱动器都需要重建大量数据,而要处理的性能却低得多,因此通常不建议在7200 RPM或更低的速度下使用RAID5。

也许是最关键的在消费类应用中使用RAID 5阵列时,其问题是,几乎可以保证当总容量超过12TB时它们会发生故障。这是因为SATA使用者驱动器的不可恢复读取错误(URE)率为每1014位一个,即〜12.5TB。

如果我们以具有七个2 TB驱动器的RAID 5阵列为例:当一个驱动器发生故障时,剩下六个驱动器。为了重建阵列,控制器需要读取每个2 TB的六个驱动器。查看上图,几乎可以肯定,在重建完成之前,还将有另一个URE发生。一旦发生这种情况,阵列及其上的所有数据都会丢失。


http://www.zdnet.com/article/why-raid-5-stops-working-in-2009

但是,大多数硬盘制造商已将其较新的驱动器的URE额定值提高到1015位中的一个,这在一定程度上缓解了消费类驱动器中的URE /数据丢失/阵列故障以及RAID 5问题。与往常一样,购买前请检查规格表!


https://www.zdnet.com/article/why-raid-5-still-works-usually/

还必须将RAID 5置于可靠的(由电池供电)写缓存之后。这样可以避免小写操作的开销,以及写操作失败时可能发生的不稳定行为。

RAID 5是向阵列添加冗余存储的最具成本效益的解决方案。 ,因为它只需要丢失1个磁盘(例如12x 146GB磁盘= 1606GB可用空间)。它至少需要3个磁盘。




RAID 6

以下情况很好:您想使用RAID 5,但是您的磁盘太大或太慢

以下情况不正确:您有较高的随机写入工作量

RAID 6与RAID 5类似,但是它使用两个值得奇偶校验的磁盘代替仅一个(第一个是XOR,第二个是LSFR),因此您可以从阵列中丢失两个磁盘而不会丢失数据。写损失要高于RAID 5,磁盘空间也要少一。

值得考虑的是,最终RAID 6阵列会遇到与RAID 5类似的问题。更大的驱动器会导致更长的重建时间和更多的潜在错误,最终导致整个阵列发生故障并在重建完成之前丢失所有数据。



http://www.zdnet.com/article/why-raid-6-stops-working-in-2019
http:// queue .acm.org / detail.cfm?id = 1670144




RAID 50

当以下情况很好:需要放在单个阵列中的磁盘数量,并且由于容量原因,无法选择RAID 10

以下情况很糟糕:您有太多的磁盘以至于在重建完成之前,或者当您有很多同时发生故障时,没有太多磁盘

RAID 50是嵌套级别,类似于RAID10。它结合了两个或多个RAID 5阵列,并在RAID 0中对数据进行条带化。磁盘冗余,只要从不同的RAID 5阵列丢失了多个磁盘即可。

在RAID 50中,磁盘容量为n-x,其中x是交叉划分的RAID 5的数量。例如,如果一个简单的6磁盘RAID 50(最小),则如果两个RAID 5中有6x1TB磁盘,然后将这些磁盘条带化成为RAID 50,则将有4TB可用存储空间。


RAID 60

很好的情况:您具有与RAID 50类似的用例,但需要更多的冗余性

不当的情况:您没有足够的使用空间阵列中的磁盘数量

RAID 5到RAID 60就像RAID 5到RAID50。本质上,您有多个RAID 6,然后将数据分条到RAID 0中。允许集合中任何单个RAID 6的最多两个成员失败而不会丢失数据。 RAID 60阵列的重建时间可能很长,因此,为阵列中的每个RAID 6成员提供一个热备用通常是一个好主意。

在RAID 60中,磁盘容量为n-2x,其中x是交叉划分的RAID 6的数量。例如,如果一个简单的8磁盘RAID 60(最小),如果在两个RAID 6中有8x1TB磁盘,然后将它们分割成RAID 60,则将有4TB可用存储空间。如您所见,这提供了与RAID 10在8个成员阵列上相同的可用存储量。尽管RAID 60会稍微冗余一些,但重建时间会大大增加。通常,只有在磁盘数量很多的情况下,才需要考虑使用RAID60。


RAID-Z

在以下情况下很好:支持它的系统

不当:性能要求硬件RAID加速

RAID-Z的解释有点复杂,因为ZFS会从根本上改变存储和文件系统的交互方式。 ZFS包含卷管理(RAID是卷管理器的功能)和文件系统的传统角色。因此,ZFS可以在文件的存储块级别而不是卷的条带级别执行RAID。这正是RAID-Z所做的,将文件的存储块跨多个物理驱动器写入,包括每组条带的奇偶校验块。

一个示例可以使这一点更加清楚。假设ZFS RAID-Z池中有3个磁盘,块大小为4KB。现在,您将恰好16KB的文件写入系统。 ZFS会将其分成四个4KB块(与普通操作系统一样);然后它将计算两个奇偶校验块。这六个块将放置在驱动器上,类似于RAID-5分配数据和奇偶校验的方式。这是对RAID5的改进,因为它不需要读取现有数据条带来计算奇偶校验。

另一个例子建立在前面的例子上。说文件只有4KB。 ZFS仍然必须构建一个奇偶校验块,但是现在写入负载已减少到2个块。第三个驱动器将免费服务于任何其他并发请求。只要写入的文件不是池块大小的倍数乘以驱动器数量再减去一个驱动器(即[文件大小] <> [块大小] * [驱动器-1]),就会看到类似的效果。 />
ZFS同时处理卷管理和文件系统,这意味着您不必担心对齐分区或条带块大小。 ZFS使用推荐的配置自动处理所有问题。

ZFS的性质抵消了一些经典的RAID-5 / 6警告。 ZFS中的所有写入均以写时复制的方式完成;写操作中所有更改的块都将写入磁盘上的新位置,而不是覆盖现有块。如果由于某种原因写入失败,或者系统在写入过程中失败,则写入事务要么完全在系统恢复后发生(借助于ZFS意向日志),要么根本不发生,从而避免了潜在的数据损坏。 RAID-5 / 6的另一个问题是在重建过程中潜在的数据丢失或无声数据损坏。常规的md操作可以帮助在导致数据丢失之前捕获数据损坏或驱动器问题,并且对所有数据块进行校验和将确保捕获到重建期间的所有损坏。

RAID-Z的主要缺点仍然是软件突袭(并且遭受CPU计算写负载而不是让硬件HBA卸载它所产生的相同的较小延迟)。将来,支持ZFS硬件加速的HBA可能会解决此问题。

其他RAID和非标准功能

由于没有中央机构强制执行任何标准功能,因此各种RAID级别已经发展并通过普遍使用进行了标准化。许多供应商生产的产品都与上述描述有所不同。对于他们来说,发明一些新颖的营销术语来描述上述概念之一也是很普遍的(这在SOHO市场中最常见)。可能的话,请尝试让供应商实际描述冗余机制的功能(大多数人会自愿提供此信息,因为实际上不再有秘密的秘诀了。)

值得一提的是,类似RAID 5允许您仅使用两个磁盘启动阵列的实现。它将在一个条带上存储数据,在另一个条带上存储奇偶校验,类似于上面的RAID 5。这将类似于RAID 1,但具有奇偶校验计算的额外开销。优点是您可以通过重新计算奇偶校验将磁盘添加到阵列。

评论


我目前没有时间来添加此信息,但是解释如何使用不可恢复的读取错误率来估计可用于特定磁盘的最大RAID 5集将是一个好主意。

–休伯特·卡里奥(Hubert Kario)
2012年1月20日上午9:32

很棒的总结!对于RAID5和RAID6,我还有一个补充:通常人们考虑到由大量具有高容量的主轴或磁盘组成的阵列的整体可靠性(灾难性阵列故障的可能性)。他们基于重建第一个磁盘时发生第二次故障的可能性来执行此操作。我个人的经验法则是当主轴数大于8或单个驱动器大于1TB时为RAID6。我一直找不到规范的计算器,但是Google和已知的重建时间将帮助您很好地进行计算。

– JGurtz
2012年4月11日18:55



可能需要在此处添加注释,说明Linux软件RAID10是非标准的。它允许不寻常且可能有用的布局。 zh.wikipedia.org/wiki/非标准_RAID_levels#Linux_MD_RAID_10

– Zoredache
13-10-11在19:47

可能值得澄清写惩罚和条带合并。 RAID 2或3可能值得一提,但我不知道任何“真正的”实现。但是-NetApp仍使用RAID4(RAID-DP本质上是具有额外奇偶校验驱动器的RAID-4。)

–Sobrique
2014年8月28日15:32

RAID 6:LSFR应该是LFSR(线性反馈移位寄存器)吗?

–用户
16年11月29日在15:03

#2 楼

RAID 100万!!!!

128个磁盘,因此读取速度很快,写入操作很恐怖,但我想像的非常可靠,哦,您将获得可用空间的1/128,所以不是很好从预算的角度来看。不要用闪存驱动器这样做,我试着放火烧了。。。



评论


天啊。菜刀现在失去了理智。

– MDMarra
2011年12月9日在16:27

我算错了吗?

–Chopper3
2011年12月9日在16:28

你知道我会真正建立这个权利吗?

–Chopper3
2011年12月9日下午16:31

Raid 1000000至少需要128个磁盘,但是它将提供64个磁盘的存储空间,在最坏情况下的写入性能与Raid 1相同,并且任何2个相邻的驱动器故障都会杀死该阵列。您正在描述Raid 0111111,它将具有非常好的可靠性(Raid 11111110在平均上必须具有更好的可靠性。)

–凯文·卡斯卡特(Kevin Cathcart)
2011年12月9日在19:08

真可爱二进制RAID级别。下一步是什么?

–用户
15年3月13日在12:19