APP下载

基于扩容阈值的磁盘阵列故障恢复分析

2024-02-03李萧言

信息记录材料 2024年1期
关键词:磁盘阵列对角磁盘

李萧言,安 阳

(山西工程技术学院 山西 阳泉 045000)

0 引言

目前,数字经济和网络社会的蓬勃发展为存储系统在存储容量、数据安全等方面带来了新的发展机遇和挑战。磁盘阵列(redundant arrays of independent disks,RAID)将多个独立磁盘在逻辑上组成具有冗余能力的单一磁盘,提高了数据的集成度和处理量[1],其中RAID6 具有双冗余校验,与纠删码技术[2]结合使存储系统具有更高的可靠性。

在现实应用中,磁盘阵列根据容量要求提前部署,然而基于历史数据的预测无法应对当前发展迅速的互联网应用需求。 因此,当面对资源耗尽的风险时通常采用扩容技术[3]来满足容量和带宽增长的需要。 刘靖宇等[4]提出一种高效的扩容方案Cross⁃Scale,该方案定义了扩容阈值,根据阈值与磁盘阵列剩余空间的关系分别提出不同的扩容方法,有效提高了扩容效率。 但是,在磁盘阵列扩容的过程中,由于读写操作增加,更容易出现磁盘故障,因此扩容方法需要具备一定的容错能力,以应对随时出现的磁盘故障。

针对以上问题,为了保证磁盘阵列中数据的完整性和安全性,本文探讨了在扩容过程中的磁盘故障情况及恢复[5-6]方法。

1 阈值条件下的磁盘阵列扩容方法

增加了阈值条件的扩容方案Cross⁃Scale 基于N⁃Code[7]编码而设计,该编码是一种优化的纵式RAID6 阵列码,每个条带即为一个编码阵列,形成了(p+1)×(p-1)的数据布局,其中p为大于2 的质数。 若用Ci,j表示位于第i行,第j列的块,那么该编码的校验链构造规则如下。

水平校验链的构造规则如公式(1)所示:

对角校验链的构造规则如公式(2)所示。

p=7 时N⁃Code 编码阵列的校验链分布方式如图1 所示,相同字母标记的块属于同一校验链。 可见N⁃Code 的数据块分散在所有逻辑磁盘中,校验块分为水平和对角两种类型,其中水平校验块分散存储在中间的p-1 个磁盘中,对角校验块分布在两侧磁盘。

图1 N⁃Code 编码阵列的校验链分布

由于N⁃Code 具有两条校验链,可容两块磁盘同时失效,所以为了不影响阵列的安全性,扩容过程中也应及时更新校验链。 Cross⁃Scale 扩容过程由迁移窗口Wm引导,迁移窗口的大小由扩容前后的编码阵列大小决定,只有处于迁移窗口中的区域才进行数据的重组。 该方案中提出了扩容阈值(capacity threshold,CT),根据CT与磁盘阵列最小剩余空间Tmin、单个磁盘的分块数D的关系选择不同的数据重组方案。 当0≤Tmin<CT和CT≤Tmin≤D时,分别在迁移窗口内通过拼接写有数据的数据行和空白数据行组成新编码阵列,然后再进行数据迁移和校验链的更新。

根据上述Cross⁃Scale 的实现思想可知,在整个磁盘阵列中,编码阵列可分为处于迁移窗口Wm的前、中、后三种情况,如图2 所示,其中m为原磁盘阵列中的磁盘数量,n为增加的扩容磁盘数量。 根据迁移窗口的移动方向,Wm左侧为扩容之后的区域,右侧为未扩容的区域,Wm中的区域正在进行数据的移动和校验链的更新。

图2 迁移窗口引导的扩容过程

2 扩容过程中的磁盘故障处理

若在一般使用过程中出现磁盘故障时,可以利用校验块和幸存的数据块来恢复数据。 假设在图1 中的磁盘2损坏,存储其中的C0,2、C1,2、C2,2、C3,2、C4,2、C5,2中的数据丢失,C0,2中存储的数据可根据水平校验链重新计算得到,即C0,2=C0,1⊕C0,3⊕C0,4⊕C0,5⊕C0,6⊕C0,7;若磁盘2 和4 同时损坏,则需要同时使用水平和对角校验链来恢复数据,即先用对角校验链恢复C4,2,即C4,2=C2,0⊕C3,1⊕C5,3⊕C0,5⊕C1,6⊕C2,7,再用水平校验链恢复C4,4,即C4,4=C4,0⊕C4,1⊕C4,2⊕C4,3⊕C4,5⊕C4,6,以此类推。

