RAID5恢复揭秘:计算各个成员盘第一个校验块的位置

简介:
】本内容摘自《数据重现-文件系统原理精解与数据恢复最佳实践》
前面我们提到,利用阵列 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 个条带,因此,每个磁盘在一个整循环中的扇区数为 ×   24 个扇区,所以, 36 号扇区相对于本整循环在本磁盘上起始位置的扇区偏移为:
36  MOD  ×  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 ,如需转载请自行联系原作者
相关文章
|
4月前
|
C++
安装VS Code报错:您选定的驱动器或UNC共享不存在或不能访问。请选择其他位置。
安装VS Code报错:您选定的驱动器或UNC共享不存在或不能访问。请选择其他位置。
|
6月前
|
存储 运维 监控
函数计算产品使用问题之如何将函数计算的临时硬盘大小配置到50GB
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
运维 Serverless Go
函数计算产品使用问题之如何恢复已删除的函数
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
7月前
|
存储 Windows
如何恢复硬盘删除的数据?10个简单实用方法详解
本文介绍了如何恢复硬盘删除的数据,包括删除文件恢复的基本原理和降低恢复可能性的情况,如新数据覆盖、硬盘损坏等。文中列举了10种恢复方法,如使用Ctrl + Z、查看隐藏文件、从回收站还原、利用文件历史、备份还原、网盘下载、数据恢复软件以及专业数据恢复服务等。每种方法都有详细的操作步骤,并附有注意事项。
|
7月前
|
数据库 OceanBase
"磁盘空洞"通常指的是磁盘上有空间未被使用
【2月更文挑战第29天】"磁盘空洞"通常指的是磁盘上有空间未被使用
79 2
|
API 索引
主机磁盘使用率超过85%导致es索引变为只读模式
主机磁盘使用率超过85%导致es索引变为只读模式
406 0
|
存储 编译器 C语言
RAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储
RAM明明断电会丢失数据,为什么初始化的全局变量存储在RAM?详细分析程序的存储
574 0
|
关系型数据库 Oracle
SDE注册版本失败,仅支持一个空间列
如果直接编辑SDE要素类与要素可以不需要版本,使用默认版本,如果要让用户通过界面编辑,即使用开启编辑、保存编辑和停止编辑,就需要注册为版本,而在注册版本弹出如下错误: 正如错误所说,一个要素类或shp应该只有一个空间列,即一个SHAPE字段,不知道怎么搞的,出现了两了,在oracle删除一个就行;arcgis中不能删除,因为打都打不开! 参考:http://support.
1298 0