】本内容摘自《数据重现-文件系统原理精解与数据恢复最佳实践》
前面我们提到,利用阵列
0
号成员盘上第一个校验块的位置可以判断阵列的校验循环方向。不只如此,当阵列的校验循环方向确定后,还可以利用每个成员盘上第一个校验块的位置,对盘序进行判断。
例如,假设一个左循环阵列由
N
块磁盘组成,那么,
0
号块为校验的是最后一块磁盘,也就是
N-1
号磁盘;
1
号块为校验的是
N-2
号磁盘
…
,
N-1
号块为校验的是
0
号磁盘。同样,对于由
N
块磁盘组成的右循环阵列,
0
号块为校验的是
0
号磁盘,
1
号块为校验的是
1
号磁盘
…
,
N-1
号块为校验的是
N-1
号磁盘。
但是,很多情况下,我们并不能直接判断出一个磁盘的第一个校验块位置是否是校验内容。比如,对于
MBR
磁盘,
1
~
62
号扇区的内容通常全是
0
,假设一个阵列由
3
块磁盘组成,块大小为
8
个扇区,那么,它们校验的结果也会是
0
,我们无法通过它们来判断哪个是数据块,哪个是校验块。如图
11.28
所示,被加亮显示的部分全部为
0
。
虽然在这种特殊情况下不能直接判断哪一个是校验块,但我们毕竟可以在磁盘的其他某个位置找到能够证明当前位置是校验数据的扇区,比如
FAT
表、
MFT
等。在知道块大小的情况下,我们可以利用当前位置的扇区号与块大小计算出该磁盘第一个校验块的块号。
下面,我们以一个由三块磁盘组成的、块大小为
8
个扇区的
RAID5
为例说明如何进行计算
(
见图
11.29)
。在计算的过程中会使用取整与取余运算,如果读者对此不太了解,请查阅第一章的基础知识部分。
首先我们说明一下块号与条带号,对于某个扇区来讲,它的条带号与块号是相同的,只不过在本磁盘内称为块号,而对于整个磁盘组,我们称之为条带号。比如,所有磁盘的
0
号扇区都属于
0
号条带,
1
号磁盘的
0
号扇区也不例外。但对于
1
号磁盘来讲,它的
0
号扇区位于它的
0
号块。
我们从图
11.29
中看到,磁盘数为
3
,从第一个校验块起,经过
3
个条带后,校验块的位置就又回到原来的磁盘。比如,
0
号条带的校验位于
2
号盘,经过
0
、
1
、
2
号三个条带,
3
号条带内的校验块又回到
2
号盘上。
我们把所有的条带进行分组,每个组的条带数与阵列中的磁盘数相等,并把每个组称为一个整循环。如
0
~
2
号条带为一个整循环,同样,
3
~
5
号条带也是一个整循环。
可以发现,在所有的整循环内,校验块的布局位置是相同的。每个磁盘上的第一个校验块也就是第
1
个整循环内的校验块,我们要想知道某个磁盘上的第一个校验块在第
1
个整循环内的位置,只要知道该磁盘上的某个校验块在它本身所处的整循环内的位置即可。
例如,图
11.29
中,假设我们并不知道第一个整循环内所有校验的位置,但我们知道
1
号磁盘的
36
号扇区是校验,而且也知道块大小为
8
个扇区,只要我们能够知道
36
号扇区在本整循环内的条带号,也就知道了
1
号磁盘的第一个校验块的块号。
那么,如何知道一个扇区在本整循环内的条带号呢?为了便于理解,我们先来看第一个整循环内的扇区位置。假设我们想知道某个磁盘的
10
号扇区的条带号,我们只要用这个扇区号对每块扇区数做取整运算即可,即:
10 DIV 8
=
1
也就是说
10
号扇区位于
1
号块。同样,如果我们要计算
36
号扇区在本整循环内的条带号,首先要知道它相对于本整循环在本磁盘上起始位置的扇区偏移,然后用这个扇区偏移对每块大小扇区数做取整运算即可。
要计算一个磁盘某扇区相对于本整循环在本磁盘上起始处的扇区偏移,只要用这个扇区号对每个整循环包含的单磁盘的扇区数取余即可,我们知道,图
11.29
中的阵列,每块大小为
8
个扇区,每个整循环包括
3
个条带,因此,每个磁盘在一个整循环中的扇区数为
8
×
3
=
24
个扇区,所以,
36
号扇区相对于本整循环在本磁盘上起始位置的扇区偏移为:
36 MOD
(
8
×
3
)=
12
然后,我们再用这个扇区偏移对每块扇区数做取整运算即可得到它的条带号,即:
12 DIV 8
=
1
因此,
1
号磁盘的
36
号扇区位于本整循环内的
1
号条带,对于
1
号磁盘来讲,则是
1
号块。这也就意味着,
1
号磁盘上的第
1
个校验块位于
1
号块。由此,我们可以得到计算磁盘上第一个校验块块号的公式:
第一个校验块的块号=已知校验位置扇区号MOD(每块扇区数 * 磁盘数)DIV 每块扇区数
只要知道磁盘上的某个位置确定为校验,并且知道每块的大小扇区数,就可以利用这个公式很容易地计算出该磁盘上第一个校验块的位置。
RAID分析需要透彻了解文件系统,更多Winhex模版源码及下载请查看http://www.tysjhf.com/jszl/
本文转自老骥伏枥51CTO博客,原文链接: http://blog.51cto.com/sjhfml/137493
,如需转载请自行联系原作者