U盘文件系统资料 二.docx

上传人:b****1 文档编号:2889847 上传时间:2023-05-04 格式:DOCX 页数:10 大小:22.28KB
下载 相关 举报
U盘文件系统资料 二.docx_第1页
第1页 / 共10页
U盘文件系统资料 二.docx_第2页
第2页 / 共10页
U盘文件系统资料 二.docx_第3页
第3页 / 共10页
U盘文件系统资料 二.docx_第4页
第4页 / 共10页
U盘文件系统资料 二.docx_第5页
第5页 / 共10页
U盘文件系统资料 二.docx_第6页
第6页 / 共10页
U盘文件系统资料 二.docx_第7页
第7页 / 共10页
U盘文件系统资料 二.docx_第8页
第8页 / 共10页
U盘文件系统资料 二.docx_第9页
第9页 / 共10页
U盘文件系统资料 二.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

U盘文件系统资料 二.docx

《U盘文件系统资料 二.docx》由会员分享,可在线阅读,更多相关《U盘文件系统资料 二.docx(10页珍藏版)》请在冰点文库上搜索。

U盘文件系统资料 二.docx

U盘文件系统资料二

U盘文件系统资料二

Windows95OSR2和Windows98开始支持FAT32文件系统,它是对早期DOS的FAT16文件系统的增强,由于文件系统的核心--文件分配表FAT由16位扩充为32位,所以称为FAT32文件系统。

在一逻辑盘(硬盘的一分区)超过512兆字节时使用这种格式,会更高效地存储数据,减少硬盘空间的浪费,一般还会使程序运行加快,使用的计算机系统资源更少,因此是使用大容量硬盘存储文件的极有效的系统。

本人对Windows98下的FAT32文件系统做了分析实验,总体上与FAT16文件系统变化不大,现将有关变化部分简介如下:

(一)FAT32文件系统将逻辑盘的空间划分为三部分,依次是引导区(BOOT区)、文件分配表区(FAT区)、数据区(DATA区)。

引导区和文件分配表区又合称为系统区。

(二)引导区从第一扇区开始,使用了三个扇区,保存了该逻辑盘每扇区字节数,每簇对应的扇区数等等重要参数和引导记录。

之后还留有若干保留扇区。

而FAT16文件系统的引导区只占用一个扇区,没有保留扇区。

(三)文件分配表区共保存了两个相同的文件分配表,因为文件所占用的存储空间(簇链)及空闲空间的管理都是通过FAT实现的,FAT如此重要,保存两个以便第一个损坏时,还有第二个可用。

文件系统对数据区的存储空间是按簇进行划分和管理的,簇是空间分配和回收的基本单位,即,一个文件总是占用若干个整簇,文件所使用的最后一簇剩余的空间就不再使用,而是浪费掉了。

从统计学上讲,平均每个文件浪费0.5簇的空间,簇越大,存储文件时空间浪费越多,利用率越低。

因此,簇的大小决定了该盘数据区的利用率。

FAT16系统簇号用16位二进制数表示,从0002H到FFEFH个可用簇号(FFF0H到FFFFH另有定义,用来表示坏簇,文件结束簇等),允许每一逻辑盘的数据区最多不超过FFEDH(65518)个簇。

FAT32系统簇号改用32位二进制数表示,大致从00000002H到FFFFFEFFH个可用簇号。

FAT表按顺序依次记录了该盘各簇的使用情况,是一种位示图法。

每簇的使用情况用32位二进制填写,未被分配的簇相应位置写零;坏簇相应位置填入特定值;已分配的簇相应位置填入非零值,具体为:

如果该簇是文件的最后一簇,填入的值为FFFFFF0FH,如果该簇不是文件的最后一簇,填入的值为该文件占用的下一个簇的簇号,这样,正好将文件占用的各簇构成一个簇链,保存在FAT表中。

0000000H、00000001H两簇号不使用,其对应的两个DWORD位置(FAT表开头的8个字节)用来存放该盘介质类型编号。

FAT表的大小就由该逻辑盘数据区共有多少簇所决定,取整数个扇区。

(四)FAT32系统一簇对应8个逻辑相邻的扇区,理论上,这种用法所能管理的逻辑盘容量上限为16TB(16384GB),容量大于16TB时,可以用一簇对应16个扇区,依此类推。

FAT16系统在逻辑盘容量介于128MB到256MB时,一簇对应8个扇区,容量介于256MB到512MB时,一簇对应16个扇区,容量介于512MB到1GB时,一簇对应32个扇区,容量介于1GB到2GB时,一簇对应32个扇区,超出2GB的部分无法使用。

显然,对于容量大于512MB的逻辑盘,采用FAT32的簇比采用FAT16的簇小很多,大大减少了空间的浪费。

