Dell 服务器RAID阵列中的双重故障和穿孔情况

1、数据错误和双重故障
RAID阵列并非不受数据错误的影响。 RAID控制器和硬盘固件包含检测并纠正多种类型的数据错误的功能,避免这些错误被写入阵列/驱动器。 使用过时的固件可能导致将不正确的数据写入阵列/驱动器,因为它缺少最新固件版本中提供的错误处理/错误纠正功能。

数据错误也可能由物理坏块导致。 例如,当读/写磁头影响旋转盘片(称为“磁头崩溃”)时,可能会发生这种情况。 由于盘片在特定位置以磁性方式存储位的功能退化,块也可能随着时间的推移变坏。 由盘片退化导致的坏块通常可成功读取。 这种坏块只可能被间歇性地检测到,或使用驱动器上的扩展诊断程序检测到。

坏块也称为坏逻辑块地址(LBA),它也可能由逻辑数据错误导致。 当数据被错误写入驱动器时,即使报告为成功写入,也会发生这种情况。 此外,存储在驱动器上的正常数据可能在无意中被更改。 例如“位翻转”,当读/写磁头通过或写入附近位置,导致以0和1形式显示的数据更改为其它值时,可能会发生位翻转。 这种情况可导致数据的“一致性”受损。 特定块上的数据的值与原始数据不同,可能不再与数据的校验和匹配。 物理LBA正常,可成功写入,但当前包含错误数据,可能被解释为坏块。

坏LBA通常报告为检测代码3/11/0。检测关键字3是介质错误。 附加检测代码和附加检测限定符11/00定义为无法恢复的读取错误。 未尝试纠正块,也未确定坏块是由驱动器盘片上的物理缺陷导致的,还是由其它原因导致的数据错误导致的。 存在检测代码3/11/00并不意味着物理驱动器出现故障或应该替换。

基于戴尔硬件的RAID控制器提供巡检读取和检查一致性等功能来纠正许多数据错误情形。 巡检读取默认作为自动化后台任务操作,检查硬盘上的所有个别块以确保可正确读取数据。 巡检读取将尝试纠正坏块或将无法纠正的块重新映射到保留块。 检查一致性是一项手动激活(也可计划激活)功能,它比较阵列中的所有驱动器以确保数据和冗余正确匹配。 例如,将比较RAID 5阵列中的三个驱动器,确保数据和奇偶校验使用正确的值。 如果检测到一个错误,将使用剩余数据和/或奇偶校验重写并纠正坏值。 同样,在RAID 1阵列中,将比较一个驱动器上的数据和另一个驱动器上的数据,确保正确镜像数据。

如果未纠正RAID阵列中的任何一个错误,都可能导致阵列中出现更多严重错误,特别是在发生第二个错误时。 只要阵列保持最佳状态,一个或多个单错误不会导致数据丢失。 阵列保持最佳状态时,仍有足够的数据加冗余来正常操作。

由于控制器具有在正常操作期间纠正错误的功能,当数据中存在基本问题时,并不总是能轻松检测到。 存在一个或多个单错误情况时,控制器日志、硬件日志或操作系统事件日志中很少有任何错误或警报。 出于此原因,阵列在很长一段时间都看似在正常操作,尽管存在一致性错误和/或单错误。

如图1所示,阵列有多个错误。 但是,由于任何磁条中都只有一个错误,控制器仍可访问所有数据,这归因于RAID 5的冗余。 如果奇偶校验分段上发生错误,所有数据都完好无损,且此错误对读取操作没有影响。 如果数据分段中发生错误,则必须在正常数据和正常奇偶校验数据之间进行XOR比较,以重新计算缺失/坏的数据分段。 在任一种情况下,由于任何磁条中都只有一个错误,有足够的冗余可用于成功访问所有数据。

当RAID阵列中的一个或多个驱动器包含数据错误,而由于驱动器故障、外来配置、驱动器拆卸或任何其它原因,阵列中的另一个驱动器不再是活动成员,这种情况称为“双重故障”。 双重故障情况可能导致立即丢失受影响的磁条中的任何信息数据。

保持最佳状态的阵列可能发生双重故障的情况。 多个硬盘上的相同坏LBA将发生这种情况。 考虑到如今较大硬盘上有很多LBA,这种情况会非常少见。 多个硬盘上的同一LBA不太可能同时“坏”。

执行常规检查一致性操作将纠正单故障,不管是物理坏块还是数据的逻辑错误。检查一致性还将缓解出现其它错误时的双重故障情况的风险。 如果任何给定磁条中只有一个错误,检查一致性几乎始终可以消除此错误。

2、穿孔:什么是穿孔,以及如何引起穿孔

穿孔是戴尔PERC控制器的一项功能,旨在允许控制器还原阵列的冗余,尽管数据丢失是由双重故障情况导致的。 穿孔的另一个名称是“带错重建”。 RAID控制器将检测双重故障,由于没有足够的冗余来恢复受影响磁条中的数据,控制器在该磁条中进行穿孔,允许继续重建。

