RAID5是否比RAID1更强大


12

我将用Linux软件RAID1阵列替换旧的硬件RAID5阵列。我在和一个朋友聊天,他声称RAID5比RAID1更强大。

他声称,使用RAID5时,读取奇偶校验数据是为了确保所有驱动器都返回正确的数据。他进一步声称,在RAID1上,驱动器上发生的错误将不会被注意到,因为对RAID1不会进行任何此类检查。

我可以看到这可能是真的,但也可以看到,这一切都取决于如何有问题的RAID系统中实现。当然一个RAID5系统不具备阅读和检查读取和RAID1系统奇偶校验数据可以很容易地从读取所有驱动器读取检查他们都持有相同的数据,因此实现稳健的同一水平(造成相应的性能损失)。

所以问题是,现实世界中的RAID5 / RAID1系统实际上会做什么?RAID5系统是否检查读取的奇偶校验数据?是否有RAID1系统可以读取所有驱动器并比较读取的数据?

Answers:


22

RAID-5是容错解决方案,而不是数据完整性解决方案

请记住,RAID代表廉价磁盘冗余阵列。磁盘是冗余的基本单位-RAID并不真正在乎数据。您购买的解决方案使用WAFL或ZFS等文件系统来解决数据冗余和完整性。

RAID控制器(硬件或软件)在读取时不验证块的奇偶校验。这是运行RAID-5的主要风险-如果在驱动器上遇到部分介质故障(坏块未标记为“坏”的情况),则您现在处于数据静默状态损坏了。

Sun的RAID-Z / ZFS 实际上提供了端到端的数据完整性,我怀疑随着CPU可用内核数量的不断增加,其他文件系统和RAID系统将来会提供此功能。

我认为,如果您使用的是RAID-5,那么价格会便宜。RAID 1性能更好,提供了更好的保护,并且在驱动器发生故障时不会影响生产-成本差异很小。


6

我认为答案取决于控制器/软件,例如,镜像系统只读取一对光盘中的一个,因此能够传送错误的数据是很常见的。我注意到,如果您的结果取决于该数据,则当将数据写入两张光盘时,两张光盘上的数据都会损坏.....

从SATAssure(tm)Plus下的pdf中:

“革命性的SATAssure技术使用大容量,廉价的SATA磁盘驱动器提供企业级的数据保护和可靠性。SATAssure可以在所有读取操作中运行,确保数据完整性并自动实时纠正问题-所有这些都不会像传统的性能或容量损失那样存储系统。它具有重新启动单个驱动器的新功能,从而减少了驱动器RMA。”

有趣的是,有些制造商对他们总是计算奇偶校验这一事实大惊小怪,这使我认为在硬件控制器上这相对不常见。还要注意的是,诸如ZFS和WAFL(netapp)的系统会为每次读取执行奇偶校验计算。


该链接看起来很有趣,但实际上在页面或小册子上的任何地方都明确表示他们重新计算了所有阅读的奇偶性吗?
andynormancx

我从pdf中添加了一个报价。请注意,S2A盒是安静的高端产品。
詹姆斯

3

对于RAID-5,通常仅在阵列重建时读取奇偶校验,而不在一般读取时读取奇偶校验。这样一来,读取就可以变得更加随机和更快(因为您不必每次要从阵列中读取1K数据时就读取和计算整个条带的奇偶校验)。

使用RAID-1,通常在可能的情况下跨驱动器进行读取,以提高读取性能。如您所述,如果RAID子系统尝试读取两个驱动器并且它们不同,则该子系统将无法知道哪个驱动器是错误的。

大多数RAID子系统都依赖驱动器在发生故障时通知控制器或计算机。

那么RAID-5是否“更强大”?答案是,这取决于。RAID-5使您可以在给定数量的磁盘上获得比RAID-1更有效的存储。尽管要提供一个磁盘以外的有效存储,RAID-1需要与RAID-0结合使用,既可以作为RAID-1阵列的条带,也可以作为跨越两个RAID-0条纹的RAID-1。

(我更喜欢前者,因为单个驱动器故障将占用单个RAID-1元素,这意味着仅单个驱动器将需要重建。对于后者,单个驱动器故障会杀死RAID-0元素,这意味着更换驱动器后,磁盘将参与重建。)

