如果RAID5系统在重建期间遇到URE,是否所有数据都会丢失?


23

我理解有关大型驱动器在重建过程中经历URE可能性增加的论点,但是我不确定这样做的实际含义。此答案表明整个重建失败,但这是否意味着所有数据都无法访问?为什么会这样呢?当然,驱动器上单个扇区中的单个URE最多只会影响与几个文件有关的数据。只是少量损坏几个文件,还是不重建阵列吗?

(我在这里对ZFS的RAID5实现特别感兴趣,但是对于任何RAID5实现,逻辑似乎都是相同的。)


1
通常,在RAID5风险的背景下讨论“ 在重建过程中遇到URE的可能性”时,隐含的假设是已经发生了较早的损坏,因此有必要进行重建。换句话说,“重建期间的URE”是第二个 URE,实际上所有数据都将丢失。
马驹

1
@Colt-我理解这就是隐含的含义,但是我不明白的是为什么一个URE(在不建议使用RAID5的分析中,它似乎指的是坏扇区)将意味着所有数据将迷路了。通常,如果丢失了RAID5阵列的1个驱动器,那么我仍然拥有所有数据。如果我从其余所有驱动器中另外丢失了一个扇区,则可能丢失了存储在该扇区中的数据,但是如果该扇区是(例如)可用空间,那么我不在乎,并且该扇区确实有数据,则可能只影响几个文件。
process91 '18 -10-28

@Colt-根据以下答案,似乎无法在单个URE的前提下重建阵列是硬件RAID制造商的选择。在我看来,这是错误的选择,但值得庆幸的是,ZFS似乎有所不同。
process91 '18 -10-28

有关过程,请参见@shodanshok的答案。至于为什么,RAID是用于为其他进程,应用程序等提供对可靠数据的连续访问,而与备份无关。一旦在重建过程中发生URE,许多(大多数?)硬件控制器就会中止的原因是RAID无法再执行其应做的工作。此时,需要使用备份来获得可靠的数据。使用RAID的另一种方法是根本不进行任何重建,而仅使用RAID控制从备份中恢复的时间。此外,它还允许有时间在恢复之前进行最终备份。
马驹

请注意,RAID5的“ ZFS”实现称为“ raidz”或“ zraid”,与硬件RAID5不同。通常,您会获得有关“ ZFS RAID5”的更好答案,询问“ raidz”
乔什(Josh)

Answers:


24

它实际上取决于特定的RAID实施:

  • 大多数硬件RAID都会中止重建,有些还会将阵列标记为失败,从而导致阵列瘫痪。其基本原理是,如果一个RAID5期间URE发生重建就意味着一些数据丢失,所以最好完全停止宁可冒着无记载数据损坏的阵列。注意:某些硬件RAID(主要是基于LSI)将对阵列进行打孔,从而在重建过程中将受影响的扇区标记为不可读(类似于Linux软件RAID的行为)。

  • 可以指示Linux软件RAID a)停止阵列重建(“古老的” MDRAID /内核构建的唯一行为)或b)继续进行重建过程,以将某些LBA标记为不良/无法访问。这样做的理由是让用户自行选择:毕竟,单个URE可以位于可用空间上,完全不影响数据(或仅影响不重要的文件)。

  • ZRAID将显示某些文件已损坏,但是它将继续进行重建过程(请参见此处的示例)。再次,其理由是最好继续并向用户报告,从而使用户能够做出明智的选择。


@ process91只是详细说明一下。如果RAID实现没有将单个扇区标记为坏扇区所需的其他数据结构,则它必须使重建失败或引入无提示损坏。将单个部门标记为不良部门会更好,但由于那些部门与不良部门共享同等部门,因此仍可能使其他部门处于危险之中。
卡巴斯德(Kasperd)

@kasperd当然,我想我认为大多数RAID实现都具有向用户发出坏扇区警报的功能。我了解一个驱动器中是否存在坏扇区,这将导致重建后新驱动器中的扇区不正确。就是说,即使RAID实施只不过提醒用户“我已尽最大努力重建了驱动器,但在此过程中我遇到了1个URE”,然后继续允许尝试写入该扇区,但我没有了解其他部门可能面临的风险。唯一可能的错误扇区将是原始扇区,新扇区和奇偶校验扇区。
process91 '18 -10-28

根据上述@Colt的评论,一种澄清-在硬件RAID的情况下,当将阵列标记为失败时,它是否仍然允许访问数据?甚至可以说是出于尝试恢复目的的只读访问?
process91 '18 -10-28

