找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1944|回复: 2

硬盘数据恢复入门教程5

rdflsl 发表于 2006-6-3 00:12:12 | 显示全部楼层 |阅读模式 来自 中国江苏南通

马上注册,结交更多好友,享用更多功能。

您需要 登录 才可以下载或查看,没有帐号?注册

x
入逻辑分区
逻辑分区结构
    现在深入每一个逻辑分区,逻辑分区结构如下:
    FAT12/16
Logical sector =0 Logical sector=1
(Floppy disk=1~9) Logical sector=1+sectors_per_FAT
(Floppydisk=10~18) Logical sector=1+sectors_per_FAT*2
(Floppy disk=19~32) Logical sector=1+sectors_per_FAT*2+sectors_of_rootdirectories
(Floppy disk=33~)
DOS Boot Sector FAT1 FAT2 ROOT Directory Data area(where files and subdirectories are stored)
    FAT32
Usually 32 sectors Logical sector =0032h Logical sector =0032h+ 2*sectors_per_FAT
DOS Boot Recore 3 Sectors Reserved sectors Copy of record Reserve sectors FAT1 FAT2 Data area(where files and all bdirectories are stored)
    在逻辑分区当中用逻辑的cluster和sector。换算关系为:
cluster=logical_sector/sectors_per_cluster;
这里sectors_per_cluster是在BIOS Parameter Block里得到的。
Sector=( logical_sector mod sectors_per_track)+1;
Head=( logical_sector / sectors_per_track)mod total_heads;
Cylinder= logical_sector(sectors_per_track* total_heads);
logical_sector=( cluster-2)*sectors_per_cluster+sector_of_file_area_offset;
logical_sector=(sector-1)+head*sector_per_track+sector*sector_per_track*heads;
每个扇区长度=512字节
总簇数=逻辑盘容量/簇容量
总簇数=FAT表长度(字节)/每个表项长度(字节)-2
FAT表长度=逻辑盘容量/簇容量*每个表项长度
    Dos引导记录块位于逻辑0 sector中包含三部分:
(1) 磁盘IO参数表BPB;
(2) 磁盘基数表;
(3) 引导区代码。
    描述逻辑盘结构的BPB表
    FAT16的BPB(BIOS Parameter Block)表,描述逻辑盘结构组成,包含隐藏扇区数目(从0-1-1开始计算)、FAT扇区数、FAT拷贝数、硬盘磁头总数、根目录表项最大值等。FAT32系统中,BPB表的偏移与FAT16不同,但表项基本相同。整个隐藏扇区部分都作为逻辑盘的描述区域。
    硬盘BPB主要结构说明:
    (Cylinder柱面/磁道-Side/Head磁头-Sector扇区地址以下简称为?-?-?)
    主分区
名称 地址 长度(扇区)
主引导记录(Main Boot Record) 0-0-1 1
系统扇区(System Secotrs) 0-0-2,0-0-63 62
引导扇区(Boot) 0-1-1 1
扩展分区
名称 地址 长度(扇区)
扩展分区(Extend Partition) ?-y-1 1
系统扇区(System Secotrs) ?-y-2,?-y-63 62
引导扇区(Boot) ?-(y+1)-1 1
其后各项与主分区相同……
    隐藏扇区(Hidden Secotrs):
FAT16 0-1-1 1
FAT32 0-1-1 32
    文件分配表(File Allocation Table):
FAT16 0-1-2 根据逻辑盘容量变化
FAT32 0-1-33 根据逻辑盘容量变化
    说明:
    1. FAT16的每个表项由2字节(16位)组成,通常每个表项指向的簇包含64个扇区,即32K字节。 逻辑盘容量最大为2047MB。
    2. FAT32的每个表项由4字节(32位)组成,通常每个表项指向的簇包含8个扇区,即4K字节。逻辑盘容量最小为512MB。
    3. 对于C分区,在MBR的偏移01c2H处,FAT16为06H,FAT32为0CH。