而对于扩容过程中的磁盘故障处理,迁移窗口之前的编码阵列已经完成了数据迁移和校验链的更新,可以按照新的校验链及公式(1)和(2)恢复数据;迁移窗口之后的区域还未迁移数据,则按照扩容前的校验链恢复数据;而对于迁移窗口中的编码阵列,情况较为复杂,需要解决的问题可归纳为:单盘故障或是双盘故障;故障盘为数据盘或是校验盘;故障盘中的数据是否需要迁移;需要迁移的数据是否已经写入。 下面针对迁移窗口中的磁盘故障情况及恢复方法分别进行分析。

2.1 单盘故障恢复

(1)当0≤Tmin<CT时,由于剩余空间不足,采用了拼接写有数据的相邻条带进行扩容,首先考虑磁盘阵列中出现单盘故障的情况,该故障盘的位置存在两种情况:①故障盘的盘号处于1 ~m+n-2 之间。 在该情况下,根据N⁃Code 的数据布局规则可知,故障盘只存储数据块和水平校验块。 而在扩容过程中,虽然进行了数据的迁移,但是数据的移动限制在同一水平校验链中,水平校验值可保持不变,所以可以通过水平校验链的降级模式来恢复数据块;如果丢失的是水平校验值,则根据校验链中的数据重新计算校验值即可。 若故障盘包含了在扩容过程中需要迁移的数据,则将恢复后的数据直接写入迁移的目标位置,以此减少数据块的读写次数。 ②故障盘的盘号为0 或m+n-1。 在该情况下,故障盘中同时存储了数据块和对角校验块,根据扩容过程中的数据迁移的规则可知,该故障盘中不包含需要迁移的数据。 若迁移窗口中的编码阵列正在迁移数据,可等待迁移完成后再进行数据重构,以此来减少校验值的重复更新。 重构时可根据水平校验链恢复故障盘中的数据块,通过对角校验链更新所有对角校验值。

若迁移窗口中的编码阵列已经完成校验更新而发生磁盘故障,则有两种数据重构方式:可利用全部对角校验链进行数据重构,也可以采用水平和对角校验链结合的方式进行数据重构,其中,数据块用水平校验链恢复,校验块用对角校验链恢复。 如图3 所示为由6 块扩容至8 块磁盘的过程,数据迁移已完成,其中P 和Q 标记的块分别表示根据不同校验链产生的校验块,第2、3 数据行为拼接的数据行,其中磁盘0 失效。 图3(a)中的编码阵列仅利用对角校验链恢复数据,只需读出由绿色标记的24 个块;而在图3(b)的编码阵列中,采用水平和对角校验链结合的方式恢复数据,由于一部分需要读出的数据块为水平校验链和对角校验链的公共块,已经在恢复数据块时读出,所以只需读出18 个块,可以有效减少数据块的读写操作,因此采用水平和对角校验链结合的方式进行数据重构为佳。

图3 磁盘的数据重构

(2)当CT≤Tmin≤D时,剩余空间充足,两种数据行拼接方式均可行。 若采用相邻条带拼接的方式,则与0≤Tmin<CT时故障处理的过程相同。 下面对空白数据行拼接时的情况进行分析。 若磁盘阵列中出现单盘故障,该故障盘的位置同样存在两种情况:①故障盘的盘号处于1 ~m+n-2 之间。 在该情况下,迁移窗口为一个编码阵列的大小,若该故障盘已经完成迁移或者无需迁移数据,则不影响迁移窗口内后续的迁移操作。 待本轮数据迁移完成后,用新的磁盘阵列编码进行数据重构即可。 若该磁盘在迁移窗口内包含正在迁入或迁出的数据,则待数据迁移完成后,利用读入缓存的数据,结合水平和对角校验链进行恢复,减少数据块读取的数量,提高重构速度。 ②故障盘的盘号为0 或m+n-1。 在该情况下,故障盘中的数据块并没有划分在迁移区域中,因此不影响后续的数据迁移过程。 可待窗口内迁移区域中的数据移动后,将扩容进程挂起,按照新的编码阵列进行数据重构。

2.2 双盘故障恢复

