![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
当前位置:主页 >> 业内新闻 >> 正文 |
重复删除技术受赛门铁克关注 |
硬盘的数据结构
初买来一块硬盘,我们是没有办法使用的,你需要将它分区、格式化,然后再安装上操作系统才可以使用。一个完整硬盘的数据应该包括五部分:MBR,DBR,FAT,DIR区和DATA区。其中只有主引导扇区是唯一的,其它的随你的分区数的增加而增加。 主引导扇区 主引导扇区位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作系统引导扇区)调入内存加以执行。至于分区表,很多人都知道,以80H或00H为开始标志,以55AAH为结束标志,共64字节,位于本扇区的最末端。值得一提的是,MBR是由分区程序(例如DOS 的Fdisk.exe)产生的,不同的操作系统可能这个扇区是不尽相同。如果你有这个意向也可以自己去编写一个,只要它能完成前述的任务即可,这也是为什么能实现多系统启动的原因(说句题外话:正因为这个主引导记录容易编写,所以才出现了很多的引导区病毒)。 操作系统引导扇区 OBR(OS Boot Record)即操作系统引导扇区,通常位于硬盘的0磁道1柱面1扇区(这是对于DOS来说的,对于那些以多重引导方式启动的系统则位于相应的主分区/扩展分区的第一个扇区),是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为BPB(BIOS Parameter Block)的本分区参数记录表。其实每个逻辑分区都有一个OBR,其参数视分区的大小、操作系统的类别而有所不同。引导程序的主要任务是判断本分区根目录前两个文件是否为操作系统的引导文件(例如MSDOS或者起源于MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把第一个文件读入内存,并把控制权交予该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元(Allocation Unit,以前也称之为簇)的大小等重要参数。OBR由高级格式化程序产生(例如DOS 的Format.com)。 文件分配表 FAT(File Allocation Table)即文件分配表,是DOS/Win9x系统的文件寻址系统,为了数据安全起见,FAT一般做两个,第二FAT为第一FAT的备份, FAT区紧接在OBR之后,其大小由本分区的大小及文件分配单元的大小决定。关于FAT的格式历来有很多选择,Microsoft 的DOS及Windows采用我们所熟悉的FAT12、FAT16和FAT32格式,但除此以外并非没有其它格式的FAT,像Windows NT、OS/2、UNIX/Linux、Novell等都有自己的文件管理方式。 目录区 DIR是Directory即根目录区的简写,DIR紧接在第二FAT表之后,只有FAT还不能定位文件在磁盘中的位置,FAT还必须和DIR配合才能准确定位文件的位置。DIR记录着每个文件(目录)的起始单元(这是最重要的)、文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在磁盘的具体位置及大小了。在DIR区之后,才是真正意义上的数据存储区,即DATA区。 数据区 DATA虽然占据了硬盘的绝大部分空间,但没有了前面的各部分,它对于我们来说,也只能是一些枯燥的二进制代码,没有任何意义。在这里有一点要说明的是,我们通常所说的格式化程序(指高级格式化,例如DOS下的Format程序),并没有把DATA区的数据清除,只是重写了FAT表而已,至于分区硬盘,也只是修改了MBR和OBR,绝大部分的DATA区的数据并没有被改变,这也是许多硬盘数据能够得以修复的原因。但即便如此,如MBR/OBR/FAT/DIR之一被破坏的话,也足够咱们那些所谓的DIY老鸟们忙乎半天了……需要提醒大家的是,如果你经常整理磁盘,那么你的数据区的数据可能是连续的,这样即使MBR/FAT/DIR全部坏了,我们也可以使用磁盘编辑软件(比如DOS下的DiskEdit),只要找到一个文件的起始保存位置,那么这个文件就有可能被恢复(当然了,这需要一个前提,那就是你没有覆盖这个文件……)。 硬盘分区方式 我们平时说到的分区概念,不外乎三种:主分区、扩展分区和逻辑分区。主分区是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑C磁盘。在主分区中,不允许再建立其它逻辑磁盘。 扩展分区的概念则比较复杂,也是造成分区和逻辑磁盘混淆的主要原因。由于硬盘仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故主引导扇区中总计可以存储4个分区的数据。操作系统只允许存储4个分区的数据,如果说逻辑磁盘就是分区,则系统最多只允许4个逻辑磁盘。对于具体的应用,4个逻辑磁盘往往不能满足实际需求。为了建立更多的逻辑磁盘供操作系统使用,系统引入了扩展分区的概念。 所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(实际上也就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。无论系统中建立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘。 需要特别注意的是,由于主分区之后的各个分区是通过一种单向链表的结构来实现链接的,因此,若单向链表发生问题,将导致逻辑磁盘的丢失。 数据存储原理 既然要进行数据的恢复,当然数据的存储原理我们不能不提,在这之中,我们还要介绍一下数据的删除和硬盘的格式化相关问题…… 文件的读取 操作系统从目录区中读取文件信息(包括文件名、后缀名、文件大小、修改日期和文件在数据区保存的第一个簇的簇号),我们这里假设第一个簇号是0023。 操作系统从0023簇读取相应的数据,然后再找到FAT的0023单元,如果内容是文件结束标志(FF),则表示文件结束,否则内容保存数据的下一个簇的簇号,这样重复下去直到遇到文件结束标志。 文件的写入 当我们要保存文件时,操作系统首先在DIR区中找到空区写入文件名、大小和创建时间等相应信息,然后在Data区找到闲置空间将文件保存,并将Data区的第一个簇写入DIR区,其余的动作和上边的读取动作差不多。 文件的删除 Win9x的文件删除工作却是很简单的,简单到只在目录区做了一点小改动?D?D将目录区的文件的第一个字符改成了E5就表示将改文件删除了。 附录:
主分区表数据及分析 在英文字典中,对主引导区的定义如下: Master Boot Record:The Master Boot Record is located at the physical beginning of a hard disk, editable using the Disk Editor. It consists of a master bootstrap loader code (446 bytes) and four subsequent, identically structured partition records. Finally, the hexadecimal signature 55AA completes a valid Master Boot Record. 硬盘的主引导记录在硬盘的0磁头0柱面1扇区。主引导记录由三部分组成:
![]()
说明:
![]()
重要公式:02H为X,03H为Y。柱面=(X>>6)*16^2+Y; 以我的硬盘为例:有九个可用分区,二个不可用分区;两个Primary NTFS分区,第二个为active;七个Extened 分区,第五个为NTFS其他为FAT32. 主分区表数据:位置cylinder0, head 0,sector1 ![]()
主分区表分析: Master bootstrap loader code 0000H -00D9H 33 C0 8E D0 BC 00 7C FB 50 。。。主引导记录代码,表示住分区表
multi(0)disk(0)rdisk(0)partition(0)
multi(0)disk(0)rdisk(0)partition(1)
Extended partition
分区说明项数据均为00H没有定义。
扩展分区数据及分析 扩展分区一分区表数据:位置cylinder435D, head 0,sector1 ![]()
扩展分区表分析
multi(0)disk(0)rdisk(0)partition(3)
系统标志字节为05H,说明是扩展DOS分区。于是知下一个分区表位于:起始磁头为0头,起始柱面为777D,起始扇区为1扇区。 Partition Table Entry #3 数据均为00H没有定义。 其他扩展分区同理。
深入逻辑分区 逻辑分区结构 现在深入每一个逻辑分区,逻辑分区结构如下: FAT12/16 FAT32 在逻辑分区当中用逻辑的cluster和sector。换算关系为: Dos引导记录块位于逻辑0 sector中包含三部分: 描述逻辑盘结构的BPB表 FAT16的BPB(BIOS Parameter Block)表,描述逻辑盘结构组成,包含隐藏扇区数目(从0-1-1开始计算)、FAT扇区数、FAT拷贝数、硬盘磁头总数、根目录表项最大值等。FAT32系统中,BPB表的偏移与FAT16不同,但表项基本相同。整个隐藏扇区部分都作为逻辑盘的描述区域。 硬盘BPB主要结构说明: (Cylinder柱面/磁道-Side/Head磁头-Sector扇区地址以下简称为?-?-?)
名称 地址 长度(扇区) 扩展分区 名称 地址 长度(扇区) 隐藏扇区(Hidden Secotrs): 文件分配表(File Allocation Table): 说明: 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扇区)后面的几个扇区中存在着一个重要的数据表?D文件分配(FAT),文件分配表一式两份,占据扇区的多小凭磁盘类型大小而定。顾名思义,文件分配表是用来表示磁盘问件的空分配信息的。它不对引导区,文件目录的信息进行表示,也不真正存储文件内容。 我们知道磁盘是由一个一个扇区组成的,若干个扇区合为一个簇,文件存取是以簇为单位的,哪怕这个文件只有1个字节。每个簇在文件分配表中都有对应的表项,簇号即为表项号,每个表项占1.5个字节(磁盘空间在10MB以下)或2个字节(磁盘空间在10MB以上)。为了方便起见,以后所说的表项都是指2个字节的。 FAT表的开始由介质描述符+一串“已占用”标志组成:
每个有效的FAT结构区包含两个完全相同的拷贝:FAT1、FAT2
注意 不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。.高字节在后,低字节在前是一种存储数字方式,读出时应对其进行调整。是如两字节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个字节的属性说明。 值得注意的是:
![]()
注意: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环境。在“-”提示符下进行如下操作: 其它类型的软盘的修复方法参照下表进行。起止逻辑扇区 5.25"低密 5.25"高密 3.5"低密 3.5"高密 例如我们要修复5.25"高密软盘的FAT,则需将上述参数改为: |
||
【打印本文】 【发表评论】【关闭窗口】 |
地址:沈阳市和平区三好街84号 东科大厦130、131室 | 关于我们 | 数据恢复 | 服务范围 | 无尘室 | 成功案例 | 技术文章 | 联系方式 |