北亚工程师详解数据恢复中RAID6结构

简介:

【什么是RAID】

RAID的概念描述在互联网上比比皆是,用最简单的原理描述,就是在定义存储方式时允许在一部分数据缺失的情况下不影响全部数据,类似于通讯领域的纠错码。不同的冗余模式形成了不同的RAID类别。       

【单一冗余模型】

我们需要先描述仅具备一个磁盘冗余的RAID模型(思想同RAID3,RAID4,RAID5)。
假设现在有3页空白的纸,用来记录一些数字,为了更清晰地记录,我们先将每页白纸划出相同大小的一些表格。再假设有一个可能:这3页纸,特定情况下会有其中某一页丢失。为了在上述设定情况保证这些数字能完整安全的记录下来,我们要设计一些互相牵连的冗余关系。
如我们要记录的数字序列是:3、14、28、4、98、88  。我们可以依次在第1页和第2页写要记录的数字,在第3页写上他们的和。如下图所示:

1

根据上图,可以很容易的分析出,不管这3页中的哪一页丢失,都可以通过另两页计算另一页的数据来。很显然,即使是超过3页的情况,按上述方式设计记录模式,也可以支持任意一页记录的丢失。

但这个模型却不会在实际中应用,原因来自于上图的第三行数据:98+88 = 186 ,从这行的运算来看,为了记录整个一行数据的和,校验页所用的空间要大于等于任何一个数据页。其实,校验和的总容量要等于所有数据页的总容量,换个角度说,如果记录的是10页数据,那么可能要用另外10页的空间来记录校验,这是完全没有意义的方案(与其这样,还不如所有数据抄两份,即RAID1的模型)
所以,一些工程师开始用别的算法代替加法,以减少校验和的总容量,但算法的实现效果需要与加法完全相同,同时运算要足够简单。最好的方案就是异或。
异或是基于位的运算,首先其运算性能非常好,无需更多的专门运算器。同时异或算法完全满足正运算与逆运算的完全映射(即,正运算的结果唯一,同时这个正运算的逆运算结果也唯一。这个在数学上叫什么?恕笔者数学底子差,暂时这样称呼),满足交换律和结合律。而且最重要的是,异或不会升位。
用异或算法改写后的存储记录如下:

2

可以很清晰得看到,第三行的校验和,不再是3个数字,而且不论多少个数据成员,用异或得到的校验和容量不会累加。

为了更好的概括,我们用"+"表示这个正向的校验运算,用“-”表示其逆运算。在我们最初的描述中,就表示数字的加减法,之后"+"表示异或,“-”也是异或(异或的逆运算也是异或,所以运算器简单,速度快)
假设有n个存储成员,把每个存储成员划分成若干个存储单元,其中n-1(数学减法,下面的Dn-1同理)个成员盘为数据,1个成员盘为校验。每个水平条带上的校验关系如下:

D1 + D2 + D3 + ... +Dn-1 = P1
Dx = P1 - D1 - D2 - D3 - ... -Dn-1(D序列中排除Dx)
也就是:Dx = P1 + D1 + D2 + D3 +... +Dn-1(D序列中排除Dx)

【多次冗余模型】

    上述单一冗余仅支持一个存储成员的缺失,在实际中有可能需要更高的冗余性,则需要更进一步对算法进行改进。
    如果需要设计一种存储模型,实现在缺失2个成员的情况下,存储整体依然可以运算完整,最好的数学模型恐怕就是二元一次方程了,形如下面方程组:
aX+bY=c
dX+eY=f。 其中a/d  != b/e
上述方程式用到乘法与除法,同时,乘法与除法完全可逆,且满足交换律、结合律与分配率。
还是在加法中遇到的困难,普通的数学乘法会导致校验容量的累加,所以不可取。有没有一种乘除法符合我们的要求呢?有!---基于伽罗华域的乘除法。
数学概念是很抽象的,仅以GF(2^8)为例,我们设计一个有限循环域,域上仅有0-255这几个数字,这些数字之间再设计一个完整的加减乘除运算,其结果依然在这些数字中,而且运算结果唯一,无二义性。
我们来设计一种算法,对于2,如果2的n次方大于某个值(本原多项式),则让其对这个值(本原多项式)取余,确保又折回到0-255这个范围内,如果从2^0,2^1,2^2,,,直到2^255,按这个规律做运算,得到的值均处于0-255范围内,且均不相等,这样就形成了一个一对一的映射关系,同时满足2的这些次幂与结果之间就乘法/除法的运算规律(具体理论需参考群、环、域、有限域等数学理论)。
在GF(2^8)上,有16个满足条件的本原多项式,分别如下:
1     x8+x7+x6+x5+x4+x2+1          1 1111 0101 = 0x1F5  
2     x8+x7+x6+x5+x2+x+1            1 1110 0111 = 0x1E7
3     x8+x7+x6+x3+x2+x+1            1 1100 1111 = 0x1CF
4     x8+x7+x6+x+1                         1 1100 0011 = 0x1C3
5     x8+x7+x5+x3+1                       1 1010 1001 = 0x1A9
6     x8+x7+x3+x2+1                       1 1000 1101 = 0x18D
7     x8+x7+x2+x+1                         1 1000 0111 = 0x187
8     x8+x6+x5+x4+1                       1 0111 0001 = 0x171
9     x8+x6+x5+x3+1                       1 0110 1001 = 0x169
10   x8+x6+x5+x2+1                       1 0110 0101 = 0x165
11   x8+x6+x5+x+1                         1 0110 0011 = 0x163
12   x8+x6+x4+x3+x2+x+1            1 0101 1111 = 0x15F
13   x8+x6+x3+x2+1                       1 0100 1101 = 0x14D
14   x8+x5+x3+x2+1                       1 0010 1101 = 0x12D
15   x8+x5+x3+x+1                        1 0010 1011 = 0x12B
16   x8+x4+x3+x2+1                      1 0001 1101 = 0x11D

常用0x11D做为raid6的本原多项式,意思是2的n次方如果大于0x11D,就对于做xor的取余运算,确保结果小于0x256,这样就可以算出2^0到2^255之间的所有数值。

GF(2^8)上的加减法同样是异或算法(xor)。
GF(2^8)上的乘法即多项式乘法,但依然要对本原多项式取xor余,在算法设计上,有多种计算方式,但在GF(2^8)上,最快的推荐方法是查表法,只需事先计算好所有的0~255 分别乘以 0~255的值,生成65536个值的表格,计算时直接查表即可。也有使用对数查表法,使乘法转变为加法进行运算的,需要查表和加法结合使用。
GF(2^8)上的除法可转换为对其逆元的乘法,即a 除以 d,假设d对应于(x的m次幂),那找出对应(x的255-m次幂)的值d',a除以d,即等于a乘以d'。

【RAID6】

在,加减乘除都确定后,2元一次方程组就可以求解了。所以,一个以此原理生成的RAID的结构设计大致如下图(以5块盘为例,P为第一重校验,Q为第二重校验,xn为数据):

4

之所以P和Q螺旋式循环分布,是为了使所有磁盘负载均衡,如果不好理解,可以把P和Q单独放在一列中,算法的意义是相同的。
再重复一下,下面提及的+、-、*、/运算都是指基于GF(2^8)上的加、减、乘、除
P值等于同一行(条带)上的所有单元相加的和。或者可以理解为1与每个单元相乘后的累加和,如第一个条带的P:

P= x1+x2+x3  也就是P=1*x1 + 1*x2 + 1*x3

在GF(2^8)上,每个多项式对应一个0~255的值,即d0对应多项式X的0次幂,d1对应多项式X的2次幂等,按多项式展开,X为2进制,故d0 = 1,d1 =2,d2=4 ,d3=8,等等,如下表所示:
5