(1)当0≤Tmin<CT时,仍然采用了拼接写有数据的相邻条带进行扩容。 虽然在扩容过程中数据水平移动而保留了原水平校验值,但是由于拆分了部分条带,导致部分对角校验值暂时失效,无法参与数据恢复。 所以在此条件下出现双盘故障时,以减少迁移窗口内的数据损失为目标进行,此时故障盘可能出现的位置有以下三种情况:①故障盘的盘号分别为0 和m+n-1。 在该情况下,两块故障盘中包含所有的对角校验值和部分数据块,均不包括需要迁移的数据块,不影响该区域的数据迁移过程。 此时虽然有两块故障盘,但是每条水平校验链中只损坏或丢失了一个数据,因此所有的数据块可以根据水平校验链进行重构。 而对于对角校验链,可以等待迁移区域内的数据块移动后再重新计算,以此减少校验值的更新次数。 ②故障盘的盘号均位于1~m+n-2 之间。 在该情况下,故障盘中只包含数据块和水平校验块,将已读入缓存中的数据写入目标位置后,需结合水平校验和对角校验实现重构。 由于加入了扩容磁盘和迁移数据的缘故,磁盘阵列中存在一些空白块,若故障盘在损坏前包含空白块,可减少数据损失,通过水平校验链即可重构位于同一数据行中的数据块或校验块。 ③故障盘的盘号一个为0 或m+n-1,另一个位于1~m+n-2 之间。 在该情况下,盘号为0 或m+n-1 的故障盘包含对角校验块和数据块,盘号位于1 ~m+n-2 之间的故障盘包含水平校验块和数据块。 此时,与损坏对角校验块位于同一数据行中的数据块是水平校验链中唯一损坏的数据块,因此可以通过水平校验链进行重构。 若位于1~m+n-2 之间的故障盘为扩容磁盘或者包含数据迁移区域,则可以重构与空白块位于同一行的数据块或校验块。

(2)当CT≤Tmin≤D时,若采用相邻条带拼接的方式,则与0≤Tmin<CT时故障处理的过程相同,下面分析空白数据行拼接时的情况,此时故障盘出现的位置同样有以下三种情况:①故障盘的盘号分别为0 和m+n-1。 在该情况下,故障盘在迁移窗口中没有需要移动的数据,因此不影响后续的数据迁移。 待窗口中数据迁移完成后,根据扩容后的编码阵列进行数据重构。 ②故障盘的盘号均位于1~m+n-2 之间。 在该情况下,若故障盘均已完成数据迁移,则待迁移窗口中其他数据移动后,再根据扩容后的编码阵列重构数据。 若故障盘均处于数据迁移的过程中,且已将需要迁移的数据读出或者故障盘正处于等待数据迁入的状态,则不影响窗口中的迁移过程,待数据迁移后,根据扩容后的编码阵列重构数据;若未及时将需要迁移的数据读出,则将窗口内已经迁移的数据移回原始位置,回退到扩容前的状态,按照扩容前的编码阵列重构数据。 若故障盘之一处于已完成迁移的状态,另一故障盘处于迁移进程中,且已经将需要迁移的数据读出或故障盘正处于等待数据迁入的状态,则不影响窗口中的迁移进程,待数据迁移完成后,根据扩容后的编码阵列重构数据;若未将迁移数据读出,且故障盘包含空白块,则可以通过水平校验链重构位于同一数据行中的数据块或校验块。 ③故障盘的盘号一个为0 或m+n-1,另一个处于1~m+n-2 之间。 在该情况下,故障盘之一位于迁移窗口内的区域不需移动数据,另一块故障盘正在迁移数据,或已经完成数据迁移。与对角校验值处于同一数据行的数据可以由水平校验链重构,对于其他损坏或丢失的数据,若该故障盘已经完成数据迁移,待窗口中其他数据移动后,再根据扩容后的编码阵列重构数据。 若该故障盘正在迁移数据,且已经将该盘内需要迁移的数据读入缓存或该盘仅在等待数据迁入,则待窗口内的数据迁移完成后,按照扩容后的编码阵列重构数据;如未将故障盘内需要迁移的数据读入缓存,则将窗口内已经迁移的数据移回原始位置,回退到扩容前的状态,按照扩容前的编码阵列进行数据重构。

3 结语

综上所述,针对磁盘阵列扩容过程中数据读写增多,故障概率增大的问题,本文基于设有扩容阈值的Cross⁃Scale 扩容方案,分析了不同磁盘阵列条件下的故障情况,并分别针对单盘和双盘故障,在不同的故障位置,故障盘中存储不同数据类型,及不同扩容阶段设计了数据恢复方法,保障了扩容过程中的数据安全性与完整性,且保留了原编码的容错能力。 本文方法是扩容技术的进一步优化,未来会在此基础上结合新型存储介质继续开展研究。

猜你喜欢

磁盘阵列对角磁盘
解决Windows磁盘签名冲突
拟对角扩张Cuntz半群的某些性质
更换磁盘阵列磁盘
修改磁盘属性
磁盘组群组及iSCSI Target设置
创建VSAN群集
电视播出机房磁盘阵列预防性维护
非奇异块α1对角占优矩阵新的实用简捷判据
一例EMS磁盘阵列故障分析及改进
存储虚拟化的三个层次