但是,对于容量小于512MB的盘,采用FAT32虽然一簇8个扇区,比使用FAT16一簇16个扇区,簇有所减小,但FAT32的FAT表较大,占用空间较多,总数据区被减少,两者相抵,实际并不能增加有效存储空间,所以微软建议对小于512M的逻辑盘不使用FAT32。

另外,对于使用FAT16文件系统的用户提一建议,硬盘分区时,不要将分区(逻辑盘)容量正好设为某一区间的下限,例:

将一逻辑盘容量设为1100M(稍大于1024M),则使用时其有效存储容量比分区为950M的一般还少,因其簇大一倍,浪费的空间较多。

还有,使用FDISK等对分区指定容量时,由于对1MB的定义不一样(标准的二进制的1MB为1048576B,有的系统将1MB理解为1000000B,1000KB等),及每个分区需从新磁道开始等因素,实际分配的容量可能稍大于指定的容量,亦需注意掌握。

(五)根目录区(ROOT区)不再是固定区域、固定大小,可看作是数据区的一部分。

因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,一般情况下从第二簇开始使用,大小视需要增加,因此根目录下的文件数目不再受最多512的限制。

FAT16文件系统的根目录区(ROOT区)是固定区域、固定大小的,是从FAT区之后紧接着的32个扇区,最多保存512个目录项,作为系统区的一部分。

(六)目录区中的目录项变化较多,一个目录项仍占32字节,可以是文件目录项、子目录项、卷标项(仅跟目录有)、已删除目录项、长文件名目录项等。

目录项中原来在DOS下保留未用的10个字节都有了新的定义,全部32字节的定义如下:

(1)0--7字节文件正名。

(2)8--10字节文件扩展名。

(3)11字节文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。

(4)12--13字节仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。

(5)14--15字节24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。

(6)16--17字节16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。

(7)18--19字节16位二进制的文件最新访问日期,定义同(6)。

(8)20--21字节起始簇号的高16位。

(9)22--23字节16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。

(10)24--25字节16位二进制的文件最新修改日期,定义同(6)。

(11)26--27字节起始簇号的低16位。

(12)28--31字节32位的文件字节长度。

其中第(4)至(8)项为以后陆续定义的。

对于子目录项,其(12)为零;已删除目录项的首字节值为E5H。

在可以使用长文件名的FAT32系统中,文件目录项保存该文件的短文件名,长文件名用若干个长文件名目录项保存,长文件名目录项倒序排在文件短目录项前面,全部是采用双字节内码保存的,每一项最多保存十三个字符内码,首字节指明是长文件名的第几项,11字节一般为0FH,12字节指明类型,13字节为校验和,26--27字节为零。

(七)以前版本的Windows和DOS与FAT32不兼容,不能识别FAT32分区,有些程序也依赖于FAT16文件系统,不能和FAT32驱动器一道工作。

将硬盘转换为FAT32,就不能再用双引导运行以前版本的Windows(Windows95[Version4.00.950]、WindowsNT3.x、WindowsNT4.0和Windows3.x)。

磁盘结构综述1.硬盘结构硬盘的内部是由圆形金属片堆叠起来的,每个盘片的两面都有一个磁头(Head)负责读写这个磁面(Side),在每个磁面上划分了一圈一圈的同心圆,叫做柱面(Cylinder)对于软盘通常称之为磁道,在每个柱面中又划分了若干段,称之为扇区(Sector)。

由于技术的发展,硬盘的密度越来越大,使得硬盘的实际盘片数越来越少,对磁盘操作的柱面、磁头、扇区被硬盘控制器内部转换,已经不是实际的柱面、磁头、扇区了。

由于最早时磁盘存取系统估计不足,传输数据时只给扇区留了6位,柱面留了10位,磁头留了8位。

也就是说,柱面最大只能为1023。

但是大硬盘的柱面远大于这个数,所以后来就采用将柱面数减少,将磁头数增加的方式来满足磁盘寻址的要求,对于实际地址的转换在BIOS中进行,这叫逻辑块寻址方式(LogicalBlockAddressing,LBA)硬盘中有关柱面、磁头、扇区的数据都是以此为基准的。

2.分区结构众多的文件数据存放在磁盘上,需要有组织,这就形成了文件系统。

但是各个操作系统的文件系统都不尽相同,为了划分管理文件系统,在现在的PC机上都采用通用的分区结构。

分区机构是这样的:

硬盘的以一个扇区(就是0柱面0磁头1扇区)叫主引导扇区(MainBootRecord,MBR),存放着引导程序和主分区表(MainPartitionTable)和结束标志"55AA"。

一般称的分区表即是主分区表。

一个分区表最多可包含四个分区表项,每个分区表项中标示着一个分区信息或一个扩展分区表的位置,而扩展分区表中可能还有扩展分区表,这就形成了一个链状结构,可以记录很多个分区。