返回RAID结构图中,Q值等于每个数值单元格乘以他们的相应的dn再累加的结果,其中dn可约定,只需保证同一条带的运算中不重复出现dn即可,如第一行的Q可以为:
Q = d1 x1 + d2x2 +d3*x3
这样,对于每一行(条带),就可以保证任意2个单元丢失,都可以计算出来(为了明了,以下计算直接将减法改为加法):
以第一行为例:
a) 如果P,Q均丢失,数据区不影响,x1,x2,x3均可正常读写
b)如果xn丢失,根据P或Q都可计算出来(实际中,因P 的计算更快速,通常会使用P校验计算出丢失的 xn)
c)如果P,xn丢失,P值不做处理,假设丢失的是x2,根据Q值的定义

Q = d1* x1 + d2*x2 +d3*x3
=> d2*x2 = Q + d1*x1 + d3*x3
=> x2 = (Q + d1*x1 + d3*x3) * x253 ;
/```  
/注:x253为x2的逆元,可以查表得到
d) 如果两个x丢失,则可根据二元一次方式的标准解法进行求解,假设丢失的是x1,x3:

P = x1+x2+x3

  Q =  d1* x1 + d2*x2 +d3*x3

=> x1 = P + x2 + x3
=> Q = d1 (P + x2 + x3) +d2x2 +d3*x3
=> Q = d1P + d1x2 + d1 x3 + d2x2 + d3*x3
=> Q = d1P + d1x2 + d2x2 + d1x3 + d3*x3
=> Q + d1P + d1x2 + d2x2 = (d1+d3) x3
=> x3 = ( Q + d1P + d1x2 + d2*x2) / (d1+d3)

查表法得到(d1 + d3)的逆元dn后,可知
x3 = ( Q + d1*P + d1*x2 + d2*x2) * dn  
再根据P= x1 + x2 + x3求得x1,即完成所有数据的补缺。

本文出自 “张宇(数据恢复)” 博客,请务必保留此出处http://zhangyu.blog.51cto.com/197148/1134820
相关文章
|
6月前
|
存储 算法 数据挖掘
服务器数据恢复—昆腾存储StorNext文件系统数据恢复案例
服务器数据恢复环境: 昆腾某型号存储,8个存放数据的存储柜+1个存放元数据的存储柜。 元数据存储:8组RAID1阵列+1组RAID10阵列+4个全局热备硬盘。 数据存储:32组RAID5阵列,划分2个存储系统。 服务器故障: 数据存储的1个存储系统中的一组RAID5阵列中有2块硬盘先后出现故障离线,导致该RAID5阵列失效,整个存储系统崩溃不可用。
服务器数据恢复—昆腾存储StorNext文件系统数据恢复案例
|
6月前
|
存储 算法 数据挖掘
服务器数据恢复-昆腾存储StorNext文件系统数据恢复案例
昆腾某型号存储,StorNext文件存储系统。 共有9个分别配置了24块磁盘的磁盘柜,其中8个磁盘柜存放普通数据,1个磁盘柜存放元数据。 存放元数据的磁盘柜中的24块磁盘组建了8组RAID1阵列和1组4盘RAID10阵列,还有4个全局热备硬盘。 存放普通数据的磁盘柜中的192块磁盘共组建了32组6盘RAID5阵列,32组RAID5阵列分为2个存储系统。
服务器数据恢复-昆腾存储StorNext文件系统数据恢复案例
|
1月前
|
存储
服务器数据恢复—EMC存储RAID5阵列崩溃的数据恢复案例
服务器数据恢复环境: 一台EMC某型号存储设备,该存储中有一组由12块(包括2块热备盘)STAT硬盘组建的raid5阵列。 服务器故障: 该存储在运行过程中突然崩溃,raid瘫痪。数据恢复工程师到达现场对故障存储设备进行初检,发现raid中有两块硬盘掉线但只有一块热备盘成功激活,所以导致阵列瘫痪,上层lun无法使用。
|
6月前
|
存储 关系型数据库 MySQL
服务器数据恢复—同友存储raid5磁盘阵列数据恢复案例
服务器数据恢复环境: 某市教育局同友存储,存储中有一组由数块磁盘组建的raid5阵列,存储空间划分若干lun。每个lun中有若干台虚拟机,其中有数台linux操作系统的虚拟机为重要数据。 服务器故障: raid崩溃导致存储无法启动。
服务器数据恢复—同友存储raid5磁盘阵列数据恢复案例
|
3月前
|
Oracle 关系型数据库 数据挖掘
服务器数据恢复—硬盘坏道导致raid5阵列崩溃的数据恢复案例
一台ibm x3850服务器,有一组由5块硬盘组建的raid5磁盘阵列,上层是Redhat Linux操作系统,部署了一个oracle数据库。 raid5阵列中2块硬盘离线,阵列崩溃。经过检测发现该raid中的热备盘未激活,硬盘无物理故障,无明显同步表现。
服务器数据恢复—硬盘坏道导致raid5阵列崩溃的数据恢复案例
|
2月前
|
存储 运维 小程序
服务器数据恢复—双循环RAID5阵列数据恢复案例
服务器存储数据恢复环境: 一台存储中有一组由7块硬盘组建的RAID5阵列,存储中还有另外3块盘是raid中掉线的硬盘(硬盘掉线了,管理员只是添加一块的新的硬盘做rebuild,并没有将掉线的硬盘拔掉)。整个RAID5阵列的存储空间划分了一个LUN。 服务器存储故障: 硬盘出现故障导致存储中阵列瘫痪。 和管理员沟通,据管理员说是磁盘阵列中某些硬盘出现故障导致存储不可用,初步判断RAID中有硬盘掉线了。
|
4月前
|
存储 负载均衡 算法
服务器数据恢复—EVA存储介绍&常见故障和数据恢复
EVA存储常见故障: 1、RSS中多个磁盘掉线,超过冗余保护级别。 2、加入新磁盘,进行数据迁移时,新磁盘存在物理故障。 3、VDISK被删除或EVA初始化。 4、突发性主机与存储无法连接。无法discover存储。
服务器数据恢复—EVA存储介绍&常见故障和数据恢复
|
5月前
|
存储 数据挖掘
服务器数据恢复—EMC存储raid5磁盘阵列崩溃的数据恢复案例
一台EMC某型号存储由于存储中raid5阵列出现故障导致服务器崩溃,由于数据涉密,需要工程师到现场恢复数据。 服务器数据恢复工程师到现场后对数据进行检测,经过检测发现服务器崩溃是由于raid中某些硬盘掉线所导致。将所有磁盘编号后取出,硬件工程师对所有磁盘进行检测后没有发现有硬盘存在物理故障,也没有坏道。数据恢复工程师将所有磁盘以只读方式做扇区级的全盘镜像,镜像完成后将所有磁盘还原到原存储中,后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。
服务器数据恢复—EMC存储raid5磁盘阵列崩溃的数据恢复案例
|
5月前
|
存储 运维 Oracle
服务器数据恢复—MSA2000存储中raid5磁盘阵列数据恢复案例
服务器存储数据恢复环境: 某品牌MSA2000服务器存储中有一组由8块SAS硬盘组建的raid5磁盘阵列,其中包含一块热备盘。分配了6个LUN,均分配给HP-Unix小机使用。磁盘分区由LVM进行管理,存放的数据主要为Oracle数据库及OA服务端。 服务器存储故障: 服务器存储raid5阵列中有两块硬盘先后离线,服务器瘫痪,无法正常访问lun。
服务器数据恢复—MSA2000存储中raid5磁盘阵列数据恢复案例
|
11月前
|
存储 数据挖掘
服务器数据恢复—EMC存储raid5阵列瘫痪的数据恢复案例
服务器存储数据恢复环境: EMC某型号存储,8块组建一组raid5磁盘阵列。上层操作系统采用zfs文件系统。 服务器存储故障&分析: raid5阵列中有2块硬盘未知原因离线,raid5阵列崩溃,上层应用无法正常使用。
服务器数据恢复—EMC存储raid5阵列瘫痪的数据恢复案例