这也导致了对“幻像写入”的讨论,在该幻象写入中,驱动电子设备报告写入成功,但是无论出于何种原因,写入都不会成功写入磁盘。这确实发生了。考虑到对于RAID-5阵列,当驱动器发生故障时,该阵列必须完全读取所有幸存驱动器上的所有扇区以进行恢复。NetApp声称,大型驱动器加上大型RAID组意味着在某些情况下,重建期间发生故障的机会可能高达十分之一。因此,他们建议大型RAID组中的大型磁盘使用双重奇偶校验(我认为这与RAID-6有关)。

我在几个工程师的NetApp技术讨论中了解到了这一点。


我不会使用术语“更有效” ...“更多能力”会更合适。我认为,使我更有可能丢失数据的解决方案并不是更有效。
duffbeer703 2009年

一切都是成本-价值的权衡。RAID-5具有更高的存储成本效益,而RAID-1或RAID-1 + 0(0 + 1)具有更高的健壮性。
David Mackintosh,2009年

选择1 + 0而不是0 + 1的另一个原因是1 + 0可以承受6种可能中的4种“在替换第一个发生故障的驱动器并重建阵列之前第二个驱动器发生故障”的情况,其中0 + 1只能承受2个6个驱动器中的一个。尽管0 + 1可以在一个控制器上出现故障(其中0 + 1不能),但比驱动器故障(甚至多个驱动器故障)少得多。
David Spillett

RAID-DP(NetApp的双重奇偶校验实现)是RAID-6。RAID-6(与RAID-5不同)在功能上定义为可以在两次磁盘故障中幸免的RAID。RAID-DP与典型的RAID-6不同之处在于,它不分配奇偶校验-WAFL不会随机写入随机写入,因此分配奇偶校验不会提供任何好处。
Segfault上尉,09年

3

通常没有通用的RAID实施检查数据访问的奇偶性。我从未见过。一些RAID5实现读取奇偶校验数据以进行流读取,以防止不必要的查找(廉价的抛弃第n个块,而不是使驱动器遍历第n个块)。RAID1实现无法检查,因为它们从两个磁盘读取性能(嗯,在大多数RAID1实现中。有几个让您选择,如果一个磁盘比另一个磁盘慢得多并且不占用大量磁盘,这可能很有用。加载。)

有些人会检查背景“擦洗”。在这种情况下,RAID6胜出,因为它可以恢复数据,并且RAID5和RAID1处于相同情况,您可以识别但不能修复。(由于驱动器可能会检测到错误的CRC,返回错误并让您从奇偶校验中重写该块,因此这并非完全正确。这很常见。)

如果需要数据完整性,请在应用程序层将哈希与每个块(或记录,或对其进行分割)存储在一起。Sybase和Oracle做到了这一点(我相信是在页面级别上),而且我在很多场合都看到过它可以保存一个巨大的数据库。(例如,控制器开始返回错误数据,sybase崩溃,出现明显错误,因此,当数据库在状态不一致的故障硬件上运行时,未执行任何写操作)。

唯一的文件系统解决方案和唯一的RAID解决方案就是ZFS。


0

您的朋友是在谈论某些RAID级别中涉及的奇偶校验位,还是写入磁盘的数据的校验和

如果它们处于奇偶校验状态,则RAID1没有奇偶校验位-您具有相同数据的两个副本。磁盘应执行校验和,以确保写入磁盘的内容与通过网络传输的内容匹配

RAID5确实具有奇偶校验位。这意味着您可能会丢失RAID集中的磁盘,然后继续进行,就好像什么都没发生一样。尽管如此,仍应对写入磁盘的数据执行校验和,以确保其与传输的数据匹配

在这种情况下,校验和完全独立于RAID,该RAID可能会或可能不会对一堆磁盘执行

编辑添加:您提到从硬件RAID转移到软件RAID。首选始终是硬件RAID而不是软件RAID。如果您可以购买提供要实现的RAID级别所需的硬件,则建议您这样做。这将使所有奇偶校验计算都由RAID卡而不是主机执行。因此,释放了主机上的资源。毫无疑问,还有其他好处,但现在它们可以逃避我


他在谈论平价。他声称在RAID5上读取时会读取奇偶校验信息,并将其与来自其他磁盘的数据进行比较以检查是否没有读取错误。
andynormancx 2009年