C语言定义如下typedefstruct

{

charbootcode[0x1be];//启动代码

PartitionTablePT[4];//分区表

wordEndingFlag;//结束标识

}MBR;

分区表项的如下:

typedefstruct

{

byteBootFlag;//启动标志

CHSStartCHS;//分区开始的柱面、磁头、扇区

byteSystemID;//分区类型

CHSEndCHS;//分区结束的柱面、磁头、扇区

dwordRelativeSectors;//分区相对扇区数,指分区相对于记录该分区的分区表的扇区位置之差

dwordTotalSectors;//分区总扇区数

}PartitionTable;

其中CHS为一个柱面、磁头、扇区的结构,定义如下:

structCHS

{

byteHead;//磁头

byteSector:

6;//扇区

byteCyH2:

2;//柱面的高两位

byteCyL8;//柱面的低八位

wordCylinder(){return(word(CyH2)*256+CyL8);}//返回柱面值

voidSetCylinder(wordCylinder)//设置柱面值

{

CyH2=(Cylinder8)&0x3;

CyL8=(Cylinder&0xff);

}

};

其中分区类型是对应于各种文件系统统一编排的一个代码。

比如06H是大于32M的FAT16分区的标志,05H是扩展分区的标志,等等。

一般的,对于DOS/Windows3.x/Windows95/98的系统来说,第一个分区表项记录着DOS主分区(C盘)的信息,而且是可以启动的,第二个分区表项一般是扩展分区,在这个扩展分区表项所指向的分区表中又是一个Dos主分区(D盘)和一个扩展分区,依次类推。

而在绝大部分系统中Dos主分区(C盘)是从0柱面1磁头1扇区开始的。

(有些机器在这个位置有个小分区,专门用来管理启动或机器设置,之后才是C盘的分区)

3.FAT文件系统FAT文件系统(FAT12/FAT16/FAT32)是从DOS发展过来的一种文件系统,其优点是简单易用,并被多种操作系统支持。

(目前支持FAT32的操作系统还不多)FAT文件系统名称后的数字是标识文件中系统一个分配单元所需的位(bit)数。

一个FAT12/16文件系统的结构是这样的:

引导扇区第一文件分配表第二文件分配表根目录数据区

(1).引导扇区

引导扇区是文件系统的第一个扇区,其中包含分区重要的数据信息--BPB(BIOSParamenterBlock-磁

盘参数表)。

磁盘参数表中包含分区总大小、磁盘参数等重要信息。

其C语言定义为:

typedefstruct

{

wordSectorBytes;//每扇区字节数

byteSectorsPerCluster;//每簇扇区数

wordReservedSectors;//保留扇区数

byteNbrFat;//FAT的个数

wordRootEntry;//根目录项数

wordTotalSectors;//分区总扇区数(分区小于32M时)

byteMedia;//分区介质标识

wordSectorsPerFAT;//每个FAT占的扇区数

wordSectorsPerTrack;//每道扇区数

wordHeads;//磁头数

dwordHiddenSectors;//隐含扇区数

dwordBigTotalSectors;//分区总扇区数(分区大于32M时)

}BPB_FAT16;

其中保留扇区数为从分区开始到第一个FAT表开始中间的扇区数。

隐含扇区数同分区表中的隐含扇区数含义相同。

虽然存在FAT个数的定义,但现在的FAT12/16系统基本上没有除2以外的值。

因而一般不考虑其他情况。

根目录项数是指根目录总共能容纳下的目录的项数。

一个目录项占32个字节,所以一个扇区有512/32=16个目录项。

用这个值除以16就是根目录所占的扇区数。

分区总扇区数在分区大于32M时已经超过65535,两个字节已经无法表示,因此在大于32M的分区中TotalSector总是等于零,而将实际的数放在BigTotalSectors中。

分区介质标识是确定BPB有效的标志。

它必须与FAT表中第一个字节的分区介质标识统一。

硬盘的分区介质标识为0F8h,如果这个标识不对或者与FAT不统一则将会出"Invalidmediatype"的错误。

SectorsPerFAT是每个FAT所占的扇区数。

系统根据分区起始地址+保留扇区数+每个FAT所占扇区数*FAT个数+根目录项数/16来确定数据区开始的位置,然后由这个位置+簇号*每簇扇区数来最终确定数据在硬盘扇的具体位置。

(2)文件分配表

文件分配表是文件在磁盘上分布的信息。

FAT文件系统将数据区按每簇扇区数为单位划分成一个一个单元,每个单元是文件分配的最小单位。

这个单元就称为簇。

一些大的文件可能占用了很多簇,而且在磁盘上没有连续存放。

FAT表就是为了确定文件每个簇的连接关系而设的。

FAT表的每一项都对应着数据区的一个簇,FAT16的FAT表每一项占16位,也就是两个字节。

