FAT32文件系统研究(整理).doc_第1页
FAT32文件系统研究(整理).doc_第2页
FAT32文件系统研究(整理).doc_第3页
FAT32文件系统研究(整理).doc_第4页
FAT32文件系统研究(整理).doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FAT32文件系统研究一、从分区表开始硬盘为什么要分区,个人看法是资料管理更方便。分区的概念是死老外提出来的,但是死老外真的就是死老外,你看他们出的机器,他愣就不给你分,一个硬盘有多大他就给你搞多大个区,搞的你所有资料都放一个盘,一旦系统崩溃,那个烦啊。(其实这也叫分了区,只不过只有一个而已。)Dell更过分,你想分成你希望的分区还得加服务费100大元整,我倒,1分钟搞定的事,收100!RMB真的贬值了!废话不多说,下面说正题。先上图:图一这是分区表的最后80字节,分区表从地址:1BEH处开始,每16字节为一个分区项,最后的1FE开始的55 AA两个是结束的意思。这在其他如DBR等里面也是一样的意思。下面来解释下分区项的含义。偏移长度值含义1BE1字节0磁盘激活标记,80激活,00未激活1BF1字节1分区起始磁头1C06Byte1分区起始扇区,低0-5位为扇区数,高6-7位用作柱面的高二位1C110Byte1分区起始柱面,前一字节的后二位一起用来表示柱面数1C21字节0B分区格式,分区的类型,如0B表示FAT321C31字节FE分区结束磁头1C46Byte3F分区结束扇区,含义同起始扇区1C510Byte7F分区结束柱面,含义同起始柱面1C64字节3F分区起始逻辑扇区1CA4字节1F6041分区总扇区事实上,起始磁头柱面扇区以及结束磁头柱面扇区从Win98(貌似是,不记得了)开始就没有实际含义,因为CHS寻址方式因最大只能寻址到8.4G,(原因?自己可以计算下看看)从这版的系统开始,使用的是LBA寻址方式,也即线性寻址方式。以前采用28位的LBA,因此又有128G的限制,或者说137G限制。为什么128G或者137G呢?那你看看120G的硬盘格式化出来是多大就知道了。现在的硬盘都很大,为了全部使用,因此出现了48位LBA。好了,不扯远了,继续我们的话题。从图一可以看出,如果硬盘分区全部是主分区的话,只能有4个,而如果采用主分区+扩展分区的方式,则可以有3个主分区+无限逻辑分区的可能。因为扩展分区也采用了类似分区表的方式表示方法,采用一个链表来指向下一个逻辑分区。虽然不再采用CHS而采用了LBA方式,但还是遵循不能跨越柱面的原则,即保留扇区加本分区总扇区数是柱面容量的整数倍。柱面容量是25563。在Winhex中,也可以看到分区项的含义:图二以下是常见的分区类型:00 5CPriamEdisk01FAT1261SpeedStor02XENIXroot63GNUHURDorSys03XENIXusr64NovellNetware06FAT1604表示分区小于32M65NovellNetware07HPFS/NTFS70DiskSecureMult08AIX75PC/IX09AIXbootable80OldMinix0AOS/2BootManage81Minix/OldLinux0BWin95FAT3282Linuxswap0CWin95FAT3283Linux0EWin95FAT16840s/2hiddenC:0FWin95Extended(大于8GB)85Linuxextended10OPUS86NTFSvolumeset11HiddenFAT1287NTFSvolumeset12Compaqdiagmost93Amoeba16HiddenFAT1694AmoebaBBT14HiddenFAT1632MBA0IBMThinkpadhidden17HiddenHPFS/NTFSA5BSD/38618ASTWindowsswapA6OpenBSD1BHiddenFAT32A7NextSTEP1CHiddenFAT32partition(usingLBA-modeINT13extensions)B7BSDIfsB8BSDIswap1EHiddenLBAVFATpartitionBESolarisbootpartition24NECDOSC0DR-DOS/NovellDOSsecuredpartition3CPartitioMagicC1DRDOS/sec40Venix80286C4DRDOS/sec41PPCPerpBootC6DRDOS/sec42NTFS动态分区C7Syrinx4DQNX4.xDBCP/M/CTOS4EQNX4.x2ndpartE1DOSaccess4FQNX4.x3rdpartE3DOSr/050OnTrackDME4Speedstor51OnTrackDM6AuxEBBeoSfs52CP/MF1SpeedStor53OnTrackDM6AuxF2DOS3.3+secondarypartition54OnTrackDM6F4SpeedStor55EZ-DriveFELANstep56GoldenBowFFBBT好了,今天来个不那么空洞的。下面以一个误Ghost的硬盘为例子来说一下分区表的恢复。以前我曾有个帖子:/8813207.html,今天我们从原理上来说一下。看下图,这是一个被误ghost的硬盘,现在仅显示一个分区,误操作前,硬盘有3个区,除C以外都是FAT32。?图一其实这个用那个分区医生,(貌似还有个易我分区医生,不过明眼人一看就知道是怎么回事,呵呵),可以很快找出来,不过既然是研究嘛,咱就纯手工做一回,这样能加深对分区表的认识。另外分区医生做了以后就没有C盘了,得重装系统。(其实也可以手工改)。好了,我们把这个硬盘挂到另外一台电脑上去,打开winhex,点开菜单,搜索查找十六进制数值,这里有两种搜索方式,一种是搜索55AA,勾选条件:偏移计算8225280=510,为什么?虽然现在是LBA寻址,但是,有一个条件仍然是存在的,就是不能跨越柱面。所以,每柱面255磁头,每磁头63扇,每扇区512字节来计算,255*63*512=8225280,由于55AA出现在柱面的倒数2字节,因此余数为510。同时勾选列出搜索结果,这样搜索的结果就记录在位置管理器。第二种方法是搜索EBFE90或EB5890,这是FAT32的DBR的前三个字节。其中EBFE90是DM分区的标志,EB5890是微软的工具分区的标志。这里我们搜索DBR标志,先搜索EB5890,10分钟完毕,额,没有。那换成EBFE90,几分钟后,提示找到4个。如下图:?图二图三?图四为什么是4个呢?计算下,(2542A0A00-25429FE00)/200=6,(5D2684A00-5D2683E00)/200=6,这就是原因了,?FAT32的备份位于DBR之后的第6扇区,所以第2、4个是第1、3个的备份。找到第一个位置,再往前翻63扇区,可以看到以下内容:图五是不是很像分区表,再往前一个扇区,可以看到以下内容:图六?这个是一个NTFS的DBR的备份,为了验证这是我们要找的东西,可以搜索55AA标志,可以看到,这样搜索的结果也是正好在这个位置,绝对扇区位置:19535040。好的,返回到第1,3个DBR的位置,记录下偏移20的数值,FAT32偏移20处的含义就是该区的扇区总数,也即该分区的大小,这里分别是:E11EBF01,06A21602,因为这个记录是高位在前地位在后,反过来就是:1BF1EE1,216A206,转化成10进制就是,29302497,35037702,好了,有这两个数字,我们就来修改分区表了。打开winhex的下拉三角形,选分区一,分区表模板。如下图:?图七先将这两个数值填到PartitionTableEntry#2,PartitionTableEntry#3的Sectorsinpartition。然后我们再来计算第一个分区的大小25429FE00/200-3F=12A14C0,再减去分区表的63扇区,12A14C0-3F=12A1481,十进制就是19534977,这个数填入第一个分区表项的,Sectorinpartition,然后转到偏移的7E00,或者直接定位DBR模板,将TotalSectors改成这个数值。然后再来修改第二项的Sectorsprecedingpartition2,也就是分区之前的扇区数,只个数值=第一分区表+第一分区总扇区数+第二分区表项。那么就=63+19534977+63=19535103。类似计算处第三分区表项的此数值:19535103+29302497+63=48867663。再修改,PartitionTypeIndeicator,FAT32是0B,分别填入,然后保存。其余数值呢?没有实际含义,不理他了。可能你会问:如果原来是扩展分区呢?无所谓了,只要你定位了分区表就行了,反正一个表里面可以有4个分区项,这也是为什么主分区不能超过四个的原因,因为这里只能有4个,超过了就得靠扩展分区来定位了。好了,保存以后我们重启电脑看看。图八再看看文件?图九都能访问,呵呵。挂到原来的电脑上看看能启动吗?呵呵,居然能啊!成功。OK,今天就到这里了,有空再继续研究FAT32的DBR。三、DBR结构闲话少说,先上图:图一先来说说他的含义:偏移字节含义备注00H3引导代码微软分区工具是EB5890,DM是EBFE9003H8厂商标志及DOS版本号0BH2每扇区字节数一般为512(200H)0DH1每簇扇区数(10的整数倍)此处为16(10H)0EH2DBR大小FAT32一般是3210H1FAT的个数一般是211H2根目录数早期的FAT16是256,FAT32开始没有含义13H2扇区总数FAT16(小于32MB的区)15H1介质描述F8表示硬盘16H2每个FAT的扇区数FAT16的18H2每磁道扇区数一定是631AH2逻辑磁头数一定是2551CH2分区的隐藏扇区数对于主分区来说,此处为该分区之前的扇区,扩展分区则是MBR到DBR的扇区数20H4扇区总数大于32MB的FAT32分区此处为29302497(1BF1EE1)24H4FAT表占的扇区数FAT32的,此处为14294(37D6)28H2标记2AH版本2CH4引导目录第一簇,即根目录的起始簇此处为230H2BOOT本身占用的扇区32H2备份DBR的位置34H7保留,全为040H1BIOS设备,从80开始,85,86表示光驱41H1未使用42H1扩展引导标记43H4序列号47H11卷标52H8文件系统好,说说这里的一个公式:根目录相对分区位置(对于操作系统而言)=DBR大小(0EH的值)+2*FAT扇区数(24H的值)。根目录相对分区位置(对于分区而言)=虚拟MBR+DBR大小(0EH的值)+2*FAT扇区数(24H的值)。相对总磁盘位置=分区前的隐藏扇区+DBR大小+2*FAT扇区数。那么这里就有:32+14294*2=28620,这里得到相对分区位置,相对总磁盘位置=19535103+28620=19563723。好,我们来找找看:图二这正是我们要找的。四、VmWare搭建实验平台由于手里没有足够的硬盘(装满的高清美女MV,舍不得啊。而且大硬盘很少在用FAT32格式了。),从这一节开始要研究到详细的文件存储结构了,所以得有具体的硬盘来做。所以干脆搞个虚拟机来玩玩。平时用的最多的就是VmWare,所以也只说这个,其他的没用过不知道。版本选择:VmWareWorkStation7.1.3中文精简版。下载地址:thunder:/QUFodHRwOi8vd3d3LmJraWxsLm5ldC9kL2Rvd25sb2FkLnBocD9uPTEmc2VydmVyPTEmaWQ9NDg1NTo6MTI4MzM1NDk1NFpa这个版本可以运行于XP到win7的任何版本的系统上,而且瘦小功能齐全,足够用。安装过程不说了,这里就说我们平台的选择。我们的实验平台选择Windows2003EnterpriseEdition。硬盘先设置一个,完了添加2个。硬盘接口类型选择IDE。容量大小和网络啥都无所谓,反正都是做实验。其余的系统安装什么的这里不再赘述。就说说添加的硬盘,一个使用系统自带的分区工具来分区,另一个使用DM分区,格式都是FAT32,(DM默认就是FAT32)。WinHex使用15.9汉化版,下载地址:/html/427.html。好了,现在对WinHex设置一下。打开选项,常规设置,弹出以下对话框:图一这里有3个地方需要设置:一是保存临时文件的目录,二是保存镜像和备份文件的目录,这两个地方指定一个自定义的目录,不要使用默认的临时目录,否则保存数据的时候可能出现错误。三是将字节以文本方式逐个显示的勾去掉,这样能够正常显示中文。图二点击磁盘编辑,打开目标磁盘,确定后,会出现类似下图的界面:图三这里可以依次来点击分区可以看到DBR的信息,也可以点击偏移地址那里的三角形来进入分区表模版,引导扇区模板来更方便详细的来了解分区表或者DBR的每个字节含义。这里不再多说,下次进入DBR损坏的手工实战。绝对详细,超过很多书籍和BBS的描述哦!有兴趣的就顶,没兴趣就等我有兴趣了在写吧。五、DBR破坏的恢复图一这是典型的DBR破坏的现象,比较常见的可能是偏移不对,DBR坏等。偏移不对也就是分区表定位不对,这个可以参考以前的MBR部分来重新查找分区表来确定。DBR坏也有二种可能,一种是主DBR坏,备份DBR是好的;另一种是都坏了(这种可能不大,但也有)。主DBR坏参看我以前的一个帖子:/8707884.html这里我们来讨论比较极端的:备份DBR也坏掉的情况。先看这个分区大小FAT16簇大小FAT32簇大小16MB-32MB2KB不支持32MB-127MB2KB512bytes128MB-255MB4KB512bytes256MB-259MB8KB512bytes260MB-511MB8KB4KB512MB-1023MB16KB4KB1024MB-2047MB32KB4KB2048MB-8GB不支持4KB8GB-16GB不支持8KB16GB-32GB不支持16KB32GB以上不支持32KB这个表指出在DBR中的簇的大小(0DH处)的参考值,当然实际上你在格式化磁盘的时候可以指定这个大小。这是我们恢复DBR的一个参考。恢复思路:先确定这个DBR位置是正确的,这个通过分区表标志可以判断,然后依次判断:DRB簇大小,FAT表大小。由于手里没有这种硬盘,这里我们手工对一个分区的BDR清零,然后我们来倒推,呵呵。注意:这个举动比较危险,请先做好DBR的备份,或者在虚拟机中来完成,不然万一没有推回去,数据丢了,别怪我哈。图二这样下来这个区块全部是0了,然后再把备份块也清0了,现在重新启动电脑或者是禁用这块硬盘,再来看,是不是已经提示没有格式化了?好了,我们开始来倒推这一块区域。用winhex来打开硬盘,点到这个分区,此时Winhex已经不能识别该分区格式,点击下拉三角形,引导区(模板)这一项也没有出现在菜单中了,看来只能一步一步的来做了。先确定是否是DBR,先往前63扇,看看有没有分区标志,如果有既可以确定这里就是DBR,没有,那么再来搜索分区标志,然后确定DBR位置。这里我们假定都已经确定了。先把DBR的标志填进去:从偏移00H处开始依次填入:EB5890或者EBEF90随便了,接着填写版本号:MSWIN4.1。到偏移FEH处把结束标志55AA填入。然后来看分区表中本分区的大小:图三好的,分区大小是:29302497,转成16进制就是:1BF1EE1,反过来就是E11EBF01然后填到偏移20H处。接着确定每扇区字节数(偏移0B0CH的值),这个通常是512,16进制200H,写入0B0C就是0002。然后每簇扇区数(0DH),参考上表,是8KB,每扇区512字节,那么就是16扇区,好的,0D的值就是10H。接着计算DBR大小(0EH),我们搜索FAT表的标志F8FFFF0FFFFFFFFFF,偏移计算勾选并填入512=0,ok几分钟后找到。我们看看他的位置,如图四,图五:图四图五winhex显示扇区位置是:19535135,记下这个数值,回到DBR位置,这里的扇区位置是:19535103,那么DBR大小就是32扇,这里在0EH位置处填入:20H。最后来确定一个难点:FAT表的大小。这里说一个FAT表的理论公式:FAT大小=分区总扇区每簇扇区数128或FAT大小=(分区总字节数每扇区字节数)每簇扇区数128解释:FAT32表由4字节构成(4*8=32,因此叫FAT32),因此每扇区能够容纳的簇号就是512/4=128,分区总扇区/每簇扇区数得到分区的总簇数,也是簇的总编号数,FAT表记录的是分区的簇号,因此簇总数/128得到的就是FAT表的大小。事实上这里的分区大小指的是从FDT(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论