📄 数据恢复之fat篇.htm
字号:
关于保留扇区</A></TD>
<TD
style="BORDER-RIGHT: #000000 2px ridge; PADDING-RIGHT: 4px; BORDER-TOP: #000000 2px ridge; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: #000000 2px ridge; PADDING-TOP: 1px; BORDER-BOTTOM: #000000 2px ridge"
width=114 height=43 rowSpan=2> </TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=197 height=22><A
href="http://www.sjhf.net/document/fat/#图7 磁盘的整体结构图示">图7 磁盘的整体结构图示</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=179><A
href="http://www.sjhf.net/document/fat/#表9 FAT16分区大小与对因簇大小">表9
FAT16分区大小与对因簇大小</A></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=197><A
href="http://www.sjhf.net/document/fat/#图8 winhex下的FAT32基本分区DBR截图">图8
winhex下的FAT32基本分区DBR图</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=179><A
href="http://www.sjhf.net/document/fat/#表11 FAT16目录项32个字节的表示定义">表11
FAT16目录项的定义</A></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #000000 2px ridge; PADDING-RIGHT: 4px; BORDER-TOP: #000000 2px ridge; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: #000000 2px ridge; PADDING-TOP: 1px; BORDER-BOTTOM: #000000 2px ridge"
width=80 rowSpan=3>
<P align=left><A
href="http://www.sjhf.net/document/fat/#4.3 FAT表和数据的存储原则">4.3
FAT表和数据的存储原则</A></P></TD>
<TD
style="BORDER-RIGHT: #000000 2px ridge; PADDING-RIGHT: 4px; BORDER-TOP: #000000 2px ridge; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: #000000 2px ridge; PADDING-TOP: 1px; BORDER-BOTTOM: #000000 2px ridge"
width=114><A href="http://www.sjhf.net/document/fat/#4.3.1存储过程假想">4.3.1
存储过程假想</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=197><A
href="http://www.sjhf.net/document/fat/#图9 winhex给出的FAT32基本分区DBR参数说明">图9
winhex给出的图8DBR参数说明</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=179><A
href="http://www.sjhf.net/document/fat/#表12 FAT32分区大小与对因簇大小">表12
FAT32分区大小与对因簇大小</A></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #000000 2px ridge; PADDING-RIGHT: 4px; BORDER-TOP: #000000 2px ridge; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: #000000 2px ridge; PADDING-TOP: 1px; BORDER-BOTTOM: #000000 2px ridge"
width=114><A
href="http://www.sjhf.net/document/fat/#4.3.2 FAT16 存储原理">4.3.2
FAT16存储原理</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=197><A
href="http://www.sjhf.net/document/fat/#图10 winhex所截FAT16的文件分配表">图10
winhex所截FAT16的文件分配表</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=179 height=19><A
href="http://www.sjhf.net/document/fat/#表13 FAT各系统记录项的取值含义">表13
FAT表的取值含义</A></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #000000 2px ridge; PADDING-RIGHT: 4px; BORDER-TOP: #000000 2px ridge; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: #000000 2px ridge; PADDING-TOP: 1px; BORDER-BOTTOM: #000000 2px ridge"
width=114><A
href="http://www.sjhf.net/document/fat/#4.3.3 FAT32存储原理">4.3.3
FAT32存储原理</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=197 height=19><A
href="http://www.sjhf.net/document/fat/#图4.3.11 Fat16的组织形式">图4.3.11
Fat16的组织形式</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=179 height=19><A
href="http://www.sjhf.net/document/fat/#表14 FAT32短文件目录项32个字节的表示定义">表14
FAT32短文件目录项的定义</A></TD></TR>
<TR>
<TD
style="BORDER-RIGHT: #000000 2px ridge; PADDING-RIGHT: 4px; BORDER-TOP: #000000 2px ridge; PADDING-LEFT: 4px; PADDING-BOTTOM: 1px; BORDER-LEFT: #000000 2px ridge; PADDING-TOP: 1px; BORDER-BOTTOM: #000000 2px ridge"
width=280 colSpan=3 height=19><A
href="http://www.sjhf.net/document/fat/#五、结束">五、结束</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=197 height=19><A
href="http://www.sjhf.net/document/fat/#图4.3.12 Fat32的组织形式">图4.3.12
Fat32的组织形式</A></TD>
<TD
style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; BORDER-BOTTOM: 1px solid"
align=left width=179 height=19><A
href="http://www.sjhf.net/document/fat/#表15 FAT32长文件目录项32个字节的表示定义">表15
FAT32长文件目录项的定义</A></TD></TR></TBODY></TABLE>
<P><BR><A name=一、硬盘的物理结构></A>一、硬盘的物理结构:</P>
<P><IMG height=210 src="数据恢复之Fat篇_files/01.gif" width=364 border=0><A
name="图1 硬盘内部机械图。"></A><BR>
硬盘存储数据是根据电、磁转换原理实现的。硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成(图1),其中盘片和磁头密封在无尘的金属壳中。<BR>硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来。当系统向硬盘写入数据时,磁头中“写数据”电流产生磁场使盘片表面磁性物质状态发生改变,并在写电流磁场消失后仍能保持,这样数据就存储下来了;当系统从硬盘中读数据时,磁头经过盘片指定区域,盘片表面磁场使磁头产生感应电流或线圈阻抗产生变化,经相关电路处理后还原成数据。因此只要能将盘片表面处理得更平滑、磁头设计得更精密以及尽量提高盘片旋转速度,就能造出容量更大、读写数据速度更快的硬盘。这是因为盘片表面处理越平、转速越快就能越使磁头离盘片表面越近,提高读、写灵敏度和速度;磁头设计越小越精密就能使磁头在盘片上占用空间越小,使磁头在一张盘片上建立更多的磁道以存储更多的数据。</P>
<P><A name=二、硬盘的逻辑结构></A><FONT color=#c0c0c0><SPAN
style="FONT-WEIGHT: 700; BACKGROUND-COLOR: #ffff00"><A
href="http://www.sjhf.net/document/fat/#索引">[返回索引]</A></SPAN></FONT><BR>二、硬盘的逻辑结构。<BR>
硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头。如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的。)每个盘片的划分规则通常是一样的。这样每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders×Heads×Sector个扇区。这三个参数即是硬盘的物理参数。我们下面的很多实践需要深刻理解这三个参数的意义。</P>
<P><A name="3.1 MBR(master boot record)扇区"></A><A name=三、磁盘引导原理></A><FONT
color=#c0c0c0><SPAN style="FONT-WEIGHT: 700; BACKGROUND-COLOR: #ffff00"><A
href="http://www.sjhf.net/document/fat/#索引">[返回索引]</A></SPAN></FONT><BR>三、磁盘引导原理。</P>
<P>3.1 MBR(master boot record)扇区:<BR>
计算机在按下power键以后,开始执行主板bios程序。进行完一系列检测和配置以后。开始按bios中设定的系统引导顺序引导系统。假定现在是硬盘。Bios执行完自己的程序后如何把执行权交给硬盘呢。交给硬盘后又执行存储在哪里的程序呢。其实,称为mbr的一段代码起着举足轻重的作用。MBR(master
boot
record),即主引导记录,有时也称主引导扇区。位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区),bios在执行自己固有的程序以后就会jump到mbr中的第一条指令。将系统的控制权交由mbr来执行。在总共512byte的主引导记录中,MBR的引导程序占了其中的前446个字节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(Disk
PartitionTable,硬盘分区表),最后的两个字节“55
AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。<BR>
MBR不随操作系统的不同而不同,意即不同的操作系统可能会存在相同的MBR,即使不同,MBR也不会夹带操作系统的性质。具有公共引导的特性。<BR>我们来分析一段mbr。下面是用winhex查看的一块希捷120GB硬盘的mbr。<BR><A
name="图2winhex 磁盘的MBR"></A><IMG height=633 src="数据恢复之Fat篇_files/02.gif"
width=630 border=0><BR><FONT color=#c0c0c0><SPAN
style="FONT-WEIGHT: 700; BACKGROUND-COLOR: #ffff00"><A
href="http://www.sjhf.net/document/fat/#索引">[返回索引]</A></SPAN></FONT></P>
<P> 你的硬盘的MBR引导代码可能并非这样。不过即使不同,所执行的功能大体是一样的。<A
href="http://www.sjhf.net/document/fat/wowocock.htm">这是wowocock关于磁盘mbr的反编译</A>,已加了详细的注释,感兴趣可以细细研究一下。<BR>
我们看DPT部分。操作系统为了便于用户对磁盘的管理。加入了磁盘分区的概念。即将一块磁盘逻辑划分为几块。磁盘分区数目的多少只受限于C~Z的英文字母的数目,在上图DPT共64个字节中如何表示多个分区的属性呢?microsoft通过链接的方法解决了这个问题。在DPT共64个字节中,以16个字节为分区表项单位描述一个分区的属性。也就是说,第一个分区表项描述一个分区的属性,一般为基本分区。第二个分区表项描述除基本分区外的其余空间,一般而言,就是我们所说的扩展分区。这部分的大体说明见表1。</P>
<TABLE id=table2 width="47%" border=1>
<TBODY>
<TR>
<TD align=middle colSpan=4><A name="表1 分区表参数"><FONT
size=2></FONT></A><FONT size=2>表1 图2分区表第一字段</FONT></TD></TR>
<TR>
<TD align=middle width="18%" height=22><FONT size=2>字节位移</FONT></TD>
<TD align=middle width="16%" height=22><FONT size=2>字段长度</FONT></TD>
<TD align=middle width="12%" height=22><FONT size=2>值</FONT></TD>
<TD align=middle width="42%" height=22><FONT size=2>字段名和定义</FONT></TD></TR>
<TR>
<TD align=middle width="18%"><FONT size=2>0x01BE</FONT></TD>
<TD align=middle width="16%"><FONT size=2>BYTE</FONT></TD>
<TD align=middle width="12%"><FONT size=2>0x80</FONT></TD>
<TD align=middle width="42%"><FONT size=2> 引导指示符(Boot
Indicator) 指明该分区是否是活动分区。</FONT></TD></TR>
<TR>
<TD align=middle width="18%"><FONT size=2>0x01BF</FONT></TD>
<TD align=middle width="16%"><FONT size=2>BYTE</FONT></TD>
<TD align=middle width="12%"><FONT size=2>0x01</FONT></TD>
<TD align=middle width="42%"><FONT size=2>开始磁头(Starting Head)</FONT></TD></TR>
<TR>
<TD align=middle width="18%"><FONT size=2>0x01C0</FONT></TD>
<TD align=middle width="16%"><FONT size=2>6位</FONT></TD>
<TD align=middle width="12%"><FONT size=2>0x01</FONT></TD>
<TD align=middle width="42%"><FONT size=2>开始扇区(Starting Sector)
只用了0~5位。后面的两位(第6位和第7位)被开始柱面字段所使用</FONT></TD></TR>
<TR>
<TD align=middle width="18%"><FONT size=2>0x01C1</FONT></TD>
<TD align=middle width="16%"><FONT size=2>10位</FONT></TD>
<TD align=middle width="12%"><FONT size=2>0x00</FONT></TD>
<TD align=middle width="42%"><FONT size=2>开始柱面(Starting
Cylinder)
除了开始扇区字段的最后两位外,还使用了1位来组成该柱面值。开始柱面是一个10位数,最大值为1023</FONT></TD></TR>
<TR>
<TD align=middle width="18%"><FONT size=2>0x01C2</FONT></TD>
<TD align=middle width="16%"><FONT size=2>BYTE</FONT></TD>
<TD align=middle width="12%"><FONT size=2>0x07</FONT></TD>
<TD align=middle width="42%"><FONT size=2>系统ID(System ID)
定义了分区的类型,详细定义,请参阅图4</FONT></TD></TR>
<TR>
<TD align=middle width="18%"><FONT size=2>0x01C3</FONT></TD>
<TD align=middle width="16%"><FONT size=2>BYTE</FONT></TD>
<TD align=middle width="12%"><FONT size=2>0xFE</FONT></TD>
<TD align=middle width="42%"><FONT size=2>结束磁头(Ending Head)</FONT></TD></TR>
<TR>
<TD align=middle width="18%"><FONT size=2>0x01C4</FONT></TD>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -