扇区format命令

format命令  时间:2021-04-18  阅读:()
FAT文件系统原理——http://www.
sjhf.
net表1分区表参数文本结构索引:图片表格索引:表2扩展分区表项的内容一、硬盘的物理结构图1硬盘的物理结构表3FAT32分区DBR的位置划分二、硬盘的逻辑结构图2winhex下的磁盘MBR表4FAT32分区的BPB字段3.
1MBR扇区图3winhex给出的MBR参数的意义表5FAT32分区的扩展BPB字段三、磁盘引导原理3.
2扩展分区图4分区表类型标志表6FAT16分区上的DBR组成4.
1.
1FAT32DBR扇区图5一个4分区的磁盘结构图示表7FAT16分区的BPB字段4.
1关于DBR4.
1.
2FAT16DBR扇区图6分区表链接图示表8FAT16分区的扩展BPB字段图7磁盘的整体结构图示表9FAT16分区大小与对因簇大小4.
2关于保留扇区图8winhex下的FAT32基本分区DBR图表11FAT16目录项的定义4.
3.
1存储过程假想图9winhex给出的图8DBR参数说明表12FAT32分区大小与对因簇大小4.
3.
2FAT16存储原理图10winhex所截FAT16的文件分配表表13FAT表的取值含义四、FAT分区原理4.
3FAT表和数据的存储原则4.
3.
3FAT32存储原理图4.
3.
11Fat16的组织形式表14FAT32短文件目录项的定义五、结束图4.
3.
12Fat32的组织形式表15FAT32长文件目录项的定义一、硬盘的物理结构:硬盘存储数据是根据电、磁转换原理实现的.
硬盘由一个或几个表面镀有磁性物质的金属或玻璃等物质盘片以及盘片两面所安装的磁头和相应的控制电路组成(图1),其中盘片和磁头密封在无尘的金属壳中.
硬盘工作时,盘片以设计转速高速旋转,设置在盘片表面的磁头则在电路控制下径向移动到指定位置然后将数据存储或读取出来.
当系统向硬盘写入数据时,磁头中"写数据"电流产生磁场使盘片表面磁性物质状态发生改变,并在写电流磁场消失后仍能保持,这样数据就存储下来了;当系统从硬盘中读数据时,磁头经过盘片指定区域,盘片表面磁场使磁头产生感应电流或线圈阻抗产生变化,经相关电路处理后还原成数据.
因此只要能将盘片表面处理得更平滑、磁头设计得更精密以及尽量提高盘片旋转速度,就能造出容量更大、读写数据速度更快的硬盘.
这是因为盘片表面处理越平、转速越快就能越使磁头离盘片表面越近,提高读、写灵敏度和速度;磁头设计越小越精密就能使磁头在盘片上占用空间越小,使磁头在一张盘片上建立更多的磁道以存储更多的数据.
[返回索引]二、硬盘的逻辑结构.
硬盘由很多盘片(platter)组成,每个盘片的每个面都有一个读写磁头.
如果有N个盘片.
就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号.
每个盘片被划分成若干个同心圆磁道(逻辑上的,是不可见的.
)每个盘片的划分规则通常是一样的.
这样每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……形成Cylinders*Heads*Sector个扇区.
这三个参数即是硬盘的物理参数.
我们下面的很多实践需要深刻理解这三个参数的意义.
[返回索引]三、磁盘引导原理.
3.
1MBR(masterbootrecord)扇区:计算机在按下power键以后,开始执行主板bios程序.
进行完一系列检测和配置以后.
开始按bios中设定的系统引导顺序引导系统.
假定现在是硬盘.
Bios执行完自己的程序后如何把执行权交给硬盘呢.
交给硬盘后又执行存储在哪里的程序呢.
其实,称为mbr的一段代码起着举足轻重的作用.
MBR(masterbootrecord),即主引导记录,有时也称主引导扇区.
位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区),bios在执行自己固有的程序以后就会jump到mbr中的第一条指令.
将系统的控制权交由mbr来执行.
在总共512byte的主引导记录中,MBR的引导程序占了其中的前446个字节(偏移0H~偏移1BDH),随后的64个字节(偏移1BEH~偏移1FDH)为DPT(DiskPartitionTable,硬盘分区表),最后的两个字节"55AA"(偏移1FEH~偏移1FFH)是分区有效结束标志.
MBR不随操作系统的不同而不同,意即不同的操作系统可能会存在相同的MBR,即使不同,MBR也不会夹带操作系统的性质.
具有公共引导的特性.
我们来分析一段mbr.
下面是用winhex查看的一块希捷120GB硬盘的mbr.
[返回索引]你的硬盘的MBR引导代码可能并非这样.
不过即使不同,所执行的功能大体是一样的.
我们看DPT部分.
操作系统为了便于用户对磁盘的管理.
加入了磁盘分区的概念.
即将一块磁盘逻辑划分为几块.
磁盘分区数目的多少只受限于C~Z的英文字母的数目,在上图DPT共64个字节中如何表示多个分区的属性呢microsoft通过链接的方法解决了这个问题.
在DPT共64个字节中,以16个字节为分区表项单位描述一个分区的属性.
也就是说,第一个分区表项描述一个分区的属性,一般为基本分区.
第二个分区表项描述除基本分区外的其余空间,一般而言,就是我们所说的扩展分区.
这部分的大体说明见表1.
表1图2分区表第一字段字节位移字段长度值字段名和定义0x01BEBYTE0x80引导指示符(BootIndicator)指明该分区是否是活动分区.
0x01BFBYTE0x01开始磁头(StartingHead)0x01C06位0x01开始扇区(StartingSector)只用了0~5位.
后面的两位(第6位和第7位)被开始柱面字段所使用0x01C110位0x00开始柱面(StartingCylinder)除了开始扇区字段的最后两位外,还使用了1位来组成该柱面值.
开始柱面是一个10位数,最大值为10230x01C2BYTE0x07系统ID(SystemID)定义了分区的类型,详细定义,请参阅图40x01C3BYTE0xFE结束磁头(EndingHead)0x01C46位0xFF结束扇区(EndingSector)只使用了0~5位.
最后两位(第6、7位)被结束柱面字段所使用0x01C510位0x7B结束柱面(EndingCylinder)除了结束扇区字段最后的两位外,还使用了1位,以组成该柱面值.
结束柱面是一个10位的数,最大值为10230x01C6DWORD0x0000003F相对扇区数(RelativeSectors)从该磁盘的开始到该分区的开始的位移量,以扇区来计算0x01CADWORD0x00DAA83D总扇区数(TotalSectors)该分区中的扇区总数[返回索引]注:上表中的超过1字节的数据都以实际数据显示,就是按高位到地位的方式显示.
存储时是按低位到高位存储的.
两者表现不同,请仔细看清楚.
以后出现的表,图均同.
也可以在winhex中看到这些参数的意义:[返回索引]说明:每个分区表项占用16个字节,假定偏移地址从0开始.
如图3的分区表项3.
分区表项4同分区表项3.
1、0H偏移为活动分区是否标志,只能选00H和80H.
80H为活动,00H为非活动.
其余值对microsoft而言为非法值.
2、重新说明一下(这个非常重要):大于1个字节的数被以低字节在前的存储格式格式(littleendianformat)或称反字节顺序保存下来.
低字节在前的格式是一种保存数的方法,这样,最低位的字节最先出现在十六进制数符号中.
例如,相对扇区数字段的值0x3F000000的低字节在前表示为0x0000003F.
这个低字节在前的格式数的十进制数为63.
3、系统在分区时,各分区都不允许跨柱面,即均以柱面为单位,这就是通常所说的分区粒度.
有时候我们分区是输入分区的大小为7000M,分出来却是6997M,就是这个原因.
偏移2H和偏移6H的扇区和柱面参数中,扇区占6位(bit),柱面占10位(bit),以偏移6H为例,其低6位用作扇区数的二进制表示.
其高两位做柱面数10位中的高两位,偏移7H组成的8位做柱面数10位中的低8位.
由此可知,实际上用这种方式表示的分区容量是有限的,柱面和磁头从0开始编号,扇区从1开始编号,所以最多只能表示1024个柱面*63个扇区*256个磁头*512byte=8455716864byte.
即通常的8.
4GB(实际上应该是7.
8GB左右)限制.
实际上磁头数通常只用到255个(由汇编语言的寻址寄存器决定),即使把这3个字节按线性寻址,依然力不从心.
在后来的操作系统中,超过8.
4GB的分区其实已经不通过C/H/S的方式寻址了.
而是通过偏移CH~偏移FH共4个字节32位线性扇区地址来表示分区所占用的扇区总数.
可知通过4个字节可以表示2^32个扇区,即2TB=2048GB,目前对于大多数计算机而言,这已经是个天文数字了.
在未超过8.
4GB的分区上,C/H/S的表示方法和线性扇区的表示方法所表示的分区大小是一致的.
也就是说,两种表示方法是协调的.
即使不协调,也以线性寻址为准.
(可能在某些系统中会提示出错).
超过8.
4GB的分区结束C/H/S一般填充为FEHFFHFFH.
即C/H/S所能表示的最大值.
有时候也会用柱面对1024的模来填充.
不过这几个字节是什么其实都无关紧要了.
虽然现在的系统均采用线性寻址的方式来处理分区的大小.
但不可跨柱面的原则依然没变.
本分区的扇区总数加上与前一分区之间的保留扇区数目依然必须是柱面容量的整数倍.
(保留扇区中的第一个扇区就是存放分区表的MBR或虚拟MBR的扇区,分区的扇区总数在线性表示方式上是不计入保留扇区的.
如果是第一个分区,保留扇区是本分区前的所有扇区.
附:分区表类型标志如图4[返回索引]3.
2扩展分区:扩展分区中的每个逻辑驱动器都存在一个类似于MBR的扩展引导记录(ExtendedBootRecord,EBR),也有人称之为虚拟mbr或扩展mbr,意思是一样的.
扩展引导记录包括一个扩展分区表和该扇区的标签.
扩展引导记录将记录只包含扩展分区中每个逻辑驱动器的第一个柱面的第一面的信息.
一个逻辑驱动器中的引导扇区一般位于相对扇区32或63.
但是,如果磁盘上没有扩展分区,那么就不会有扩展引导记录和逻辑驱动器.
第一个逻辑驱动器的扩展分区表中的第一项指向它自身的引导扇区.
第二项指向下一个逻辑驱动器的EBR.
如果不存在进一步的逻辑驱动器,第二项就不会使用,而且被记录成一系列零.
如果有附加的逻辑驱动器,那么第二个逻辑驱动器的扩展分区表的第一项会指向它本身的引导扇区.
第二个逻辑驱动器的扩展分区表的第二项指向下一个逻辑驱动器的EBR.
扩展分区表的第三项和第四项永远都不会被使用.
通过一幅4分区的磁盘结构图可以看到磁盘的大致组织形式.
如图5:[返回索引]关于扩展分区,如图6所示,扩展分区中逻辑驱动器的扩展引导记录是一个连接表.
该图显示了一个扩展分区上的三个逻辑驱动器,说明了前面的逻辑驱动器和最后一个逻辑驱动器之间在扩展分区表中的差异.
[返回索引]除了扩展分区上最后一个逻辑驱动器外,表2中所描述的扩展分区表的格式在每个逻辑驱动器中都是重复的:第一个项标识了逻辑驱动器本身的引导扇区,第二个项标识了下一个逻辑驱动器的EBR.
最后一个逻辑驱动器的扩展分区表只会列出它本身的分区项.
最后一个扩展分区表的第二个项到第四个项被使用.
表2扩展分区表项的内容扩展分区表项分区表项的内容第一个项包括数据的开始地址在内的与扩展分区中当前逻辑驱动器有关的信息第二个项有关扩展分区中的下一个逻辑驱动器的信息,包括包含下一个逻辑驱动器的EBR的扇区的地址.
如果不存在进一步的逻辑驱动器的话,该字段不会被使用第三个项未用第四个项未用[返回索引]扩展分区表项中的相对扇区数字段所显示的是从扩展分区开始到逻辑驱动器中第一个扇区的位移的字节数.
总扇区数字段中的数是指组成该逻辑驱动器的扇区数目.
总扇区数字段的值等于从扩展分区表项所定义的引导扇区到逻辑驱动器末尾的扇区数.
有时候在磁盘的末尾会有剩余空间,剩余空间是什么呢我们前面说到,分区是以1柱面的容量为分区粒度的,那么如果磁盘总空间不是整数个柱面的话,不够一个柱面的剩下的空间就是剩余空间了,这部分空间并不参与分区,所以一般无法利用.
照道理说,磁盘的物理模式决定了磁盘的总容量就应该是整数个柱面的容量,为什么会有不够一个柱面的空间呢.
在我的理解看来,本来现在的磁盘为了更大的利用空间,一般在物理上并不是按照外围的扇区大于里圈的扇区这种管理方式,只是为了与操作系统兼容而抽象出来CHS.
可能其实际空间容量不一定正好为整数个柱面的容量吧.
关于这点,如有高见,请告知http://www.
sjhf.
net或zymail@vip.
sina.
com.
[返回索引]四、FAT分区原理.
先来一幅结构图:[返回索引]现在我们着重研究FAT格式分区内数据是如何存储的.
FAT分区格式是MICROSOFT最早支持的分区格式,依据FAT表中每个簇链的所占位数(有关概念,后面会讲到)分为fat12、fat16、fat32三种格式"变种",但其基本存储方式是相似的.
仔细研究图7中的fat16和fat32分区的组成结构.
下面依次解释DBR、FAT1、FAT2、根目录、数据区、剩余扇区的概念.
提到的地址如无特别提示均为分区内部偏移.
[返回索引]4.
1关于DBR.
DBR区(DOSBOOTRECORD)即操作系统引导记录区的意思,通常占用分区的第0扇区共512个字节(特殊情况也要占用其它保留扇区,我们先说第0扇).
在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOSParameterBlock),扩展BPB,os引导程序,结束标志几部分组成.
以用的最多的FAT32为例说明分区DBR各字节的含义.
见图8.
[返回索引]图8的对应解释见表3表3FAT32分区上DBR中各部分的位置划分字节位移字段长度字段名对应图8颜色0x003个字节跳转指令0x038个字节厂商标志和os版本号0x0B53个字节BPB0x4026个字节扩展BPB0x5A420个字节引导程序代码0x01FE2个字节有效结束标志[返回索引]图9给出了winhex对图8DBR的相关参数解释:[返回索引]根据上边图例,我们来讨论DBR各字节的参数意义.
MBR将CPU执行转移给引导扇区,因此,引导扇区的前三个字节必须是合法的可执行的基于x86的CPU指令.
这通常是一条跳转指令,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分.
跳转指令之后是8字节长的OEMID,它是一个字符串,OEMID标识了格式化该分区的操作系统的名称和版本号.
为了保留与MS-DOS的兼容性,通常Windows2000格式化该盘是在FAT16和FAT32磁盘上的该字段中记录了"MSDOS5.
0",在NTFS磁盘上(关于ntfs,另述),Windows2000记录的是"NTFS".
通常在被Windows95格式化的磁盘上OEMID字段出现"MSWIN4.
0",在被Windows95OSR2和Windows98格式化的磁盘上OEMID字段出现"MSWIN4.
1".
接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的信息.
通常称之为BPB(BIOSParameterBlock),BPB一般开始于相同的位移量,因此,标准的参数都处于一个已知的位置.
磁盘容量和几何结构变量都被封在BPB之中.
由于引导扇区的第一部分是一个x86跳转指令.
因此,将来通过在BPB末端附加新的信息,可以对BPB进行扩展.
只需要对该跳转指令作一个小的调整就可以适应BPB的变化.
图9已经列出了项目的名称和取值,为了系统的研究,针对图8,将FAT32分区格式的BPB含义和扩展BPB含义释义为表格,见表4和表5.
表4FAT32分区的BPB字段字节位移字段长度(字节)图8对应取值名称和定义0x0B20x0200扇区字节数(BytesPerSector)硬件扇区的大小.
本字段合法的十进制值有512、1024、2048和4096.
对大多数磁盘来说,本字段的值为5120x0D10x08每簇扇区数(SectorsPerCluster),一簇中的扇区数.
由于FAT32文件系统只能跟踪有限个簇(最多为4294967296个),因此,通过增加每簇扇区数,可以使FAT32文件系统支持最大分区数.
一个分区缺省的簇大小取决于该分区的大小.
本字段的合法十进制值有1、2、4、8、16、32、64和128.
Windows2000的FAT32实现只能创建最大为32GB的分区.
但是,Windows2000能够访问由其他操作系统(Windows95、OSR2及其以后的版本)所创建的更大的分区0x0e20x0020保留扇区数(ReservedSector)第一个FAT开始之前的扇区数,包括引导扇区.
本字段的十进制值一般为320x1010x02FAT数(NumberofFAT)该分区上FAT的副本数.
本字段的值一般为20x1120x0000根目录项数(RootEntries)只有FAT12/FAT16使用此字段.
对FAT32分区而言,本字段必须设置为00x1320x0000小扇区数(SmallSector)(只有FAT12/FAT16使用此字段)对FAT32分区而言,本字段必须设置为00x1510xF8媒体描述符(MediaDescriptor)提供有关媒体被使用的信息.
值0xF8表示硬盘,0xF0表示高密度的3.
5寸软盘.
媒体描述符要用于MS-DOSFAT16磁盘,在Windows2000中未被使用0x1620x0000每FAT扇区数(SectorsPerFAT)只被FAT12/FAT16所使用,对FAT32分区而言,本字段必须设置为00x1820x003F每道扇区数(SectorsPerTrack)包含使用INT13h的磁盘的"每道扇区数"几何结构值.
该分区被多个磁头的柱面分成了多个磁道0x1A20x00FF磁头数(NumberofHead)本字段包含使用INT13h的磁盘的"磁头数"几何结构值.
例如,在一张1.
44MB3.
5英寸的软盘上,本字段的值为20x1C40x0000003F隐藏扇区数(HiddenSector)该分区上引导扇区之前的扇区数.
在引导序列计算到根目录的数据区的绝对位移的过程中使用了该值.
本字段一般只对那些在中断13h上可见的媒体有意义.
在没有分区的媒体上它必须总是为00x2040x007D043F总扇区数(LargeSector)本字段包含FAT32分区中总的扇区数0x2440x00001F32每FAT扇区数(SectorsPerFAT)(只被FAT32使用)该分区每个FAT所占的扇区数.
计算机利用这个数和FAT数以及隐藏扇区数(本表中所描述的)来决定根目录从哪里开始.
该计算机还可以从目录中的项数决定该分区的用户数据区从哪里开始0x2820x00扩展标志(ExtendedFlag)(只被FAT32使用)该两个字节结构中各位的值为:位0-3:活动FAT数(从0开始计数,而不是1).
只有在不使用镜像时才有效位4-6:保留位7:0值意味着在运行时FAT被映射到所有的FAT1值表示只有一个FAT是活动的位8-15:保留0x2A20x0000文件系统版本(FileystemVersion)只供FAT32使用,高字节是主要的修订号,而低字节是次要的修订号.
本字段支持将来对该FAT32媒体类型进行扩展.
如果本字段非零,以前的Windows版本将不支持这样的分区0x2C40x00000002根目录簇号(RootClusterNumber)(只供FAT32使用)根目录第一簇的簇号.
本字段的值一般为2,但不总是如此0x3020x0001文件系统信息扇区号(FileSystemInformationSectorNumber)(只供FAT32使用)FAT32分区的保留区中的文件系统信息(FileSystemInformation,FSINFO)结构的扇区号.
其值一般为1.
在备份引导扇区(BackupBootSector)中保留了该FSINFO结构的一个副本,但是这个副本不保持更新0x3420x0006备份引导扇区(只供FAT32使用)为一个非零值,这个非零值表示该分区保存引导扇区的副本的保留区中的扇区号.
本字段的值一般为6,建议不要使用其他值0x361212个字节均为0x00保留(只供FAT32使用)供以后扩充使用的保留空间.
本字段的值总为0[返回索引]表5FAT32分区的扩展BPB字段字节位移字段长度图8对应取值字段名称和定义(字节)0x4010x80物理驱动器号(PhysicalDriveNumber)与BIOS物理驱动器号有关.
软盘驱动器被标识为0x00,物理硬盘被标识为0x80,而与物理磁盘驱动器无关.
一般地,在发出一个INT13hBIOS调用之前设置该值,具体指定所访问的设备.
只有当该设备是一个引导设备时,这个值才有意义0x4110x00保留(Reserved)FAT32分区总是将本字段的值设置为00x4210x29扩展引导标签(ExtendedBootSignature)本字段必须要有能被Windows2000所识别的值0x28或0x290x4340x33391CFE分区序号(VolumeSerialNumber)在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘0x4711"NONAME"卷标(VolumeLabel)本字段只能使用一次,它被用来保存卷标号.
现在,卷标被作为一个特殊文件保存在根目录中0x528"FAT32"系统ID(SystemID)FAT32文件系统中一般取为"FAT32"[返回索引]DBR的偏移0x5A开始的数据为操作系统引导代码.
这是由偏移0x00开始的跳转指令所指向的.
在图8所列出的偏移0x00~0x02的跳转指令"EB5890"清楚地指明了OS引导代码的偏移位置.
jump58H加上跳转指令所需的位移量,即开始于0x5A.
此段指令在不同的操作系统上和不同的引导方式上,其内容也是不同的.
大多数的资料上都说win98,构建于fat基本分区上的win2000,winxp所使用的DBR只占用基本分区的第0扇区.
他们提到,对于fat32,一般的32个基本分区保留扇区只有第0扇区是有用的.
实际上,以FAT32构建的操作系统如果是win98,系统会使用基本分区的第0扇区和第2扇区存储os引导代码;以FAT32构建的操作系统如果是win2000或winxp,系统会使用基本分区的第0扇区和第0xC扇区(win2000或winxp,其第0xC的位置由第0扇区的0xAB偏移指出)存储os引导代码.
所以,在fat32分区格式上,如果DBR一扇区的内容正确而缺少第2扇区(win98系统)或第0xC扇区(win2000或winxp系统),系统也是无法启动的.
如果自己手动设置NTLDR双系统,必须知道这一点.
DBR扇区的最后两个字节一般存储值为0x55AA的DBR有效标志,对于其他的取值,系统将不会执行DBR相关指令.
上面提到的其他几个参与os引导的扇区也需以0x55AA为合法结束标志.
[返回索引]FAT16DBR:FAT32中DBR的含义大致如此,对于FAT12和FAT16其基本意义类似,只是相关偏移量和参数意义有小的差异,FAT格式的区别和来因,以后会说到,此处不在多说FAT12与FAT16.
我将FAT16的扇区参数意义列表.
感兴趣的朋友自己研究一下,和FAT32大同小异的.
表6一个FAT16分区上的引导扇区段字节位移字段长度(字节)字段名称0x003跳转指令(JumpInstruction)0x038OEMID0x0B25BPB0x2426扩展BPB0x3E448引导程序代码(BootstrapCode)0x01FE4扇区结束标识符(0x55AA)[返回索引]表7FAT16分区的BPB字段字节位移字段长度(字节)例值名称和定义0x0B20x0200扇区字节数(BytesPerSector)硬件扇区的大小.
本字段合法的十进制值有512、1024、2048和4096.
对大多数磁盘来说,本字段的值为5120x0D10x40每簇扇区数(SectorsPerCluster)一个簇中的扇区数.
由于FAT16文件系统只能跟踪有限个簇(最多为65536个).
因此,通过增加每簇的扇区数可以支持最大分区数.
分区的缺省的簇的大小取决于该分区的大小.
本字段合法的十进制值有1、2、4、8、16、32、64和128.
导致簇大于32KB(每扇区字节数*每簇扇区数)的值会引起磁盘错误和软件错误0x0e20x0001保留扇区数(ReservedSector)第一个FAT开始之前的扇区数,包括引导扇区.
本字段的十进制值一般为10x1010x02FAT数(NumberofFAT)该分区上FAT的副本数.
本字段的值一般为20x1120x0200根目录项数(RootEntries)能够保存在该分区的根目录文件夹中的32个字节长的文件和文件夹名称项的总数.
在一个典型的硬盘上,本字段的值为512.
其中一个项常常被用作卷标号(VolumeLabel),长名称的文件和文件夹每个文件使用多个项.
文件和文件夹项的最大数一般为511,但是如果使用的长文件名,往往都达不到这个数0x1320x0000小扇区数(SmallSector)该分区上的扇区数,表示为16位(format命令格式化,格式化程序都创建一个12位的FAT.
少于16MB的分区,系统通常会将其格式化成12位的FAT,FAT12是FAT的初始实现形式,是针对小型介质的.
FAT12文件分配表要比FAT16和FAT32的文件分配表小,因为它对每个条目使用的空间较少.
这就给数据留下较多的空间.
所有用FAT12格式化的5.
25英寸软盘以及1.
44MB的3.
5英寸软盘都是由FAT12格式化的.
除了FAT表中记录每簇链结的二进制位数与FAT16不同外,其余原理与FAT16均相同,不再单独解释.
.
.
格式化FAT16分区时,格式化程序根据分区的大小确定簇的大小,然后根据保留扇区的数目、根目录的扇区数目、数据区可分的簇数与FAT表本身所占空间来确定FAT表所需的扇区数目,然后将计算后的结果写入DBR的相关位置.
FAT16DBR参数的偏移0x11处记录了根目录所占扇区的数目.
偏移0x16记录了FAT表所占扇区的数据.
偏移0x10记录了FAT表的副本数目.
系统在得到这几项参数以后,就可以确定数据区的开始扇区偏移了.
FAT16文件系统从根目录所占的32个扇区之后的第一个扇区开始以簇为单位进行数据的处理,这之前仍以扇区为单位.
对于根目录之后的第一个簇,系统并不编号为第0簇或第1簇(可能是留作关键字的原因吧),而是编号为第2簇,也就是说数据区顺序上的第1个簇也是编号上的第2簇.
FAT文件系统之所以有12,16,32不同的版本之分,其根本在于FAT表用来记录任意一簇链接的二进制位数.
以FAT16为例,每一簇在FAT表中占据2字节(二进制16位).
所以,FAT16最大可以表示的簇号为0xFFFF(十进制的65535),以32K为簇的大小的话,FAT32可以管理的最大磁盘空间为:32KB*65535=2048MB,这就是为什么FAT16不支持超过2GB分区的原因.
FAT表实际上是一个数据表,以2个字节为单位,我们暂将这个单位称为FAT记录项,通常情况其第1、2个记录项(前4个字节)用作介质描述.
从第三个记录项开始记录除根目录外的其他文件及文件夹的簇链情况.
根据簇的表现情况FAT用相应的取值来描述,见表10表10FAT16记录项的取值含义(16进制)FAT16记录项的取值对应簇的表现情况0000未分配的簇0002~FFEF已分配的簇FFF0~FFF6系统保留FFF7坏簇FFF8~FFFF文件结束簇看一幅在winhex所截FAT16的文件分配表,图10:[返回索引][返回索引]如图,FAT表以"F8FFFFFF"开头,此2字节为介质描述单元,并不参与FAT表簇链关系.
小红字标出的是FAT扇区每2字节对应的簇号.
相对偏移0x4~0x5偏移为第2簇(顺序上第1簇),此处为FF,表示存储在第2簇上的文件(目录)是个小文件,只占用1个簇便结束了.
第3簇中存放的数据是0x0005,这是一个文件或文件夹的首簇.
其内容为第5簇,就是说接下来的簇位于第5簇——〉FAT表指引我们到达FAT表的第5簇指向,上面写的数据是"FFFF",意即此文件已至尾簇.
第4簇中存放的数据是0x0006,这又是一个文件或文件夹的首簇.
其内容为第6簇,就是说接下来的簇位于第6簇——〉FAT表指引我们到达FAT表的第6簇指向,上面写的数据是0x0007,就是说接下来的簇位于第7簇——〉FAT表指引我们到达FAT表的第7簇指向……直到根据FAT链读取到扇区相对偏移0x1A~0x1B,也就是第13簇,上面写的数据是0x000E,也就是指向第14簇——〉14簇的内容为"FFFF",意即此文件已至尾簇.
后面的FAT表数据与上面的道理相同.
不再分析.
FAT表记录了磁盘数据文件的存储链表,对于数据的读取而言是极其重要的,以至于Microsoft为其开发的FAT文件系统中的FAT表创建了一份备份,就是我们看到的FAT2.
FAT2与FAT1的内容通常是即时同步的,也就是说如果通过正常的系统读写对FAT1做了更改,那么FAT2也同样被更新.
如果从这个角度来看,系统的这个功能在数据恢复时是个天灾.
FAT文件系统的目录结构其实是一颗有向的从根到叶的树,这里提到的有向是指对于FAT分区内的任一文件(包括文件夹),均需从根目录寻址来找到.
可以这样认为:目录存储结构的入口就是根目录.
FAT文件系统根据根目录来寻址其他文件(包括文件夹),故而根目录的位置必须在磁盘存取数据之前得以确定.
FAT文件系统就是根据分区的相关DBR参数与DBR中存放的已经计算好的FAT表(2份)的大小来确定的.
格式化以后,跟目录的大小和位置其实都已经确定下来了:位置紧随FAT2之后,大小通常为32个扇区.
根目录之后便是数据区第2簇.
FAT文件系统的一个重要思想是把目录(文件夹)当作一个特殊的文件来处理,FAT32甚至将根目录当作文件处理(旁:NTFS将分区参数、安全权限等好多东西抽象为文件更是这个思想的升华),在FAT16中,虽然根目录地位并不等同于普通的文件或者说是目录,但其组织形式和普通的目录(文件夹)并没有不同.
FAT分区中所有的文件夹(目录)文件,实际上可以看作是一个存放其他文件(文件夹)入口参数的数据表.
所以目录的占用空间的大小并不等同于其下所有数据的大小,但也不等同于0.
通常是占很小的空间的,可以看作目录文件是一个简单的二维表文件.
其具体存储原理是:不管目录文件所占空间为多少簇,一簇为多少字节.
系统都会以32个字节为单位进行目录文件所占簇的分配.
这32个字节以确定的偏移来定义本目录下的一个文件(或文件夹)的属性,实际上是一个简单的二维表.
这32个字节的各字节偏移定义如表11:表11FAT16目录项32个字节的表示定义字节偏移(16进制)字节数定义0x0~0x78文件名0x8~0xA3扩展名00000000(读写)00000001(只读)00000010(隐藏)00000100(系统)00001000(卷标)00010000(子目录)0xB1属性字节00100000(归档)0xC~0x1510系统保留0x16~0x172文件的最近修改时间0x18~0x192文件的最近修改日期0x1A~0x1B2表示文件的首簇号0x1C~0x1F4表示文件的长度[返回索引]对表11中的一些取值进行说明:(1)、对于短文件名,系统将文件名分成两部分进行存储,即主文件名+扩展名.
0x0~0x7字节记录文件的主文件名,0x8~0xA记录文件的扩展名,取文件名中的ASCII码值.
不记录主文件名与扩展名之间的".
"主文件名不足8个字符以空白符(20H)填充,扩展名不足3个字符同样以空白符(20H)填充.
0x0偏移处的取值若为00H,表明目录项为空;若为E5H,表明目录项曾被使用,但对应的文件或文件夹已被删除.
(这也是误删除后恢复的理论依据).
文件名中的第一个字符若为".
"或".
.
"表示这个簇记录的是一个子目录的目录项.
".
"代表当前目录;".
.
"代表上级目录(和我们在dos或windows中的使用意思是一样的,如果磁盘数据被破坏,就可以通过这两个目录项的具体参数推算磁盘的数据区的起始位置,猜测簇的大小等等,故而是比较重要的)(2)、0xB的属性字段:可以看作系统将0xB的一个字节分成8位,用其中的一位代表某种属性的有或无.
这样,一个字节中的8位每位取不同的值就能反映各个属性的不同取值了.
如00000101就表示这是个文件,属性是只读、系统.
(3)、0xC~0x15在原FAT16的定义中是保留未用的.
在高版本的WINDOWS系统中有时也用它来记录修改时间和最近访问时间.
那样其字段的意义和FAT32的定义是相同的,见后边FAT32.
(4)、0x16~0x17中的时间=小时*2048+分钟*32+秒/2.
得出的结果换算成16进制填入即可.
也就是:0x16字节的0~4位是以2秒为单位的量值;0x16字节的5~7位和0x17字节的0~2位是分钟;0x17字节的3~7位是小时.
(5)、0x18~0x19中的日期=(年份-1980)*512+月份*32+日.
得出的结果换算成16进制填入即可.
也就是:0x18字节0~4位是日期数;0x18字节5~7位和0x19字节0位是月份;0x19字节的1~7位为年号,原定义中0~119分别代表1980~2099,目前高版本的Windows允许取0~127,即年号最大可以到2107年.
(6)、0x1A~0x1B存放文件或目录的表示文件的首簇号,系统根据掌握的首簇号在FAT表中找到入口,然后再跟踪簇链直至簇尾,同时用0x1C~0x1F处字节判定有效性.
就可以完全无误的读取文件(目录)了.
(7)、普通子目录的寻址过程也是通过其父目录中的目录项来指定的,与数据文件(指非目录文件)不同的是目录项偏移0xB的第4位置1,而数据文件为0.
对于整个FAT分区而言,簇的分配并不完全总是分配干净的.
如一个数据区为99个扇区的FAT系统,如果簇的大小设定为2扇区,就会有1个扇区无法分配给任何一个簇.
这就是分区的剩余扇区,位于分区的末尾.
有的系统用最后一个剩余扇区备份本分区的DBR,这也是一种好的备份方法.
早的FAT16系统并没有长文件名一说,Windows操作系统已经完全支持在FAT16上的长文件名了.
FAT16的长文件名与FAT32长文件名的定义是相同的,关于长文件名,在FAT32部分再详细作解释.
[返回索引]FAT32存储原理:FAT32是个非常有功劳的文件系统,Microsoft成功地设计并运用了它,直到今天NTFS铺天盖地袭来的时候,FAT32依然占据着MicrosoftWindows文件系统中重要的地位.
FAT32最早是出于FAT16不支持大分区、单位簇容量大以致空间急剧浪费等缺点设计的.
实际应用中,FAT32还是成功的.
FAT32与FAT16的原理基本上是相同的,图4.
3.
13标出了FAT32分区的基本构成.
图4.
3.
13Fat32的组织形式引导扇区其余保留扇区FAT1FAT2(重复的)根文件夹首簇其他文件夹及所有文件剩余扇区1扇区31个扇区实际情况取大小同FAT1第2簇不足一簇保留扇区数据区[返回索引]FAT32在格式化的过程中就根据分区的特点构建好了它的DBR,其中BPB参数是很重要的,可以回过头来看一下表4和表5.
首先FAT32保留扇区的数目默认为32个,而不是FAT16的仅仅一个.
这样的好处是有助于磁盘DBR指令的长度扩展,而且可以为DBR扇区留有备份空间.
上面我们已经提到,构建在FAT32上的win98或win2000、winXP,其操作系统引导代码并非只占一个扇区了.
留有多余的保留扇区就可以很好的拓展OS引导代码.
在BPB中也记录了DBR扇区的备份扇区编号.
备份扇区可以让我们在磁盘遭到意外破坏时恢复DBR.
FAT32的文件分配表的数据结构依然和FAT16相同,所不同的是,FAT32将记录簇链的二进制位数扩展到了32位,故而这种文件系统称为FAT32.
32位二进制位的簇链决定了FAT表最大可以寻址2T个簇.
这样即使簇的大小为1扇区,理论上仍然能够寻址1TB范围内的分区.
但实际中FAT32是不能寻址这样大的空间的,随着分区空间大小的增加,FAT表的记录数会变得臃肿不堪,严重影响系统的性能.
所以在实际中通常不格式化超过32GB的FAT32分区.
WIN2000及之上的OS已经不直接支持对超过32GB的分区格式化成FAT32,但WIN98依然可以格式化大到127GB的FAT32分区,但这样没必要也不推荐.
同时FAT32也有小的限制,FAT32卷必须至少有65527个簇,所以对于小的分区,仍然需要使用FAT16或FAT12.
分区变大时,如果簇很小,文件分配表也随之变大.
仍然会有上面的效率问题存在.
既要有效地读写大文件,又要最大可能的减少空间的浪费.
FAT32同样规定了相应的分区空间对应的簇的大小,见表12:表12FAT32分区大小与对因簇大小分区空间大小每个簇的扇区簇空间大小=8GB且=16GB且=32GB6432k[返回索引]簇的取值意义和FAT16类似,不过是位数长了点罢了,比较见表13:表13FAT各系统记录项的取值含义(16进制)FAT12记录项的取值FAT16记录项的取值FAT32记录项的取值对应簇的表现情况000000000000000未分配的簇002~FFF0002~FFEF00000002~FFFFFFEF已分配的簇FF0~FF6FFF0~FFF6FFFFFFF0~FFFFFFF6系统保留FF7FFF7FFFFFFF7坏簇FF8~FFFFFF8~FFFFFFFFFFF8~FFFFFFFF文件结束簇FAT32的另一项重大改革是根目录的文件化,即将根目录等同于普通的文件.
这样根目录便没有了FAT16中512个目录项的限制,不够用的时候增加簇链,分配空簇即可.
而且,根目录的位置也不再硬性地固定了,可以存储在分区内可寻址的任意簇内,不过通常根目录是最早建立的(格式化就生成了)目录表.
所以,我们看到的情况基本上都是根目录首簇占簇区顺序上的第1个簇.
在图4.
3.
12中也是按这种情况制作的画的.
FAT32对簇的编号依然同FAT16.
顺序上第1个簇仍然编号为第2簇,通常为根目录所用(这和FAT16是不同的,FAT16的根目录并不占簇区空间,32个扇区的根目录以后才是簇区第1个簇)FAT32的文件寻址方法与FAT16相同,但目录项的各字节参数意义却与FAT16有所不同,一方面它启用了FAT16中的目录项保留字段,同时又完全支持长文件名了.
对于短文件格式的目录项.
其参数意义见表14:[返回索引]表14FAT32短文件目录项32个字节的表示定义字节偏移(16进制)字节数定义0x0~0x78文件名0x8~0xA3扩展名00000000(读写)00000001(只读)00000010(隐藏)00000100(系统)00001000(卷标)00010000(子目录)0xB*1属性字节00100000(归档)0xC1系统保留0xD1创建时间的10毫秒位0xE~0xF2文件创建时间0x10~0x112文件创建日期0x12~0x132文件最后访问日期0x14~0x152文件起始簇号的高16位0x16~0x172文件的最近修改时间0x18~0x192文件的最近修改日期0x1A~0x1B2文件起始簇号的低16位0x1C~0x1F4表示文件的长度*此字段在短文件目录项中不可取值0FH,如果设值为0FH,目录段为长文件名目录段[返回索引]说明:(1)、这是FAT32短文件格式目录项的意义.
其中文件名、扩展名、时间、日期的算法和FAT16时相同的.
(2)、由于FAT32可寻址的簇号到了32位二进制数.
所以系统在记录文件(文件夹)开始簇地址的时候也需要32位来记录,FAT32启用目录项偏移0x12~0x13来表示起始簇号的高16位.
(3)、文件长度依然用4个字节表示,这说明FAT32依然只支持小于4GB的文件(目录),超过4GB的文件(目录),系统会截断处理.
FAT32的一个重要的特点是完全支持长文件名.
长文件名依然是记录在目录项中的.
为了低版本的OS或程序能正确读取长文件名文件,系统自动为所有长文件名文件创建了一个对应的短文件名,使对应数据既可以用长文件名寻址,也可以用短文件名寻址.
不支持长文件名的OS或程序会忽略它认为不合法的长文件名字段,而支持长文件名的OS或程序则会以长文件名为显式项来记录和编辑,并隐藏起短文件名.
当创建一个长文件名文件时,系统会自动加上对应的短文件名,其一般有的原则:(1)、取长文件名的前6个字符加上"~1"形成短文件名,扩展名不变.
(2)、如果已存在这个文件名,则符号"~"后的数字递增,直到5.
(3)、如果文件名中"~"后面的数字达到5,则短文件名只使用长文件名的前两个字母.
通过数学操纵长文件名的剩余字母生成短文件名的后四个字母,然后加后缀"~1"直到最后(如果有必要,或是其他数字以避免重复的文件名).
(4)、如果存在老OS或程序无法读取的字符,换以"_"长文件名的实现有赖于目录项偏移为0xB的属性字节,当此字节的属性为:只读、隐藏、系统、卷标,即其值为0FH时,DOS和WIN32会认为其不合法而忽略其存在.
这正是长文件名存在的依据.
将目录项的0xB置为0F,其他就任由系统定义了,Windows9x或Windows2000、XP通常支持不超过255个字符的长文件名.
系统将长文件名以13个字符为单位进行切割,每一组占据一个目录项.
所以可能一个文件需要多个目录项,这时长文件名的各个目录项按倒序排列在目录表中,以防与其他文件名混淆.
长文件名中的字符采用unicode形式编码(一个巨大的进步哦),每个字符占据2字节的空间.
其目录项定义如表15.
表15FAT32长文件目录项32个字节的表示定义字节偏移(16进制)字节数定义7保留未用61表示长文件最后一个目录项5保留未用43210x01属性字节位意义0顺序号数值0x1~0xA10长文件名unicode码①0xB1长文件名目录项标志,取值0FH0xC1系统保留0xD1校验值(根据短文件名计算得出)0xE~0x1912长文件名unicode码②0x1A~0x1B2文件起始簇号(目前常置0)0x1C~0x1F4长文件名unicode码③[返回索引]系统在存储长文件名时,总是先按倒序填充长文件名目录项,然后紧跟其对应的短文件名.
从表15可以看出,长文件名中并不存储对应文件的文件开始簇、文件大小、各种时间和日期属性.
文件的这些属性还是存放在短文件名目录项中,一个长文件名总是和其相应的短文件名一一对应,短文件名没有了长文件名还可以读,但长文件名如果没有对应的短文件名,不管什么系统都将忽略其存在.
所以短文件名是至关重要的.
在不支持长文件名的环境中对短文件名中的文件名和扩展名字段作更改(包括删除,因为删除是对首字符改写E5H),都会使长文件名形同虚设.
长文件名和短文件名之间的联系光靠他们之间的位置关系维系显然远远不够.
其实,长文件名的0xD字节的校验和起很重要的作用,此校验和是用短文件名的11个字符通过一种运算方式来得到的.
系统根据相应的算法来确定相应的长文件名和短文件名是否匹配.
这个算法不太容易用公式说明,我们用一段c程序来加以说明.
假设文件名11个字符组成字符串shortname[],校验和用chknum表示.
得到过程如下:inti,j,chknum=0;for(i=11;i>0;i--)chksum=((chksum&1)0x80:0)+(chksum>>1)+shortname[j++];如果通过短文件名计算出来的校验和与长文件名中的0xD偏移处数据不相等.
系统无论如何都不会将它们配对的.
依据长文件名和短文件名对目录项的定义,加上对簇的编号和链接,FAT32上数据的读取便游刃有余了.
五、结束.
[返回索引]本文出自数据恢复(www.
sjhf.
net),疏漏在所难免,希望指正.
若需转载请保留此信息;若需修改,请用以下方式与作者取得联系1、http://www.
sjhf.
net2、zymail@vip.
sina.
com

杭州王小玉网-美国CERA 2核8G内存19.9元/月,香港,日本E3/16G/20M CN2带宽150元/月,美国宿主机1500元,国内宿主机1200元

官方网站:点击访问王小玉网络官网活动方案:买美国云服务器就选MF.0220.CN 实力 强 强 强!!!杭州王小玉网络 旗下 魔方资源池 “我亏本你引流活动 ” mf.0220.CNCPU型号内存硬盘美国CERA机房 E5 2696v2 2核心8G30G总硬盘1个独立IP19.9元/月 续费同价mf.0220.CN 购买湖北100G防御 E5 2690v2 4核心4G...

WHloud Date鲸云数据($9.00/月), 韩国,日本,香港

WHloud Date(鲸云数据),原做大数据和软件开发的团队,现在转变成云计算服务,面对海内外用户提供中国大陆,韩国,日本,香港等多个地方节点服务。24*7小时的在线支持,较为全面的虚拟化构架以及全方面的技术支持!官方网站:https://www.whloud.com/WHloud Date 韩国BGP云主机少量补货随时可以开通,随时可以用,两小时内提交退款,可在工作日期间全额原路返回!支持pa...

美国云服务器 2核4G限量 24元/月 香港云服务器 2核4G限量 24元/月 妮妮云

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款到网站余额,超过2天...

format命令为你推荐
iprouteip route-static 192.168.1.0 255.255.255.0 3.3.3.2什么意思建企业网站怎么建企业网站建企业网站建立一个企业网站要多少费用企业信息查询系统官网怎么查自己办了几个工商营业执照outlookexpressOUTLOOK EXPRESS作用是什么?我想删除它会不会影响系统什么是支付宝支付宝是什么意思?flashftp下载《蔓蔓青萝(全)》.TXT_微盘下载360防火墙在哪里设置360安全防护中心在哪泉州商标注册请问泉州商标注册要怎么办理?在哪办理?12306.com注册12306邮箱地址怎么写
美国vps主机 长春域名注册 七牛优惠码 qq云存储 香港机房托管 青果网 智能骨干网 大容量存储器 me空间社区 闪讯官网 空间首页登陆 空间购买 密钥索引 gotoassist crontab nano ddos攻击工具 主机箱 更多