@ process91允许扇区损坏不是一个好主意,即使该事实已记录到日志文件中也是如此。您不知道哪个文件可能已损坏。RAID必须确保在读取该文件时出现错误。显然,您也不想只覆盖坏扇区,因为那将意味着您刚刚失去了恢复数据的最后机会。因此,您在一个磁盘上有一个不可读的扇区,而在新磁盘上有一个您不知道要写什么的扇区。那可能是两个不同的文件损坏了。
卡巴斯德(Kasperd),

1
@ process91我添加了有关基于LSI的阵列的注释。看看吧。
shodanshok

8

如果将发生URE,您将在块上遇到一些数据损坏,该块通常为256KB-1MB,但这并不意味着卷上的所有数据都会丢失。RAID5没什么大不了的是完全不同的事情:重建本身很麻烦,而且很有可能连续发生第二个磁盘故障。在这种情况下,所有数据都将丢失。


2
与单个RAID1重建相比,RAID5重建在单个驱动器上的压力如何?我看到它对CPU的压力更大,但是对于任何特定的驱动器,我们只是从中读取所有数据。通常,使用大型驱动器的人所提到的危险是,它们在重建期间很可能会遇到URE,但这对我来说很好,如果这仅意味着单个扇区将被损坏。
process91 '18 -10-28

3
这是概率论。使用N(这是驱动器数)时,发生故障的机会要高出N倍。
BaronSamedi1958 '18 -10-28

1
那不是完全如何计算,您实际上想计算1- 没有失败的概率,但是我理解那部分。看来我误解了您的陈述,认为重建RAID5会对磁盘本身造成某种压力(我在其他地方已经读过),因此增加了URE的机会,但是如果那不是您的意思,再说我同意。
process91 '18 -10-28

2

我会反过来解释。

如果RAID控制器没有在URE上停止,那会发生什么?

我将其放在服务器上,RAID从未注意到URE,并且在重建后损坏就开始在整个RAID卷上累积。

重建后,磁盘开始出现更多坏扇区,并且数据开始损坏。

磁盘从未启动过RAID卷,控制器发生故障是为了保护数据完整性。

编写该示例是为了使您认为控制器根本无法使用URE来推动卷,这是为了确保数据的完整性,因为该卷并不是备份,而是对磁盘故障的恢复能力


1
我看到新的主持人都不断地检查网站,找事情做...
沃德-恢复莫妮卡

1
为什么单个URE会在整个RAID卷中造成损坏?
process91 '18 -10-28

2
抱歉,我重新阅读了您的答案。听起来您在重建期间有一个不良的URE,但这不是问题。问题在于,重建后扇区继续变坏,并且驱动器从未报告过该问题。但是,这似乎是一个独立的问题,与RAID控制器在重建过程中是否注意到URE有关。RAID控制器可能会在重建过程中注意到URE并向您发出警报,但仍会继续完成重建。有些数据总比没有数据要好。
process91 '18 -10-28

2
我只想分析为什么RAID5在2009年被视为“死机”,这取决于单个URE的可能性。我现在的理解是,这种分析在数学上都是不正确的,并且实际上不适用于ZFS。
process91 '18 -10-28

1
@RobMoir我想您的最后一句话是我不同意的地方。即使我有另一个备份,从阵列中取出几乎所有数据也会很有用。可能该文件并不重要,或者(在硬件RAID的情况下)该错误发生在可用空间区域中。我认为,对于硬件RAID(不具体知道受影响的文件),正确的决定是警告用户,完成重建并将阵列翻转为只读模式。我认为这没有任何不利之处。(显然,像ZFS这样的文件系统甚至可以做得更好,因为它们可以报告受影响的文件。)
process91

1

我建议阅读此问题和解答以获取更多背景知识。然后,重新阅读再次链接的问题

当有人说这种情况“ RAID失败”时,这意味着您失去了RAID的好处-您失去了对数据的连续访问,这就是您首先设置RAID阵列的原因。

您并没有丢失所有数据,但是从一个失效的驱动器加上(某些)剩余驱动器上的(一些)URE进行恢复的最常见方法是完全从头开始重建阵列,这意味着还原所有数据。从备份。


1
通常,当您的目标是最大程度地减少停机时间时,请使用RAID。使阵列继续进行未知且未经修复的损坏通常与该目标背道而驰。
大卫·史瓦兹

1
谢谢,您链接到的第一个问题非常有用。为什么我将无法连续访问数据?阵列在重建期间仍将处于运行状态,并且如果重建期间遇到URE,则我希望它能够继续运行,尽管现在这一个数据扇区已损坏。不是吗?
process91 '18 -10-28
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.