数据恢复的基础知识
今天学习了点数据恢复的相关知识,主要都是比较基础的东西。想要学会数据恢复,那么我们先要学好数据的存储原理。
主要介绍的有以下几点知识:
1. 分区原理
2. 文件系统(①FAT格式的分区②NTFS格式的分区)
3. 进制转换的相关知识
4. 扇区的定位与容量转换
1分区原理:
一块硬盘分引导扇区和主分区,扩展分区(包含逻辑分区),引导扇区又分为主引导扇区(MBR,有446byte),和主分区表(64byte) 。主分区表中记录的是有多少个分区,每个记录包含分区起始地址,但是因为主分区表的大小有限,所以只能有四个分区记录,重新分区就是修改分区表中的记录。由于只能划分四个主分区,显然满足不了对分区的要求,这时可以有扩展分区,在扩展分区上可以划分逻辑分区,即在一个主分区上划分成几个分区,该分区的最前部是一张分区表,记录了逻辑分区的起始地址,理论上可以有无数个逻辑分区。
2文件系统(①FAT格式的分区②NTFS格式的分区)
一般人都知道磁盘有FAT16、FAT32以及NTFS三种格式。前两者因为单个文件存储大小的局限性很少用的,现在大都使用NTFS格式的磁盘。
3.进制转换的相关知识
想要学习数据恢复我们要会进制转换的相关知识,比如二进制与10进制的转换、16进制与十进制的转换等等。我们用计算器就可以了,但是我觉得最好还是懂的原理最好。
4.扇区定位与容量转换
硬盘中有数以亿计的扇区,一般用C/H/S和LBA两种方法。
①C/H/S指的是利用柱面/磁头/扇区这三个参数来定位扇区,我们规定的是每个磁盘都是一个圆柱型,理想化磁盘有255个盘体,而且每个盘体都有一个磁头与其对应(为了更好的描述其位置),每个磁道分有63个扇区。柱面编号从0开始,每个柱面有255个磁头,编号从0到254,每磁道有63个扇区,编号从0到62。其实质上硬盘中的磁头很少会超过4个,真正硬盘的每个磁道也不是都有65个扇区。每柱面255磁头每磁道63扇区这种模型只是为了研究问题方便而人为规定出来的。
②LBA定位扇区的方式就简单多了,LBA方法是把硬盘当作一个扇区集合,LBA给硬盘中的每个扇区都赋予一个唯一的编号,只要你说出扇区编号就可以定位出扇区位置。LBA只用了一个参数。
下面举个实际例子来看看具体怎么操作的
我是用的工具是娇小而不简单的工具winhex,我们可以看见下图所示的红色区域内的就是扇区定位的关键字节。他的位置在55AA向前64个字节为止
80 01 01 00 07 FE FF FF
3F 00 00 00 26 B9 DF 01以上16个字节就是我们要看的了,那么来分析下吧!
C/H/S
: 80
01 01 00 07
FE FF FF
(引导标识:表示可引导的)起始 起始 起始 NTFS格式 结束 结束 结束
磁头 扇区 柱面 磁头 扇区 柱面
L/B/A:
3F
00 00 00 26 B9 DF 01
分区之前的扇区数(其实就是此分区从哪开始) 此分区的大小
通过分析、解读以上的字节信息我们就可以看出整个磁盘的分配情况,是可引导(80)的还是非可引导(00)的以及该磁盘的是那种类型的(06代表FAT16;0B.0C都是代表FAT32;07代表NTFS;05和0F都代表扩展分区)
那么看看上面这个图所表示磁盘的具体情况吧!
用C/H/S分析的话80代表他是可引导的,因为我查看的是0磁盘也就是系统所在磁盘当然是可引导的了。010100表示此分区是从0柱面/1磁头/1扇区开始的;07表示他是NTFS格式的磁盘;FEFFFF表示这个分区的结束位置,但要注意的是现在他表示的是不对的如果按着这个数据来算的话那么就错了,因为C/H/S分区表示最高能显示分区大小为8G左右,我的这块硬盘大小是15G的。所以完全超出可C/H/S的能力范围了。只能通过FFFF算出他是254磁头,63扇区的具体是那个柱面就未能为力了。那么怎么办呢?就看L/BL/A的了,呵呵!
注意,分区的起始扇区和结束扇区看起来用了一个完整字节,其实不是。由于C/H/S中扇区编号从1到63,因此用一个字节表示有些浪费,一个字节由八个二进制数组成,扇区编号只用了低六位,高2位给柱面用了。因此,表示柱面其实用了10个二进制数,其中高2位是从扇区参数中借来的。结合本例看看,六,七,八参数分别是 FE FF FF,分析一下,FE表示分区的结束磁头是254,FF拆为二进制是11111111,低六位是111111,用来表示分区的结束扇区,也就是说结束扇区是63。FF拆开后高2位11给了柱面用,也就是说分区的结束柱面不是FB,而是3FF,3FF等于十进制的1023。这下子我们明白了,第一个分区开始在0/1/1,结束在1023/254/63。但是前面已经说过了这个是不准确的,在这里只是说明下换算方法。
看看L/B/A的3F 00 00 00 表示这个分区的起始位置,我们应该进行进制转换了把16进制转换为10进制数。要注意的是应该从左向右来读取此数值。我利用计算器换算一下如下图所示:
16进制数:
十进制数
可以看到他是从63扇区开始的,为什么不是哦扇区呢??因为默认情况下ATA指令集都是写在0柱面0磁头0扇区的,为了安全所以我们舍弃了此扇区。所以说以后的分区都是从0柱面/1磁头/1扇区开始的对应的山区也就是63扇区。
26 B9 DF 01表示的是此扇区的大小,转换的来的数据是31439142字节。如下图所示
那么他到底在哪结束的呢???结束位置=扇区大小+起始位置-1那么很简单可以知道他的结束位置就是31439142+63-1=31439204.通过xinhex转换一下就知道结束的真实柱面了,如下图所示对应的柱面是1956柱面。那么C/H/S的表示也就知道了是1956柱面/254磁头/53扇区。而不是前面算出的1023柱面/254磁头/53扇区.。