深入逻辑分区之文件分配表(FAT)
FAT是DOS、Windows9X系统的文件寻址格式,位于DBR之后。
    在解释文件分配表的概念的时候,我们有必要谈谈簇(Cluster)的概念。文件占用磁盘空间,基本单位不是字节而是簇。一般情况下,软盘每簇是1个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64……同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储。由于硬盘上保存着段与段之间的连接信息(即FAT),操作系统在读取文件时,总是能够准确地找到各段的位置并正确读出。
    为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号。对一个文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的,表中有很多表项,每项记录一个簇的信息。由于FAT对于文件管理的重要性,所以为了安全起见,FAT有一个备份,即在原FAT的后面再建一个同样的FAT。初形成的FAT中所有项都标明为“未占用”,但如果磁盘有局部损坏,那么格式化程序会检测出损坏的簇,在相应的项中标为“坏簇”,以后存文件时就不会再使用这个簇了。FAT的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,因为其中需要存放簇号。FAT的格式有多种,最为常见的是FAT16和FAT32。
    当一个磁盘Format后,在其逻辑0扇区(即BOOT扇区)后面的几个扇区中存在着一个重要的数据表?文件分配(FAT),文件分配表一式两份,占据扇区的多小凭磁盘类型大小而定。顾名思义,文件分配表是用来表示磁盘问件的空分配信息的。它不对引导区,文件目录的信息进行表示,也不真正存储文件内容。
    我们知道磁盘是由一个一个扇区组成的,若干个扇区合为一个簇,文件存取是以簇为单位的,哪怕这个文件只有1个字节。每个簇在文件分配表中都有对应的表项,簇号即为表项号,每个表项占1.5个字节(磁盘空间在10MB以下)或2个字节(磁盘空间在10MB以上)。为了方便起见,以后所说的表项都是指2个字节的。
    FAT表的开始由介质描述符+一串“已占用”标志组成:
   
FAT16硬盘----F8 FF FF 7F
FAT32硬盘----F8 FF FF 0F FF FF FF 0F
    每个有效的FAT结构区包含两个完全相同的拷贝:FAT1、FAT2
文件分配表结构如1(H表示16进制)
   
第0字节:表头,表磁盘类型。FFH双面软盘,每次道8扇区FEH单面软盘,每磁道8扇区FDH双面软盘,每磁道9扇区FCCH单面软盘,每磁道9扇区FC8H硬盘
第1~2字节:(表项号1)表示第一簇状态,因第一簇被系统占据,故此两字节为FFFFH
第3~4字节:(表项号2)表示第二簇状态,若为FFFH表此簇为坏的,DOS已标记为不能用;0000H表示此簇为空,可以用;FFF8H表不能示该簇为文件的最后一簇;其余数字表示文件的下一个簇号,注意高字节在后,低字节在前。
第5~6字节:(表项号3)表示第三簇状态,同上。
    注意
    不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。.高字节在后,低字节在前是一种存储数字方式,读出时应对其进行调整。是如两字节12H,34H,应调整为3412H。
    文件分配表与文件目录(FDT)相配合,可以统一管理整个磁盘的文件。它告诉系统磁盘上哪些簇是坏的或已被使用,哪些簇可以用,并存储每个文件所使用的簇号。它是文件的“总调度师”。
    当DOS写文件时,首先在文件目录中检查是否有相同文件名,若无则使用一个文件目录表项,然后依次检测FAT中的每个表项对应的簇中,同时将该簇号写入文件目录表项相的26-27字节,如文件长度不止一簇,则继续向后寻找可用簇,找到后将其簇号写入上一次找到的表项中,如此直到文件结束,在最后一簇的表项里填上FFF8H,形成单向链表。
    DOS删除文件时只是把文件目录表中的该文件的表项第0个字节改为E5H,表此项已被删除,并在文件分配表中把该文件占用的各簇的表项清0,并释放空间。其文件的内容仍然在盘上,并没有被真正删除,这就是undelete.exe,unerase.exe等一类恢复删除工具能起作用的原因。
    文件分配表在系统中的地位十分重要,用户最好不要去修改它,以免误操作带来严重的后果。


深入逻辑分区之文件目录表(FDT)
文件目录表(File Directory Table),即根目录区,又称为ROOT区
    紧跟在FAT2的下一个扇区,长度为32个扇区(256个表项)。如果支持长文件名,则每个表项为64个字节,其中,前32个字节为长文件链接说明;后32个字节为文件属性说明,包括文件长度、起始地址、日期、时间等。如不支持长文件名,则每个表项为32个字节的属性说明。
    值得注意的是:
   
FAT32没有储存目录的目录区,而 FAT16储存根目录并把子目录放到数据区。
表示目录的目录项指出根目录地址同时长度字节为0,表示文件的目录项指出数据地址。
  

    注意:DOS7前的怪字符为E5H,表示被删除,被删除文件仍旧能够找到开始簇,数据恢复就依靠这一特点。
    数据区(Data Area): 紧跟在FDT的下一个扇区,直到逻辑盘的结束地址。它存储着所有的数据,而且即使文件目录被破坏仍旧可能从磁盘里把信息读出,这也就是硬盘数据的理论依据。
    到现在为止,硬盘数据结构的理论部分已经讲完。数据恢复主要是手动找出FAT、目录、数据的对应关系或直接找到数据,现在已经有完善的磁盘编辑器帮助我们做到这一点,使工作大大简化了。
    有只能化的恢复工具能不依靠FAT而恢复被删除文件,比如RECOVERNT,估计是依靠Win2000的文件使用记录。这种方法在冲启动之前恢复文件的可能性很大。从理论上讲只要数据不被覆盖总能被恢复的。
实战硬盘数据恢复
上面对硬盘数据恢复的理论知识进行了完整介绍,下面再简单介绍两种常见的硬盘故障的数据恢复办法。
    FAT表引起的读写故障
    硬盘文件分配表庞大无法手工修复,只能依靠工具。FAT表记录着硬盘数据的存储地址,每一个文件都有一组FAT链指定其存放的簇地址。FAT表的损坏意味着文件内容的丢失。庆幸的是DOS系统本身提供了两个FAT表,如果目前使用的FAT表损坏,可用第二个进行覆盖修复。但由于不同规格的磁盘其FAT表的长度及第二个FAT表的地址也是不固定的,所以修复时必须正确查找其正确位置,一些工具软件如NU等本身具有这样的修复功能,使用也非常的方便。采用DEBUG也可实现这种操作,即采用其m命令把第二个FAT表移到第一个表处即可(不建议这样做)。如果第二个FAT表也损坏了,则也无法把硬盘恢复到原来的状态,但文件的数据仍然存放在硬盘的数据区中,可采用CHKDSK或SCANDISK命令进行修复,最终得到*.CHK文件,这便是丢失FAT链的扇区数据。如果是文本文件则可从中提取出完整的或部分的文件内容。
    软盘文件分配FAT表修复
    在运行某个程序时,有时会在屏幕上看到:File allocation table bad,drive A(文件分配表坏)的错误信息,导致程序不能正常运行。
    我们知道,在磁盘中有两个文件分配表:FAT1和FAT2。FAT1用于日常工作,FAT2备用。因此,在FAT1损坏时,可用FAT2表修补。具体方法是:运行DEBUG,将FAT2读入缓冲区,用缓冲区的FAT2数据覆盖磁盘中的FAT1。
    例:修复3寸1.44M软盘,在A驱。在DOS环境下进入debug环境。在“-”提示符下进行如下操作:
-L 100 0 0A 9
-W 100 0 1 9
-q
    其它类型的软盘的修复方法参照下表进行。起止逻辑扇区 5.25"低密 5.25"高密 3.5"低密 3.5"高密
BOOT区 0 0 0 0
FAT1 1-2 1-7 1-3 1-9
FAT2 3-4 8-0EH 4-6 0A-12H
    例如我们要修复5.25"高密软盘的FAT,则需将上述参数改为:
-L 100 0 8 7
-W 100 0 1 7
-q
13230224024 发表于 2006-6-3 09:36:40 | 显示全部楼层 来自 中国河北保定

顶、顶、顶

不错
风起云涌 发表于 2006-6-3 17:53:03 | 显示全部楼层 来自 中国山东淄博
好,顶
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表