
重建错误是客户在试图自己解决阵列问题时经常犯的错误。这个问题很复杂,让很多数据恢复工程师感到困惑。准确了解数据发生了什么以及它如何影响恢复数据成功的几率非常重要。
我们来看看现在流行——RAID-5。我们将考虑如何对其执行初始化、正确和错误的重建过程。此外,我们将讨论是否有可能在错误重建后恢复数据。
RAID-5的错误重建有很多情况,在本文中,我们将着重其中一种——当新旧配置相同时。这是实际操作中常见的情况,也是最容易解释和恢复数据的情况。如果我们研究了它,我们可以在接下的文章中讨论更复杂的情况。
我们假设您已经学习了上一篇关于RAID-1的文章,理解了我们所说的初始化、重建和“错误重建”等问题的本质。所以,让我们直接讨论关于RAID-5的一些过程细节。

RAID-5中的冗余
让我们思考一个三驱动器RAID-5 LS(左同步)方案:

三个驱动器的RAID-5 LS模板。
每一行都有一个块,用于存储其他块的XOR:
C0=A0 xor B0,
B1=A1 xor C1,
A2=B2 xor C2
数据被分成块。每一行都包含数据块。但是,有一个特殊的块,用于存储该行中的所有数据块XOR运算结果。我们将把这个块称为“XOR块”。RAID-5方案有多种,但就本文而言,它们之间的差异并不重要。
使用XOR块,我们可以恢复任何一个故障成员的数据。例如,如果代码块C0 = A0 xor B0,则:
A0 = B0 xor C0
B0 = A0 xor C0
C0 = A0 xor B0 (根据定义)
对于其他行同样-都可以使用XOR运算和其余成员恢复。同样的规则也适用于具有更多成员的RAID-5。
这说明了任何正常运行的RAID-5的一个属性:XOR块必须有效的。XOR数据块的结果必须等于XOR块中存储的值。
RAID-5初始化
如果我们随意使用驱动器并尝试创建RAID-5,将无法确定XOR块是否有效。因此,RAID-5阵列需要进行初始化。
我们如何使XOR块有效?显而易见的解决方案是计算数据块的XOR,并将结果写入相应的XOR块。这是大多数RAID控制器的工作方式。
执行RAID 5初始化
XOR块计算和更新:
A0 XOR B0->C0
A1 XOR C1->B1
B2 XOR C2->A2
也就是说,在初始化过程中,对所有成员(磁盘)的数据进行部分更新。
降级后重建
如果其中一个成员(磁盘)发生故障,RAID-5会进入降级状态——数据仍然可用(缺失磁盘的数据会通过计算实时恢复),但系统的可靠性不再得到保障。
要恢复阵列的属性,必须用新驱动器替换故障驱动器。只需向阵列中添加一个新驱动器就足够了吗?不是的。新驱动器不包含正确的数据或有效的XOR块。需要执行重建,这是一个将正确数据写入新驱动器的过程。如何获得正确的数据?这很简单——计算旧成员的XOR。

RAID-5重建(恢复成员C):
XOR成员A和B的数据,并将结果写入NewC
A0 XOR B0->NewC
A1 XOR B1->NewC
A2 XOR B2->NewC
这意味着:在正确重建过程中,只更新新驱动器。
错误重建让我们看看当执行初始化操作而不是(正确的)重建时,数据会发生怎样的变化。RAID-5 有很多参数,为了简化问题,我们假设这些参数都没有改变。

RAID-5中新成员的初始化:
执行XOR块重新计算:
A0 xor B0->新C0(正确)
A1 xor新C1->B1(错误)
B2 xor新C2->A2(错误)
初始化将重新计算并更新所有XOR块。在这种情况下:
新驱动器上的数据块将保持不变,即它们将继续存储不需要的数据。
旧驱动器上的XOR块将根据错误的数据重新计算,所以它们是不正确的。
损坏分析
让我们了解一下这些损坏如何影响逻辑RAID映像——组装好的RAID上的数据将是什么样子。