.导致无法访问多个驱动器上同一磁条中的数据的任何情况都属于双重故障
.双重故障导致受影响磁条内的所有数据丢失
.所有穿孔都属于双重故障,但所有双重故障都不是穿孔

如果没有穿孔功能,阵列重建将失败,并使阵列处于降级状态。 在某些情况下,这些故障可能导致其它驱动器出现故障,从而导致阵列处于无法正常工作的脱机状态。 在阵列上穿孔不会影响引导至或访问阵列上的任何数据的能力。 由于双重故障情况导致的任何损坏或数据丢失已经发生。

出现以下两种情况中的一种即可进行穿孔:

双重故障已存在(数据已丢失)
在线驱动器上的数据错误已蔓延(复制)到重建驱动器

双重故障已存在(发生第二个错误时数据丢失)
在降级状态时,如果在线驱动器上发生坏块,则对该LBA进行穿孔

对阵列进行穿孔的这种优势将保持系统可用于生产,并还原阵列冗余。 不管是否发生穿孔,受影响磁条中的数据都丢失。 LSI方法的主要缺点是在阵列中有穿孔时,只要访问受影响的数据(如果有),仍会遇到不可纠正的错误。

穿孔可能在三个位置发生。 首先,穿孔可能发生在不包含数据的空白区域。 该磁条将不可访问,但由于该位置没有数据,将不会有很大影响。 不管操作系统如何尝试写入穿孔的磁条都将失败,数据将写入其它位置。

其次,穿孔可能发生在所包含的数据不是重要数据(如README.TXT文件)的磁条中。 如果不访问受影响的数据,则正常I/O期间不会产生错误。 尝试执行文件系统备份将无法备份受穿孔影响的任何文件。 对适用的LBA和/或磁条执行检查一致性或巡检读取操作将生成检测代码:3/11/00。

第三,穿孔可能发生在被访问的数据空间。 在这种情况下,数据丢失可能导致各种错误。 这些错误可能是一些小错误,对生产环境不会造成负面影响。 这些错误也可能更严重,可能阻止系统引导至操作系统,或导致应用程序失败。

发生穿孔的阵列最终将必须删除并重新创建,以消除穿孔。 此过程导致所有数据都将被擦除。在消除穿孔之后,将需要重新创建数据或还原备份数据。 可在更利于业务需求的时间安排解决穿孔问题。

如果访问穿孔磁条内的数据,仍将报告受影响的坏LBA错误,并且没有可能的纠正方法可用。最终(可能是几分钟、几天、数周、数月等),坏块管理(BBM)表将填满,导致一个或多个驱动器标记为预测性故障。参见图3,驱动器0通常是由于驱动器1和驱动器2上的错误传播到它而被标记为预测性故障的驱动器。驱动器0实际上可能工作正常,更换它只会导致该更换件最终也被标记为预测性故障。

引起穿孔后执行检查一致性不会解决此问题。 这就是为什么定期执行检查一致性极其重要的原因。在更换驱动器之前(如果可能)变得特别重要。要执行检查一致性,阵列必须处于最佳状态。

将出现故障的驱动器或更换驱动器重建至阵列时,包含单个数据错误和硬盘故障等其它错误事件的RAID阵列导致穿孔。例如,最佳的RAID 5阵列包括三个成员:驱动器0、驱动器1和驱动器2。如果驱动器0出现故障(图2)并更换,将使用驱动器1和2上剩余的数据和奇偶校验将缺失的信息重建回更换驱动器0上。但是,如果驱动器1上存在数据错误,而重建操作触及到该错误时,磁条内没有足够的信息重建该磁条中缺失的数据。驱动器0中没有数据,驱动器1包含坏数据,驱动器2正在重建,因此包含正常数据。该磁条内存在多个错误。驱动器0和驱动器1不包含有效数据,因此该磁条内的任何数据都无法恢复,因此丢失。 最终如图3所示,在重建过程中创建穿孔(在磁条1和2中)。这些错误被传播至驱动器0。

对阵列进行穿孔可还原冗余,并使阵列返回最佳状态。 这能够在发生其它错误或驱动器故障时,保护阵列不会丢失更多数据。

3、故障发生前加以防止以及在发生后解决穿孔故障

在“未损坏就不修复”的前提下操作可能很简单。尽管在很多时候可能是这样,但为了最好地保护和管理存储子系统,强烈建议执行例行和常规维护。前瞻性维护可纠正现有错误,并防止一些错误发生。尽管不可能防止所有错误发生,但借助前瞻性维护可显著缓解大多数严重错误。对于存储和RAID子系统,这些步骤包括:

更新控制器、硬盘、底板和其它设备上的驱动程序和固件
执行例行检查一致性操作
查看日志了解问题指征

这不需要进行高级技术审查,只要粗略查看日志中极其明显的潜在问题指征即可
如有任何问题或疑问,请联系戴尔技术支持