5
在任何情况下,我都不同意您对硬件RAID而非软件的建议。使用现代硬件,如果您的服务器具有大量备用CPU(我的服务器将永远拥有),则软件RAID的速度可以与硬件一样快。同样,硬件RAID也有一些缺点,主要是在恢复情况下,您需要匹配的RAID卡。使用软件RAID,您可以将驱动器从一台计算机中取出,将其插入另一个驱动器中,而无需获得与旧驱动器完全匹配的新RAID卡。
andynormancx

我试图弄清他在说什么上下文,据我了解,校验和用于磁盘写操作(与RAID无关)。奇偶校验用于将数据块放置在不同的磁盘上,并在磁盘发生故障时重建阵列。并非在所有RAID级别上都使用奇偶校验
Ben Quick

1
请参阅en.wikipedia.org/wiki/…,以获取有关软件和硬件RAID的讨论。显然,您选择的实现方式取决于您的环境和要求。我的首选是硬件RAID而非软件RAID
Ben Quick

我了解,忘记我曾经提到过校验和。我已经更新了问题,以消除混乱。问题全在于RAID5系统是否通常在读取时检查奇偶校验数据。
andynormancx

0

我将用Linux软件RAID1阵列替换旧的硬件RAID5阵列。我在和一个朋友聊天,他声称RAID5比RAID1更强大。

这将取决于RAID实现类型(hw / sw),磁盘,RAID控制器(如果有)及其功能。

他声称,使用RAID5时,读取奇偶校验数据是为了确保所有驱动器都返回正确的数据。他进一步声称,在RAID1上,驱动器上发生的错误将不会被注意到,因为对RAID1不会进行任何此类检查。

它确实有一点点意义,但不是真的:)发生的是-如果写入了错误的数据,则将在镜像上将其发送到两个驱动器,并且在raid5奇偶校验下将生成该数据并将其分布在驱动器上。数据读/写检查由磁盘和控制器固件完成,与RAID级别无关。

So the question is, what do RAID5/RAID1 systems in the real world

真的吗?RAID5系统是否检查读取的奇偶校验数据?是否有RAID1系统可以读取所有驱动器并比较读取的数据?

就像我说的那样,检查不是raid算法的一部分,尽管某些控制器可能有其他实现。

阵列的鲁棒性取决于驱动器的质量(由于降低的RV率,2.5英寸驱动器的寿命通常比3.5英寸长;根据我的经验,从不购买maxtor SCSI / SAS驱动器-它们具有可怕的固件故障),环境(温度和湿度控制),控制器本身(它是否有BBU?固件是否最新?是真正的突袭还是伪造?),服务器中PSU的数量,UPS质量等。


恐怕您还没有回答这个问题,这正是关于RAID5的实际实际实现在检查读取的奇偶校验数据方面所做的工作。
andynormancx

0

我不知道这一点,但在我看来似乎不太可能。请记住,为了计算奇偶校验,它将必须从RAID集中的所有驱动器中读取该块,然后进行数学运算以确定正确性,而如果不是,则仅读取一个驱动器。

同样,如果您的读取少于一个块,则奇偶校验读取必须将其扩展为完整的块,而常规读取则不需要。(当然,假设RAID块大于磁盘块。我认为从磁盘读取的数据必须是完整块。如果不是,则我的观点更有效。)

因此,从我的角度来看,是的,它可以做到,但是如果这样做,那将是低效的,而且我怀疑是否会以这种方式实施。

同样,我对实际的实现还不了解。


0

RAID5系统是否检查读取的奇偶校验数据?

这确实没有任何意义。发现奇偶校验不匹配该怎么办?(您怎么知道哪个块是错误的?)

对于随机读取,检查奇偶校验会很昂贵。通常,您只需要查看单个磁盘即可为随机读取提供服务,但是如果要检查奇偶校验,则需要在每次读取时读取所有磁盘。(如果您可以采取任何措施,那仍然有意义!)

请注意,RAID-1也存在此问题-当您将RAID-1视为两个磁盘的RAID-5时,这很有意义。


0

我一直在思考这种说法,即RAID-1读取速度应该比RAID-5快,因为它可以同时读取两个驱动器。

