本文提供有关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 阵列中的多个单故障 — 最佳阵列
如图 1 所示,该阵列存在多个错误。 但是,由于任何磁条中都只有一个错误,控制器仍可访问所有数据,这归因于RAID 5的冗余。 如果奇偶校验分段上发生错误,所有数据都完好无损,且此错误对读取操作没有影响。 如果数据分段中发生错误,则必须在正常数据和正常奇偶校验数据之间进行XOR比较,以重新计算缺失/坏的数据分段。 在任一情况下,由于任何条带中只有一个单错误,因此有足够的冗余来成功访问所有数据。
当 RAID 阵列中的一个或多个驱动器包含数据错误,并且阵列中的另一个驱动器由于驱动器故障、外来配置、驱动器移除或任何其他原因而不再是阵列的活动成员时,这会造成称为“双重故障”的情况。 双重故障情况可能导致立即丢失受影响的条带中的任何信息数据。
图 2:故障驱动器的双重故障(条带 1 和 2 中的数据丢失)— 降级的阵列
有可能在发生双重故障时阵列仍保持最佳状态。 多个硬盘上的相同坏LBA将发生这种情况。 考虑到如今较大硬盘上有很多LBA,这种情况会非常少见。 多个硬盘上的同一 LBA 不太可能同时“损坏”。
执行定期的一致性检查操作将纠正单故障,无论是物理坏块还是数据的逻辑错误。检查一致性还将缓解出现其它错误时的双重故障情况的风险。 如果任何给定磁条中只有一个错误,检查一致性几乎始终可以消除此错误。
返回页首
第 2 章:穿孔:什么是穿孔以及穿孔是如何发生的?
穿孔是戴尔PERC控制器的一项功能,旨在允许控制器还原阵列的冗余,尽管数据丢失是由双重故障情况导致的。 穿孔的另一个名称是“带错重建”。 RAID控制器将检测双重故障,由于没有足够的冗余来恢复受影响磁条中的数据,控制器在该磁条中进行穿孔,允许继续重建。
- 导致无法访问多个驱动器上同一磁条中的数据的任何情况都属于双重故障
- 双重故障导致受影响磁条内的所有数据丢失
- 所有穿孔都属于双重故障,但所有双重故障都不是穿孔
图 3:穿孔的条带(条带 1 和 2 中的数据由于双重故障情况而丢失)— 最佳阵列
如果没有穿孔功能,阵列重建将失败,并使阵列处于降级状态。 在某些情况下,这些故障可能导致其它驱动器出现故障,从而导致阵列处于无法正常工作的脱机状态。 在阵列上穿孔不会影响引导至或访问阵列上的任何数据的能力。 由于双重故障情况导致的任何损坏或数据丢失已经发生。
出现以下两种情况中的一种即可进行穿孔:
- 双重故障已存在(发生第二个错误时数据丢失)
- 在降级状态时,如果在线驱动器上发生坏块,则对该LBA进行穿孔
对阵列进行穿孔的这种优势将保持系统可用于生产,并还原阵列冗余。 不管是否发生穿孔,受影响磁条中的数据都丢失。 LSI方法的主要缺点是在阵列中有穿孔时,只要访问受影响的数据(如果有),仍会遇到不可纠正的错误。
穿孔可能在三个位置发生。 首先,穿孔可能发生在不包含数据的空白区域。 该磁条将不可访问,但由于该位置没有数据,将不会有很大影响。 不管操作系统如何尝试写入穿孔的磁条都将失败,数据将写入其它位置。
其次,穿孔可能发生在所包含的数据不是重要数据(如README.TXT文件)的磁条中。 如果不访问受影响的数据,则正常I/O期间不会产生错误。 尝试执行文件系统备份将无法备份受穿孔影响的任何文件。 执行检查一致性或巡检读取操作将 针对适用的 LBA 和/或条带生成检测代码:3/11/00。
第三,访问的数据空间中可能会发生穿孔。 在这种情况下,数据丢失可能导致各种错误。 这些错误可能是一些小错误,对生产环境不会造成负面影响。 这些错误也可能更严重,可能阻止系统引导至操作系统,或导致应用程序失败。
发生穿孔的阵列最终将必须删除并重新创建,以消除穿孔。 此过程导致所有数据都将被擦除。在消除穿孔之后,将需要重新创建数据或还原备份数据。 可以将穿孔问题的解决安排在更符合业务需求的时间。
如果访问穿孔条带中的数据,则将继续针对受影响的坏 LBA 报告错误,并且没有可用的纠正措施。最终(可能是几分钟、几天、数周、数月等),坏块管理(BBM)表将填满,导致一个或多个驱动器标记为预测性故障。参见图3,驱动器0通常是由于驱动器1和驱动器2上的错误传播到它而被标记为预测性故障的驱动器。驱动器 0 实际上可能运行正常,更换驱动器 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,将磁盘0移至插槽1,磁盘1到插槽2,磁盘2到插槽0)
- 根据需要重新创建阵列
- 对阵列执行完全初始化(不是快速初始化)
- 在阵列上执行检查一致性
如果检查一致性完成且没有错误,则可以安全地假设阵列现在运行正常,已去除穿孔。现在可以将数据还原到正常运行的阵列。
在更严重的情况下,该问题可能无法解决,并且在执行了这些步骤后错误仍然存在。如果执行这些步骤无法解决问题,请联系戴尔技术支持以获得进一步的帮助。
可能需要更详细地分析穿孔,以确定哪些驱动器是共同的。例如,在图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硬件和阵列执行前瞻性维护来避免。
提醒: 通过有效监控系统,可以及时检测并纠正问题,这也可以降低出现更严重问题的风险。
相关文章
PERC — 如何修复 RAID 穿孔
返回页首