应该做的最重要的事情之一是确保固件保持更新。固件是设备操作的所有逻辑所在的位置。它提供设备的功能和特性,以及各种错误处理和错误纠正功能。保持固件最新可提高性能,减少错误。也可通过固件更新添加新功能和增强功能。

固件可驻留在多个位置。RAID控制器包含固件以及系统或阵列中安装的每个个别硬盘。底板和外部盘柜也包含固件,可能影响其中所包含的驱动器和阵列的操作。

另一个前瞻性维护建议是执行“检查一致性”。 检查一致性是手动操作,因为它确实占用RAID控制器整体可用带宽的一部分。但是,可在对性能影响最小的时间安排检查一致性。

检查一致性将检查驱动器上的坏块,但更重要的是,它将比较阵列中的数据以确保所有数据都正确匹配。发现问题时,它将确定数据应该是什么样子,并通过检查阵列中其它驱动器上的数据来纠正。在数据错误相对较小时加以纠正是缓解由现有数据错误和第二个错误或故障一起导致的穿孔风险的最佳方式。存在双重故障和穿孔可能导致将阵列和数据还原为正常工作状态所需的时间的生产力损失,甚或彻底丢失所有数据。

存在双重故障或穿孔情况时,通常会丢失一些数据。如果这些错误所在的位置是空白区域或非关键数据空间,则对生产环境中的数据的直接影响相对较小。但是,存在这些错误就意味着可能存在更严重的问题。硬件错误和过时的固件可能需要立即引起注意。

如果存在已知或可疑的双重故障或穿孔情况,则遵循以下步骤最大限度地减少出现更严重问题的风险:

执行检查一致性(必须为最佳阵列)
确定是否存在硬件问题
检查控制器日志
执行硬件诊断程序
需要时联系戴尔技术支持

如果完成了这些步骤,还有其它问题。一段时间后,穿孔可能导致硬盘进入预测性故障状态。即使不存在实际硬件问题,传播至驱动器的数据错误也会报告为该驱动器上的介质错误。每次访问LBA时,都会报告错误。一旦错误日志已满,驱动器就会将自身报告为预测性故障。

驱动器上的单个穿孔LBA可报告多次。根据穿孔数量,可将阵列中的多个驱动器报告为预测性故障。更换预测性故障驱动器将导致现有穿孔重新传播至更换驱动器,这将最终导致更换驱动器也标记为预测性故障。在这种情况下,唯一的纠正措施是解决穿孔情况。

我们在图3中可以看到,磁条1和2上存在穿孔。更换硬盘解决不了此问题,因为没有足够数据冗余来重建原始数据。穿孔磁条中包含的任何数据都将丢失(除非保留在之前的备份中)。请记住,穿孔不会导致数据丢失,双重故障情况才会导致数据丢失。穿孔是还原包含双重故障的阵列冗余的方式。

  1. 丢弃保留的高速缓存(如果存在)
  2. 清除外部配置(如果有)
  3. 删除阵列
  4. 将驱动器的位置移动一个(使用图1,将磁盘0移至插槽1,磁盘1到插槽2,磁盘2到插槽0)
  5. 根据需要重新创建阵列
  6. 对阵列执行完全初始化(不是快速初始化)
  7. 在阵列上执行检查一致性

如果检查一致性完成且没有错误,则可以安全地假设阵列现在运行正常,已去除穿孔。现在可以将数据还原到运行良好的阵列。 

在更严重的情况下,尽管按照这些步骤操作仍无法解决此问题,并且错误可能持续。如果按照这些步骤操作未能解决问题,请联系戴尔技术支持,以获取进一步帮助。 

可能需要更详细地分析穿孔情况,以确定哪些驱动器有共同点。例如,在图3中,控制器日志将显示磁盘0和1之间的穿孔,磁盘0和2之间的穿孔。磁盘0是通用驱动器。遵循上面的这些步骤,但先完全卸下通用驱动器。因此按照图1中的示例,卸下磁盘0,然后遵循概述的步骤。使用剩余磁盘(1和2)创建阵列。创建阵列并在检查一致性确定阵列是否状态良好后,重新添加磁盘0,并再次对所有驱动器执行这些步骤,或使用RLM(RAID级别迁移)和/或OCE(联机容量扩展)功能将剩余驱动器添加回阵列。 

标记为预测性故障的所有驱动器都应卸下,不包括在恢复过程中。再以图3为例,如果磁盘0为预测性故障,则卸下此驱动器。然后执行上述步骤。由于只剩下2个驱动器,创建的RAID阵列为RAID 1,而不是RAID 5。获得更换磁盘0(由于预测性故障)后,再次执行这些步骤,包括所有3个驱动器,或使用RLM将磁盘0添加到现有阵列,并将其从带有2个驱动器的RAID 1更改为带有3个驱动器的RAID 5。 

此过程可能很艰巨,特别是考虑到可能丢失数据。此处正应了“防范胜于补救”这一格言。经验证明,几乎所有双重故障和穿孔情况都可以通过对RAID硬件和阵列执行前瞻性维护来避免。


ICP备案号:晋ICP备18007549号-1
站长微信:13613567205