由驱动器A、B和NewC组装的RAID数据。
每6个区块包含2个坏区块。
对于三磁盘RAID-5,每组6个块将有4个好块和2个坏块。从技术上讲,这只是33.3%的损坏。对于10个驱动器的RAID-5,是10%的损坏。听起来没那么糟糕!但事实是残酷的,客户想要的是完好的文件,而不是分区。且很少有没损坏的文件。
我们举一个例子:如果块大小为64KB,那么6个块只有384KB。大部分常见的文件,如档案、照片和文档,都比这个大小大得多,也就是说,它们有极高的概率被损坏。
是否可以在没有驱动器故障的情况下恢复数据?
让我们看看是否有方法可以在没有旧故障驱动器C的情况下恢复数据。
我们会发现,在包含成员(磁盘)A、B和NewC的配置中,数据会被损坏。这不是一个可行的选择。
如果我们试图从冗余中恢复驱动器C的数据怎么办?不幸的是,在重新初始化过程中,XOR块被重新计算,现在A XOR B=NewC。这意味着,如果我们组装一个由A、B和dummy(缺失驱动器的占位符)组成的数组,我们将得到与组装一个A、B、NewC数组完全相同的数据。
结论:如果没有原始的C驱动器,就不可能完全恢复数据。
是否可以使用损坏驱动器的映像恢复数据?
让我们假设驱动器C的损坏不是致命的,我们设法使用PC-3000复制了数据。这份副本对我们有帮助吗?

驱动器A、B和映像C上的数据
只有A和B上的XOR块被损坏
使用相同配置执行重新初始化非常简单:
*A和B上的数据块是有效的
*A和B的XOR代码块是无效的
*C上的数据块和XOR都是有效的
还有一个额外的因素需要考虑——数组可以存储有关配置的元数据。驱动器A、B上的元数据可能与驱动器C上的元数据冲突。
所以,我们拥有了所有的数据块,但存在XOR和元数据问题。

来自RAID的数据由驱动器A、B和C的映像组装而成。
所有数据块都是正确的——可以在没有任何损坏的情况下获取RAID数据
使用PC-3000 RAID系统,我们可以轻松获得正确的阵列数据,并保持所有用户文件的完整性。元数据冲突和XOR问题都可以解决。
可以用原始控制器访问数据吗?我们无法保证这一点,也无法保证数据是安全的。由于元数据中的冲突,控制器可能只构建驱动器A、B和虚拟驱动器的阵列(我们上面讨论过这种配置是不正确的),或者它可能重建阵列:a xor B->C,此过程将损坏数据。如果你想使用原始控制器,一定要复制所有驱动器!
结论:在PC-3000 RAID系统中,我们可以用完整的用户数据组装RAID。使用原始控制器访问数据可能是危险的。
结论
在本文中,我们介绍了RAID-5,这是最常见的RAID级别。但是,这个级别也受到错误重建问题的影响——在这种情况下,是开始初始化,而不是正确重建。当客户试图自行重新访问数据时,他们经常犯这种错误。
在本文中,我们仅限于新配置与旧配置匹配的情况。我们用这个例子来探讨:
RAID-5是一种在每一行中存储特殊XOR块的级别,这使其能够应对任何一个成员(磁盘)的故障。
在 RAID-5 初始化过程中,通常会计算并写入 XOR 块。也就是说,阵列中的每个成员都会部分更新。
在(正确的)重建过程中,故障成员的数据会被恢复并写入新驱动器。数据是通过 XOR 块恢复的。因此,在正确的重建过程中,只有新驱动器会被更新。
在不正确的重建过程中,由于重新计算 XOR,旧成员会被部分更新错误的数据。
如果故障成员永久损坏,则无法完全恢复 RAID 数据。所有中型和大型文件都会包含错误。
如果可以复制损坏成员的数据,则可以使用 PC-3000 RAID 系统恢复 RAID 数据。
使用原始控制器进行数据恢复可能会存在风险。
我们没有考虑新配置与旧配置不同的情况。损坏的情况可能更为复杂,但在许多情况下,数据恢复仍然是可能的。
| 欢迎光临 PC3000 军达成数据恢复论坛 (http://www.jundacheng.com/bbs/) | Powered by Discuz! X2 |