RAID5比RAID1更强大吗?

我即将用Linux软件RAID1arrays取代旧的硬件RAID5arrays。 我正在和一位朋友谈话,他声称RAID5比RAID1更强大。

他声称,在RAID5中,读取奇偶校验数据以确保所有驱动器都返回了正确的数据。 他进一步声称,在RAID1上发生的错误将被忽视,因为没有这样的检查与RAID1完成。

我可以看到这是如何可能是真实的,但也可以看到,这一切都取决于所讨论的RAID系统是如何实现的。 当然,RAID5系统不需要读取和检查读取的奇偶校验数据,并且从读取的所有驱动器读取RAID1系统时, 都可以轻松读取它们,以检查它们是否都保持相同的数据,从而达到相同的稳定性水平(相应的性能损失)。

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

RAID-5是一种容错解决scheme,而不是数据完整性解决scheme

请记住,RAID代表廉价磁盘冗余arrays(Redundant Array of Inexpensive Disks) 。 磁盘是冗余的primefaces单位 – RAID并不关心数据。 您购买采用WAFL或ZFS等文件系统的解决scheme来解决数据冗余和完整性问题。

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

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

如果你使用的是RAID-5,我认为你便宜。 RAID 1执行得更好,提供更好的保护,并且在驱动器出现故障时不会影响生产 – 对于边际成本差异。

我相信答案取决于控制器/软件,例如镜像系统只从一对中读取一张光盘,因此能够传送错误的数据是相当普遍的。 我注意到,如果你的结果取决于这些数据,当数据被写入到两个光盘时,它将在两个光盘上被破坏。

从SATAssure(tm)Plus的pdf下载:

“革命性的SATAssure技术使用大容量,价格低廉的SATA磁盘驱动器提供企业级的数据保护和可靠性.SATAssure可以在所有读取操作上运行,确保数据完整性并实时自动纠正问题 – 所有这一切都没有传统的性能或容量损失存储系统,降低驱动器RMA的function,为个别驱动器供电循环。“

有趣的是, 一些制造商为他们总是计算平价这一事实而大惊小怪,这使我认为在硬件控制器上它是相对罕见的。 同样值得注意的是,ZFS和WAFL(netapp)等系统对每次读取都进行奇偶计算。

使用RAID-5时,奇偶校验通常只在arrays重build时读取,而不是一般读取。 这是因为读取可以更随机和更快(因为每次您想要从数组中读取1K数据时,您不必读取和计算整个条带的奇偶校验)。

使用RAID-1时,一般会读取驱动器,尽可能提高读取性能。 如您所述,如果RAID子系统尝试读取两个驱动器并且它们不同,则子系统无法知道哪个驱动器是错误的。

大多数RAID子系统取决于驱动器通知控制器或计算机何时坏。

那么RAID-5“更强大”呢? 答案是,这取决于。 与RAID-1相比,RAID-5可以为给定数量的磁盘获得更高效的存储空间; 尽pipe为了在一个磁盘之外提供有效的存储,RAID-1需要与RAID-0相结合,或者作为RAID-1arrays的一个条带,或者是两个RAID-0条带的RAID-1。

(我更喜欢前者,因为单个驱动器故障将取出单个RAID-1元素,这意味着只有一个驱动器将需要重build。与后者相比,单个驱动器故障会杀死RAID-0元素,这意味着HALF当驱动器被replace时,磁盘将参与重build。)

这也导致讨论“幻影写入”,其中写入被驱动电子设备报告为成功,但是由于任何原因,写入永远不会将其写入磁盘。 这确实发生。 考虑到对于RAID-5arrays,当驱动器发生故障时,arrays必须完全读取所有存活驱动器上的所有扇区以便恢复。 NetApp声称,大型驱动器加上大型raid组意味着在某些情况下,重build过程中出现故障的几率可能会比十分之一差。 因此,他们build议大RAID组中的大磁盘使用双奇偶校验(我认为这与RAID-6有关)。

我在NetApp的一些技术人员的讨论中学到了这一点。

通常的RAID实施通常不会检查数据访问上的奇偶校验。 我从来没有见过一个。 一些RAID5实现为读取数据stream读取奇偶校验数据,以防止不必要的search(比起导致驱动器search每第n个块更便宜的方式来抛弃每个第n个块)。 RAID1的实现无法检查,因为他们从两个磁盘上读取性能(在绝大多数RAID1实现中,只有一个让你select,如果一个磁盘比另一个磁盘慢得多并且不是写密集的加载。)

有些人会检查背景“擦洗”。 在这种情况下,RAID6可以胜任,因为它可以恢复数据,而RAID5和RAID1处于相同的情况,您可以识别但不能修复。 (这是不正确的,因为驱动器可能检测到一个错误的CRC,返回一个错误,并让你重新写入块,这种情况通常会发生)。

如果你想要数据的完整性,在应用程序层中存储一个散列,每个块(或者logging,或者被分割)。 Sybase和Oracle这样做(我相信在页面级别),我曾多次看到它,保存了一个巨大的数据库。 (例如,控制器开始返回错误的数据,sybase崩溃时出现一个明确的错误,因此当数据库在状态不一致的硬件上运行时,不会写入数据。

唯一的文件系统解决scheme和唯一的RAID解决scheme是ZFS。

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

如果它们的性能差不多,那么RAID1就没有奇偶校验位了 – 你有两份相同的数据。 应该有一个由磁盘执行的校验和,以确保写入磁盘的内容与下线相匹配

RAID5确实有一个奇偶校验位。 这意味着你可以在你的RAID设置中丢失一个磁盘,并继续,如果没有任何事情发生。 尽pipe如此,还是应该对写入磁盘的数据执行校验和,以确保与数据线相匹配

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

编辑补充:您提到从硬件RAID转移到软件RAID。 首选是硬件RAID over RAID。 如果你能购买所需的硬件来提供你想要实现的RAID级别,我build议你去做。 这将使所有的奇偶校验计算能够由RAID卡执行,而不是主机。 因此释放主机上的资源。 毫无疑问,其他好处,但他们现在逃脱我

我即将用Linux软件RAID1arrays取代旧的硬件RAID5arrays。 我正在和一位朋友谈话,他声称RAID5比RAID1更强大。

这将取决于RAID实施types(hw / sw),磁盘,RAID控制器(如果有)以及它的function。

他声称,在RAID5中,读取奇偶校验数据以确保所有驱动器都返回了正确的数据。 他进一步声称,在RAID1上发生的错误将被忽视,因为没有这样的检查与RAID1完成。

它确实有一些轻微的意义,但不是真的:)会发生什么 – 如果写入错误的数据,在镜像上它将被发送到两个驱动器,并在raid5奇偶校验将生成并传播到驱动器。 数据读/写检查由磁盘和控制器固件完成,与RAID级别无关。

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

其实呢? RAID5系统是否检查读取的奇偶校验数据? 是否有从所有驱动器读取并比较读取数据的RAID1系统?

正如我所说的,这些检查不是raidalgorithm的一部分,尽pipe一些控制器可能还有一些额外的实现。

arrays的稳定性取决于驱动器的质量(由于RV率降低,2.5“驱动器的寿命往往长于3.5”;根据我的经验,从未购买过迈拓SCSI / SAS驱动器 – 它们有可怕的固件故障),环境(温度和湿度控制),控制器本身(是否有BBU?固件是否是最新的?是真正的raid还是fakeraid?),服务器中的PSU数量,UPS质量等。

我不知道这一点,但在我看来似乎不太可能。 请记住,为了计算奇偶性,必须从RAID组中的所有驱动器读取块,然后进行math运算以确定正确性,而如果不正确,则只需读取一个驱动器即可。

另外,如果读取的数据less于一个数据块,则奇偶校验读取将不得不将其扩展到一个完整的数据块,而定期读取则不能。 (当然,假设RAID块大于磁盘块,我认为从磁盘读取的块必须是满块,否则我的观点更有效)。

所以,从我的观点来看,是的, 可以这样做,但如果这样做的话,效率会很低,我怀疑是否有这样的实施。

不过,我再也没有关于实际实现的个人知识。

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

这没有什么意义。 当您发现奇偶校验不匹配时,您会做什么? (你怎么知道哪个块是错的?)

对于随机读取检查奇偶将是昂贵的。 通常情况下,您可以通过查看单个磁盘来进行随机读取,但是如果要检查奇偶校验,则需要在每次读取时读取所有磁盘。 (如果有什么可以做的话,这可能还是有意义的!)

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

我一直在想这个说法,RAID-1的读取速度应该比RAID-5更快,因为它一次读取两个驱动器。

现在,由于在RAID-5上不会读取奇偶校验,除非arrays需要重build,所以在读取方面它实际上等同于RAID-0arrays,我是否正确?

RAID-0通常被认为是最快的级别(尽pipe它应该被命名为“AID”​​,因为没有任何冗余)。 😀

说到Linux软件RAID,一个简单的使用hdparm的testing就证实了这个理论:我的RAID-5arrays总是比我的RAID-1arrays显示更高的读取速度。

但是:降级的数组比正常运行的数组执行速度慢得多,看来! 我刚刚在Fedora 9上testing了这个,它运行在4个不同RAID级别的WD 1TB驱动器上。 结果如下:

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

由于在RAID-1和RAID-5(即一个)中所允许的磁盘损失是相同的,所以我认为RAI​​D-5在各个方面都应该优于RAID-1,从而提供了与arrays中使用的磁盘数量相关的更多容量容错。 这导致了一个结论,即RAID-6的性能优于其他所有RAID级别,因为在正常读取(不从两个奇偶校验磁盘中读取奇偶校验)的情况下,它与RAID-0一样快,并且在丢失数组成员。 😉

就我个人而言,我认为RAI​​D系统的最终testing就是能够承受失败的程度。 在这种情况下,RAID5和RAID1都可以处理单个驱动器故障,但是两者都不会存在。

至于你在奇偶校验位上的问题,我会认为这取决于RAID驱动程序。 在重build过程中一定会被读取,但在正常使用情况下,这样做是没有什么意义的,因为带宽会浪费在这个上面。

afaik,我不是24/7的存储专家,控制器总是检查写入和读取磁盘的内容。 即使用raid1,你的写入比在单个磁盘上稍差,但你的读取速度要快一些(必须写一个文件到两个磁盘,但是可以从磁盘1读取一个部分,而从磁盘2读取一个部分)。

也许你可以禁用数据检查RAID级别,但是这是什么意思呢,所有的RAID级别(0除外)都是为了给你提供数据冗余,所以为什么要阻止你自己。

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

所以在更大的突袭5级给你更多的存储空间,而突袭1给你更多的冗余。

如果更强大,则意味着提供更多的冗余,而不是突袭1。

依赖于raid的大小,如果发生错误,你还需要考虑重build的时间(有多less个磁盘,一个磁盘有多大,什么样的raid(软,假,硬件),哪个级别等等。 )

所以说一个raid比另一个raid更强大是不可能的(也许raid 6总是比raid 5更强大,但是会损失存储空间)