大多数RAID级别使用冗余来确保阵列的可靠性。如果其中一个驱动器出现故障,冗余允许阵列继续运行而不会丢失数据。这项技术旨在保存数据,但如果使用不当,可能会导致数据丢失。
在这篇文章中,我们将研究一个问题不正确的重建”,这会使RAID数据恢复变得非常困难,甚至不可能。这是试图自行恢复阵列功能的RAID存储用户常犯的错误。只有在恢复失败后,他们才会求助于数据恢复服务。我们将仔细看看为什么人们会犯这个错误。
例如,我们将使用最容易理解的级别之一— RAID-1(镜像)。在这样的数组中,数据的完整副本存储在所有成员上(通常有两个成员)。如果一个驱动器出现故障,所有数据都在另一个驱动器上。
正确重建
首先,让我们看看“适当的重建”,这是存储系统开发人员最初设想的场景。
步骤1 —阵列初始化
一切从初始化数组开始。我们采用两个新驱动器,并基于它们创建一个新阵列。控制器不能确定成员上的数据是相同的,所以它启动初始化过程,将数据从驱动器A复制到驱动器B(这是最常见的行为,但对于某些控制器可能有所不同)。
步骤2 — RAID启动并运行
阵列已初始化,两个驱动器都工作正常,并且包含相同的数据。
步骤3 —由于单个驱动器故障导致的RAID降级
在某些时候,阵列的一个成员出现故障,例如成员a。由于冗余,阵列仍在运行,数据仍然可用。但是,该阵列不再提供同样的可靠性—另一个驱动器的故障将导致数据丢失。这种状态叫做阵列退化.
步骤4 —替换和恢复成员
为了让阵列恢复正常,我们移除了驱动器A,并在其位置上添加了一个新的驱动器NewA。NewA上的数据与B上的数据不匹配,因此我们需要重建阵列—将数据从B复制到NewA。
第5步—再次运行RAID
在此过程结束时,我们将再次拥有两个驱动器的工作阵列。
在一个地方有正确的重建顺序
这是RAID控制器开发人员和用户在驱动器出现故障时所暗示的事件顺序。
不正确的重建
不幸的是,阵列退化并不总是得到正确处理。执行的不是正确的重建,而是重新初始化,这可能会导致数据丢失。
让我们详细描述一下这一连串的事件。
步骤1-3–初始化、正常运行、降级
前三个步骤完全相同,所以我们不加注释。
步骤4 —驱动器更换和阵列初始化
在这一步,会出现一个错误—开始阵列初始化,而不是重建。数据将从一个驱动器复制到另一个驱动器,但复制的方向可能是错误的,然后新的不需要的数据将覆盖旧的需要的用户数据。
失败的原因通常是人为因素。对于大多数用户来说,阵列降级是非常罕见的事件,并且他们并不总是自信而简洁地行动。用户并不总是清楚地理解存储管理系统中的这个或那个命令的含义:“添加阵列、创建阵列、组装阵列、初始化阵列、重建阵列、恢复阵列、重建阵列”等等。你也可以加上压力和匆忙的因素。在这种情况下,很容易出错。
步骤5–形式上运行良好的RAID,但没有用户数据
初始化之后,我们得到一个正式工作的RAID,但是没有任何用户数据。
一处的重建顺序不正确
因此,数据保存机制导致了数据的丢失。获得正确数据的唯一方法是从失败的成员a中恢复数据。
结论
让我们总结一下结果:
- RAID-1阵列中的数据必须同步(在所有成员上相同)。
- 初始化是在第一个用户数据写入阵列之前发生的初始同步过程。数据从哪里复制或复制到哪里并不重要。
- 重建也是一个数据同步过程,但是这里的方向非常重要,因为有需要的数据(在旧成员上)和不需要的数据(在新成员上)。
- 有时,RAID存储的用户会犯一个错误并运行初始化而不是重建。在这种情况下,用户数据可能会被不需要的数据覆盖。只有到那时,他们才会寻求数据恢复服务方面的帮助。这种情况通常被称为不正确的重建或者用数据恢复的行话来说就是重建。
在本文中,我们主要关注最容易理解的RAID级别,但是同样的问题在其他具有冗余的级别中也很常见,比如RAID-5或6。对于数据恢复专业人员来说,重要的是要意识到潜在的问题,能够识别它们,并了解它们如何影响恢复数据的能力。