每一项的内容表示其对应簇的分配情况,0表示尚未分配;FFF0h~FFF6h为备用;FFF7h表示坏簇,即该簇中磁盘有损坏;FFF8h~FFFF表示文件结束;其他值则表示当前簇的下一簇的簇号。

FAT表的最前面两项是不用的,因此第一个数据簇的簇号为2。

FAT表第一个字节也是分区介质类型,和BPB中的一样。

因此用"F8FFFF"可以作为硬盘FAT起始的标志。

绝大多数FAT系统有两个FAT表,第二个FAT表又称为后备文件分配表。

系统内部完成后备文件分配表与第一文件分配表的统一。

本文讨论的完全恢复是基于后备文件分配表没有被破坏的情况下的恢复,如果两个文件分配表都被损坏,理论上就无法完全确定文件信息,因此无法完全恢复。

(3)根目录

FAT12/16的根目录是单独列出来的,在后备文件分配表和数据区之间。

每个目录项为32个字节,记录一个文件或目录的信息。

(长文件名例外)文件修复的原理就是由目录项中指示的起始簇号和数据区开始位置来确定文件的位置,从而恢复小的文件。

4.FAT32文件系统

FAT32文件系统与FAT12/16的差别较大,一个主要的差别就是将根目录划归到数据区中了,在BPB中专门加了一项根目录开始簇号。

这样根目录的大小就不再受到限制,大大增加了根目录的自由度。

FAT32的BPB定义如下:

typedefstruct

{

wordBytesPerSector;//每扇区字节数

byteSectorsPerCluster;//每簇扇区数

wordReservedSectors;//保留扇区数

byteNumberOfFATs;//FAT的个数

wordRootEntries;//根目录项数(FAT32不用)

wordTotalSectors;//分区总扇区数(FAT32不用)

byteMediaDescriptor;//分区介质标识

wordSectorsPerFAT;//每个FAT占的扇区数(FAT32不用)

wordSectorsPerTrack;//每道扇区数

wordHeads;//磁头数

dwordHiddenSectors;//隐含扇区数

dwordBigTotalSectors;//分区总扇区数

dwordBigSectorsPerFat;//每个FAT占的扇区数

wordExtFlags;//扩展标志

wordFS_Version;//文件系统版本

dwordRootDirStartClus;//根目录起始簇号

wordFSInfoSec;//指向包含BIGFATBOOTFSINFO结构的扇区

wordBkUpBootSec;//后备引导区的位置

byteReserved[12];//备用

}BPB_FAT32;

从上可以看出,FAT32的BPB是在FAT16BPB的基础上加入了一些参数,并停用了一些参数。

每个FAT所占扇区数变为4个字节,根目录项数不再使用。

FAT32与FAT12/16的另一不同点在于,FAT32既可以同时使用多个FAT表,也可以只使用其中的某一个FAT表。

ExtFlags正是这个标志。

当ExtFlags的第8位为0时表示同时使用每个FAT表,当其为1时表示只使用其中的一个FAT表,这个FAT表的序号由ExtFlags的低4位给出。

FS_Version文件系统版本现在都为0。

FAT32将根目录也视作一个目录文件,使用一个簇链(ClusterChain),RootDirStartClus正是这个链的起始簇号。

FAT32有个专门放BIGFATBOOTFSINFO结构的扇区,该结构包含了剩余簇个数,下一个空闲簇号等信息。

这个扇区通常紧接着引导扇区。

由于与恢复关系不大,本文不做讨论。

FAT32将引导扇区和文件系统信息扇区信息存了两份,另一份的位置由BkUpBootSec指出。

这样由于偶然发生的损坏就很容易恢复。

5.扩展BIOS参数块

在BPB的后面是ExtendedBIOSParamenterBlock。

EBPB的结构如下:

typedefstruct//ExtendedBIOSParamenterBlock

{

bytePhysicalDriveNumber;//物理硬盘号

byteCurrentHead;//当前磁头

byteExtBootRecSign;//扩展引导记录标志

dwordSerialNumber;//序列号

charVolumeLabel[11];//卷标

charFSID[8];//文件系统标识

}EBPB;

其中物理硬盘号和当前磁头是系统运行时使用的,硬盘上的值没有什么实际意义。

ExtBootRecSign一般为28h或29h。

SerialNumber是格式化后生成的序列号。

文件系统标识指示了文件系统的类型,即"FAT12"、"FAT16"、"FAT32"

MassStorage协议Bulk-Only传输协议可参考USBMASSBULK.PDF文档

SCSI指令集可参考USBMASSUFI.PDF文档

FAT16文件系统可参考FAT_PAPER.PDF文档

特别声明:

1:

资料来源于互联网,版权归属原作者

2:

资料内容属于网络意见,与本账号立场无关

3:

如有侵权,请告知,立即删除。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2