本文主要是介绍Intel C220/C600 RAID 在硬盘上的数据结构-纯干货,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Intel C220/C600 RAID 在硬盘上的数据结构-纯干货
- 以4盘6TB 组建的RAID 5为例
- 阵列扇区在磁盘上的分布结构
- 一些计算方法
以4盘6TB 组建的RAID 5为例
因为自己的4盘阵列坏了,数据恢复需要,就简单研究了一下磁盘阵列写在磁盘上的数据结构。
基础信息如下:
- 单盘6TB,每逻辑扇区512Byte,每盘扇区数11721045168个,扇区编号0–11721045167。
- 磁盘A、B、C、D按顺序,以Stripe大小为128KB组成4盘RAID 5阵列后,100%空间组建卷Volume000(在操作系统中会被识别为是一个“物理磁盘”),卷空间大小为16.4TB;每逻辑扇区512Bytes,扇区总数35163121664个,扇区编号0–35163121663。
- 在Windows下对Volume000进行分区,只创建一个16.4TB的简单卷,并格式化成NTFS文件格式。
阵列扇区在磁盘上的分布结构
使用WinHex对磁盘A、B、C、D上的扇区数据进行分析,得到如下磁盘上的阵列数据(DDF:Disk Data Format)及扇区的分布结构。
- 每个物理磁盘的扇区0–11721040639扇区被划入阵列中,其中磁盘D的扇区11721040384–11721040639虽然纳在阵列内(最后一个条带,计算校验的时候会带上),但是实际上不在Volume000的读写范围内。
- 每个物理磁盘的扇区11721040640–11721045167均被保留(即组成阵列后,此部分扇区是操作系统不可见的,只有阵列卡自己能操作)。
- 每个物理磁盘的扇区11721045007–11721045166被写入阵列信息(DDF),其中扇区11721045166中的数据最重要,包括了组成磁盘的序列号以及创建的Volume000的信息。每个物理磁盘上这些扇区的数据都是一样的。
- 创建阵列的时候选择的Stripe大小为128KB,实际上是指组成阵列的(N+1)个磁盘,每个磁盘的Stripe大小为128KB,即阵列中每个磁盘均各自拿出256个扇区,组成一个带校验功能的数据条带,条带大小为Stripe*N,即768个扇区、384KB。
- 阵列的块顺序为左异步(连续)。
具体参见如下(PD为校验数据块,左边列中的数字是物理磁盘上的扇区编号,中间框内的数字是阵列上Volume000的扇区编号)。
一些计算方法
首先是一定要知道Stripe Size,即上面提到的128KB/256扇区,一般是阵列卡的默认值。如果不记得当时创建阵列时候的数据,那就只能靠软件或人工来分析识别。
- 假定Stripe Size 是M个扇区,阵列一共有(N+1)个磁盘组成(上述例子里即是M=256,N=3),组成阵列后的卷(即上述Volume000)的扇区总数为(S+1)个(即卷上的扇区的编号从0到S)。
- 计算 T = [S/(M*N)] ,即商的整数部分为最大条带数编号(编号从0开始),总条带数为T+1。
- 每个物理磁盘的0-P号扇区归入阵列管理,其中P=(T+1)*m-1。
- 卷扇区编号s推算物理磁盘编号n与扇区编号p的方法:
– 先计算 s/M/N/(N+1) 的余数,通过余数查上图可得扇区s在图内位置,即物理磁盘编号n及物理扇区偏离z,则p=[s/M/N/(N+1)]+z 。
这篇关于Intel C220/C600 RAID 在硬盘上的数据结构-纯干货的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!