现在,由于除非在阵列上需要重建,否则不会在RAID-5上读取奇偶校验,因此就读取而言,它实际上等于RAID-0阵列,对吗?

RAID-0通常被认为是最快的级别(尽管应将其命名为“ AID”,因为没有任何冗余)。:-D

说到Linux软件RAID,一个简单的测试(使用hdparm)证实了这一理论:我的RAID-5阵列始终显示出比RAID-1阵列更高的读取速度。

但是:性能下降的阵列似乎比正常运行的阵列慢得多!我刚刚使用Fedora 9进行了测试,该Fedora 9在具有不同RAID级别的4个WD 1 TB驱动器上运行。结果如下:

降级的RAID-5:读取速度43 MB /秒常规RAID-5:读取速度240 MB /秒(!)RAID-1:读取速度88 MB /秒

由于RAID-1和RAID-5中允许的磁盘丢失相同(即一个),因此我认为RAI​​D-5在各个方面都应该胜过RAID-1-相对于阵列中使用的磁盘数量和相同磁盘,提供更多的容量容错能力。这得出一个结论,该结论指出,RAID-6的性能优于其他所有RAID级别,因为它在普通读取(从两个奇偶校验磁盘无奇偶校验读取)的速度与RAID-0一样快,并且在丢失磁盘的情况下仍具有容错能力。数组成员。;-)


一些有趣的东西,但是您已经重复了我一直听到的RAID1错误。RAID1并没有一定意味着它只能存活一个磁盘出现故障。RAID1阵列中不必只包含两个磁盘。例如,您有一个具有3个磁盘的RAID1阵列,它将在两个磁盘故障中幸免,并且读取性能也应提高(如果您的RAID系统是从多个驱动器中读取数据)。
andynormancx

-1

就我个人而言,我认为RAI​​D系统的最终测试是其承受故障的能力。在这种情况下,RAID5和RAID1都可以处理单个驱动器故障,但它们中的任何一个都不能幸免。

至于您对奇偶校验位的问题,我认为这取决于RAID驱动程序。肯定会在重建过程中读取它,但是在正常使用时,这样做不会有多大意义,因为会浪费带宽。


恐怕您的回答是“我不知道是否有任何RAID5实现会在读取时检查奇偶校验”,因此无法回答问题。
andynormancx

这是一个有效的答案,因为除了真正写驱动程序的人以外,没有人会知道。
sybreon,2009年

-2

afaik,我不是24/7 Storage Pro,控制器始终检查对磁盘的写入和读取内容。即,使用raid1时,您的写入比在单个磁盘上的写入要差一些,但读取速度要快一些(必须将文件写入两个磁盘,但可以从一个磁盘读取一部分,而从第二个磁盘读取另一部分)。

也许您可以禁用RAID级别的数据检查,但是这样做的目的是,所有RAID级别(0除外)都可以为您提供数据冗余,所以为什么要阻止自己。

使用RAID 5,您至少需要3个磁盘,并且可以使用N-1个磁盘来存储数据。使用RAID 1时,您总是需要偶数个磁盘,并且可以使用N / 2个磁盘来存储数据。

因此,在更大的团队中,等级5为您提供更多存储空间,而团队1为您提供更多冗余。

如果说更健壮,是指它提供了比RAID 1更多的冗余。

根据RAID的大小,您还必须考虑错误发生时的重建时间(有多少个磁盘,一个磁盘有多大,什么样的RAID(软磁盘,假磁盘,硬件磁盘),什么级别等)。 )

因此,实际上不可能说一个团队比另一个团队更强大(也许团队6总是比团队5更强大,但代价是失去存储空间)


1
恐怕这并不能真正回答我的问题,我的问题非常准确地关于典型的RAID5实现是否在读取时检查奇偶校验数据。对于记录,RAID1不需要偶数磁盘。您可以很高兴地拥有一个包含两个以上磁盘的RAID1阵列,从而在增加冗余的同时降低了写入速度。
andynormancx

1
“控制器始终检查要写入磁盘和从磁盘读取的内容。” 控制器不能从两张光盘中读取都是这种情况,但是某些控制器会返回它们获得的第一个数据。
詹姆斯

我认为可以说RAID1需要偶数磁盘,而第三个镜像不是RAID1。很少有实现能够支持该术语从未标准化的第三个镜像。
carlito
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.