⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat文件系统的组织结构(zt)(午夜听风).htm

📁 mcu读取硬盘的详细资料包括fat及源码
💻 HTM
📖 第 1 页 / 共 3 页
字号:
        回车其中,磁盘A,B,C,D,<BR>E…..的盘号分别为0,1,2,3,4…….<BR>例如,进入DEBUG后,将D盘DBR扇区的读入内存CS:100的命令为:-L 
        100,3,0,1 回车<BR>1. DBR扇区的结构 
        <BR>经由FORMAT高级格式化写到该扇区的内容成为DOS引导记录DBR,其主要功能是完成<BR>DOS/WINDOWS系统的自举。以FAT16的硬盘DBR为例,它由以下5个部分组成:<BR>(1) 
        跳转指令,占用3个字节的跳转指令将跳至引导代码,其内容随DOS版本变化。<BR>(2) 
        厂商标识和DOS版本号。该部分总共占用8个字节,其内容随DOS版本而不同。<BR>(3) BPB(BIOS Paramenter Block, 
        BIOS参数块)。BPB从第12字节起占用19个字节。<BR>(4) 
        DOS引导程序。DOS引导程序既是占用480字节的BOOT代码,负责完成DOS的3个系统文<BR>件的装入工作。这部分内容随DOS版本不同而变化。<BR>(5) 
        结束标志字,结束标志占用2个字节,其值为AA55。<BR>以上5个部分共占用512个字节也正好是一个扇区,因此,称它DOS引导扇区或BOOT区。在该<BR>区间的内容中,除了第5部分结束标志字是固定不变之外,其余4个部分都是不确定的,第<BR>1,2,4部分都因DOS版本的不同而不同,第三部分的内容也将随DOS版本及硬盘的逻辑盘参<BR>数的变化而变化。<BR>DOS引导记录中的BPB参数块从第12(0BH)字节起占用21个字节,这是磁盘的重要参数区。<BR>保留扇区:由操作系统指定的被保留用作引导区的扇区数。<BR>介质描述:向操作系统提供的所用磁盘的性质。介质描述的值是DOS所能识别的十六进制<BR>数,不同的介质具有不同的介质描述值。硬盘的介质描述符为"F8"。<BR>隐含扇区数:一般用于硬盘分区,所以在软盘中该值为0,在硬盘分区中,它表示从磁盘起<BR>始扇区至当前分区之前的总扇区数。<BR>硬盘的每一个分区都是一个独立的"逻辑驱动器",DOS将每个分区都视为一个从0开始的连续<BR>扇区块。每个分区的隐含扇区取决于该分区以前的扇区总数。一般来说,分区1的隐含扇区<BR>数为17。<BR>DBR的主要功能:<BR>DOS/windows系统在引导的时候,DBR是第一个(除硬盘的MBR之外)需装载的程序段。DBR装<BR>入内存后,即开始执行该引导程序段,其主要任务是装载DOS的系统隐藏文件IO.SYS。<BR>DBR程序段所完成的主要任务如下:<BR>(1) 
        重新设置引导驱动器<BR>(2) 将根目录的第一个扇区(即根目录FDT中的前16个文件项)装载到内存;<BR>(3) 
        检查FDT中的前两个文件是否DOS的两个系统隐藏文件。<BR>(4) 将其中一个系统隐藏文件IO.SYS装载到内存。<BR>(5) 
        将控制权交给该系统隐藏文件IO.SYS。<BR>四,文件分配表FAT<BR>  文件分配表FAT(File Allocation 
        Tabel)是文件管理系统用来给每个文件分配磁盘物理<BR>空间的表格,它告诉操作系统,文件存放在磁盘什么地方。<BR>  文件分配表型文件系统是微软操作系统最传统和应用最广的文件系统。标准的 
        FAT 使<BR>用 16 位寻址方式, Windows 95 OSR2中引入 FAT32 方案。FAT16 簇数的上限是 2 的 16 
        <BR>次即 65536 个, 每簇扇区数的上限是 64 个, 因此其分区空间的上限为 2G(Windows <BR>NT/2000 
        每簇扇区数可为 128, FAT16 空间扩充到 4G); FAT32 簇使用 32 位寻址方式, 其<BR>中高 4 位保留, 实际簇数最多为 
        2 的 28 次, 同时受当前磁盘物理结构和工业标准的限<BR>制,一个磁盘或磁盘阵列中扇区最大个数为 2 的 32 次, 空间为 2 的 41 
        次即2TB。<BR>Windows 2000 将 FAT32 卷的大小限制为 32GB。<BR>  文件系统的全部目的是跟踪文件, 
        具体描述即需要说明整个磁盘分区中每个存储单元<BR>(簇)的使用情况、文件数据的簇存储情况(连续或碎片)以及树型目录结构的描述。FAT 
        实际<BR>上是一个卷中所有簇使用情况的映射表, 每个文件/目录都同表中的若干项对应联系, 并在<BR>目录中进行索引。FAT32 是 FAT 
        的扩展, 支持 32位寻址, 
        保留了簇映射和目录索引的基本<BR>结构。<BR>文件分配表(FAT)有表标识和簇映射(旧称表目)的集合组成。一个完全相同的镜像副本连续<BR>存储在主 
        FAT 表后。<BR>表标识符包括磁盘介质描述符( 1 字节)和填充字节, 总计占两个簇的簇映射区域(这大概也<BR>就是 FAT 
        文件系统簇号由 2 开始的原因 ?), 填充字节一般为 FFFAT32 的填充字节中还包<BR>含"脏位", 
        即系统启动时执行磁盘检查(FAT-ChkDsk/NTFS-AutoChk)。<BR>FAT 实际上由 FAT12 和 FAT16 构成, 
        其簇映射值分别为 12 和 16 位, 其他的全部存储逻<BR>辑均相同, 当总簇数大于 4080(FF0h)时为标准的 16 位 
        FAT。FAT 簇映射中, 0000 表示空<BR>簇, FFFF 表示簇链结束, FFF7 表示坏簇, 其余值表示其后续簇的簇号。FAT12 
        和 FAT32 <BR>的存储策略同 FAT16 类似, 例如 FAT12的结束簇为 FFF, FAT32 的坏簇为 0FFFFFF7 
        等(注<BR>意 FAT32 的高 4 位保留)。<BR>  FAT 具有紧凑和高速的优点。通过对磁盘的数字化描述, FAT 
        记录了每个文件的位置和<BR>区域。自然这些优点的得到是有代价的, FAT 的代价是寻址空间的局限(2GB)和簇内空间的<BR>浪费, 
        FAT32 的 FAT 表则占据了过多的磁盘空间, 如果操作系统操作一个相对大的分区依<BR>然试图将整个 FAT 表放进内存, 
        其占据的空间和时间资源将相当可观, 同时会导致系统的<BR>脆弱, 特别是磁盘碎片很多时, 甚至可能造成系统的崩溃, 
        至少将影响正常系统的健壮。<BR>引导扇区 BIOS 参数表`<BR>  磁盘 BIOS 参数表(BPB)描述磁盘的逻辑结构, 是 DOS 
        文件系统在磁盘上存取文件的依<BR>据, 文件存取中的簇与逻辑扇区之间的相互映射以及逻辑扇区与物理扇区之间的相互映射都<BR>需要借助于该表。 
        磁盘 BIOS 参数表存放于每个格式化磁盘的起始即磁盘引导扇区, 对于<BR>软盘为第一扇区, 对于硬盘为分区第一扇区, 从第 12 
        字节开始。<BR>下表为典型的 FAT32 引导扇区 BIOS 参数表(FAT16 包括 
        FAT12):<BR>偏移&nbsp;&nbsp;长&nbsp;&nbsp;典型数值&nbsp;&nbsp;适用&nbsp;&nbsp;名称&nbsp;&nbsp;描述&nbsp;&nbsp;<BR>0X0B&nbsp;&nbsp;2&nbsp;&nbsp;0002&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每扇区字节数&nbsp;&nbsp;硬件扇区的大小。有效值为512、1024、2048和4096,<BR>一般为512&nbsp;&nbsp;<BR>0X0D&nbsp;&nbsp;1&nbsp;&nbsp;08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每簇扇区数&nbsp;&nbsp;数据区每个簇的扇区数。操作系统只能访问有限的簇数,通<BR>过对每簇扇区数的修改访问容量叫大的卷。每卷簇扇区数取决于卷容量,其有效值在1至128<BR>间(2的整幂数。Windows2000限制FAT32分区最大限度为32GB,但可访问其他操作系统如<BR>Windows95OSR2建立的更大分区。&nbsp;&nbsp;<BR>0XOE&nbsp;&nbsp;2&nbsp;&nbsp;2000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保留扇区数&nbsp;&nbsp;包括引导扇区内的从卷开始到第一个FAT的扇区数。典型<BR>的FAT32保留扇区数为32,FAT为1。&nbsp;&nbsp;<BR>OX10&nbsp;&nbsp;1&nbsp;&nbsp;02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FAT数目&nbsp;&nbsp;卷的FAT拷贝数目,为2&nbsp;&nbsp;<BR>OX11&nbsp;&nbsp;2&nbsp;&nbsp;0000&nbsp;&nbsp;FAT16&nbsp;&nbsp;根目录入口数&nbsp;&nbsp;根目录存储的32字节文件和目录名入口个数。硬盘<BR>一般为512,其中的一个为卷标。FAT32中此值为0&nbsp;&nbsp;<BR>OX13&nbsp;&nbsp;2&nbsp;&nbsp;0000&nbsp;&nbsp;FAT16&nbsp;&nbsp;(小)扇区数&nbsp;&nbsp;卷扇区数为16(&lt;65536)时。否则为0,扇区数在<BR>扇区数中定义FAT32中此值为0&nbsp;&nbsp;<BR>OX15&nbsp;&nbsp;1&nbsp;&nbsp;F8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;介质描述符&nbsp;&nbsp;硬盘为OXF8,高密度3.5英寸软盘为OXF0。Windows2000已不<BR>用。&nbsp;&nbsp;<BR>OX16&nbsp;&nbsp;2&nbsp;&nbsp;0000&nbsp;&nbsp;FAT16&nbsp;&nbsp;每个FAT扇区数&nbsp;&nbsp;每个FAT扇区数,卷中每个FAT占据的扇区数。操<BR>作系统使用隐含扇区数,保留扇区数和本参数。计算根目录起始地址,并根据根目录入口地<BR>址数计算数据区起始地址。FAT32为0。&nbsp;&nbsp;<BR>OX18&nbsp;&nbsp;2&nbsp;&nbsp;3F00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每磁道扇区数&nbsp;&nbsp;磁盘每道物理扇区数。INT13H访问磁盘用的参数,在多<BR>磁头和柱面卷中折算到磁道中。&nbsp;&nbsp;<BR>OX1A&nbsp;&nbsp;2&nbsp;&nbsp;FF00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;磁头数&nbsp;&nbsp;磁盘每道磁头数。例如3.5英寸1.44MB软盘的磁头数为2&nbsp;&nbsp;<BR>OX1C&nbsp;&nbsp;4&nbsp;&nbsp;EE39D700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;隐含扇区数&nbsp;&nbsp;卷引导扇区前的扇区数。用于在引导过程中计算根目<BR>录和数据区的绝对地址,此值一般仅相关于INT13H可访问的介质,在非分区介质中必须为<BR>0。&nbsp;&nbsp;<BR>OX20&nbsp;&nbsp;4&nbsp;&nbsp;7F324E00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(大)扇区数&nbsp;&nbsp;如果(小)扇区数为0,在此表明卷扇区总数。如<BR>果(小)扇区数非0,则此参数为0。&nbsp;&nbsp;<BR>OX24&nbsp;&nbsp;8&nbsp;&nbsp;83130000&nbsp;&nbsp;FAT32&nbsp;&nbsp;每个FAT扇区数&nbsp;&nbsp;FAT32卷中每个FAT占据的扇区数。操作系统<BR>使用隐含扇区数,保留扇区数和本参数,计算根目录起始地址,并根据根目录入口数计算数<BR>据区起始地址&nbsp;&nbsp;<BR>OX28&nbsp;&nbsp;2&nbsp;&nbsp;0000&nbsp;&nbsp;FAT32&nbsp;&nbsp;扩展标志&nbsp;&nbsp;两字节结构包括:0..3位:活动FAT数目(从0开始,<BR>不是1),仅在无镜像有效4..6位:保留7位:0代表FAT在任何时刻镜像至所有的FAT,1代表<BR>仅有一个活动的FAT(关联于0..3位)8..15位:保留&nbsp;&nbsp;<BR>0X2A&nbsp;&nbsp;2&nbsp;&nbsp;0000&nbsp;&nbsp;FAT32&nbsp;&nbsp;文件系统版本&nbsp;&nbsp;高字节为主版本号,低字节为辅版本号。用于将来<BR>FAT32升级时区分版本,如果此值非0,低版本Windows不妨问卷&nbsp;&nbsp;<BR>OX2C&nbsp;&nbsp;4&nbsp;&nbsp;02000000&nbsp;&nbsp;FAT32&nbsp;&nbsp;根目录簇号&nbsp;&nbsp;根目录的首簇号,一般为2,但有可能不是&nbsp;&nbsp;<BR>0X30&nbsp;&nbsp;2&nbsp;&nbsp;0100&nbsp;&nbsp;FAT32&nbsp;&nbsp;文件系统信息扇区号&nbsp;&nbsp;在FAT32保留扇区中存放文件系统信息结构<BR>的扇区号。典型的值为1。引导扇区的文件系统信息结构备份于该扇区,但不保持刷新&nbsp;&nbsp;<BR>0X34&nbsp;&nbsp;2&nbsp;&nbsp;0600&nbsp;&nbsp;FAT32&nbsp;&nbsp;引导扇区备份&nbsp;&nbsp;非0值表示引导扇区备份在隐含扇区的位置,典型<BR>值为6,不推崇其他值&nbsp;&nbsp;<BR>OX40&nbsp;&nbsp;1&nbsp;&nbsp;80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;物理驱动器号&nbsp;&nbsp;描述BIOS物理磁盘编号。软盘为0X00,硬盘为80,一般<BR>BIOS 
        INT13H调用磁盘时用。此值只对可启动设备有效。&nbsp;&nbsp;<BR>OX41&nbsp;&nbsp;1&nbsp;&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保留&nbsp;&nbsp;此值为0&nbsp;&nbsp;<BR>0X42&nbsp;&nbsp;1&nbsp;&nbsp;29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;扩展标志&nbsp;&nbsp;扩展引导标志必须为0X28或OX29&nbsp;&nbsp;<BR>0X43&nbsp;&nbsp;4&nbsp;&nbsp;A88B3652&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;卷序列号&nbsp;&nbsp;格式化磁盘时随机随机生成的序列号,用于帮助分区磁<BR>盘&nbsp;&nbsp;<BR>0X47&nbsp;&nbsp;11&nbsp;&nbsp;NO 
        NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;卷标&nbsp;&nbsp;曾经使用,卷标现以特殊入口方式存于根目录&nbsp;&nbsp;<BR>OX52&nbsp;&nbsp;8&nbsp;&nbsp;FAT32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件系统类型&nbsp;&nbsp;FAT16或FAT32文字域&nbsp;&nbsp;<BR><BR>原始的磁盘基数表(现操作系统已放弃)<BR>磁盘基数表存放磁盘进行 
        I/O 操作时用于控制硬件的基本参数, 位于引导扇区的 21h 
        字<BR>节。表中每项对应一个字节。<BR>偏移&nbsp;&nbsp;含义&nbsp;&nbsp;<BR>21&nbsp;&nbsp;高 4 
        位为步进速率, 低 4 
        位磁头卸载时间&nbsp;&nbsp;<BR>22&nbsp;&nbsp;马达等待时间(延迟关闭)&nbsp;&nbsp;<BR>23&nbsp;&nbsp;每扇区字节数(0-128,1-256,2-512,3-1024 
        等)&nbsp;&nbsp;<BR>24&nbsp;&nbsp;每道扇区数&nbsp;&nbsp;<BR>25&nbsp;&nbsp;扇区间间隔字节数&nbsp;&nbsp;<BR>26&nbsp;&nbsp;每扇区字节数(当24为0时)&nbsp;&nbsp;<BR>27&nbsp;&nbsp;格式化操作对扇区间隔的填充字节&nbsp;&nbsp;<BR>28&nbsp;&nbsp;格式化操作对扇区数据区的填充字节&nbsp;&nbsp;<BR>29&nbsp;&nbsp;寻道后磁头稳定时间&nbsp;&nbsp;<BR>2A&nbsp;&nbsp;执行命令的最长等待时间&nbsp;&nbsp;<BR>2B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>1. 
        FAT表的大小及位置<BR>  FAT在磁盘上是安排在紧接DOS引导扇区DBR之后的,在FAT16中,它总是从磁盘的逻辑1<BR>扇区开始。<BR>  在磁盘上共有FAT表的两个拷贝(一个是基本FAT表FAT1,另一个是FAT表的备份<BR>FAT2),两者在磁盘上前后紧排在一起,其大小根据分区的大小不同而变化。FAT表之后紧<BR>接着是根目录,根目录之后是数据区。在硬盘中,FAT16的文件分配表仍然是存放在逻辑1扇<BR>区开始的若干个扇区内,一个文件分配表占用多少个扇区根据硬盘分区和逻辑盘的容量大小<BR>情况的不同而不同。<BR>2. 
        文件的簇号链<BR>  磁盘格式划后,用户文件是以簇为单位存放在数据区中的,一个文件至少占用一个簇,<BR>当一个文件占用多个簇时,这些簇的簇号是不一定连续的,但这些簇号之间有由存储该文件<BR>时确定了的顺序,即每个文件都有其特定的簇号链。<BR>  在磁盘上的每一个可用的簇在FAT中就只有一个登记项,通过在对应簇号的登记项内填<BR>入表项值来表明数据区中的该簇是以占用,空闲或是已损坏的。损坏的簇是在格式化的过程<BR>中,通过FORMAT命令发现的,在一个簇中,只要有一个扇区有问题,该簇就不能使用了。磁<BR>盘上的簇在FAT中的表项占12,16或32位。在FAT16文件系统中,每簇在FAT中所取表项值是<BR>占12位还是16位与所用磁盘的容量有关,12位表项值可表示4096个簇,若磁盘的簇数大于<BR>4096,则必须用16位表项值。一般来说,软盘和小于20740个扇区的硬盘DOS分区用12位映射<BR>一个簇,如多于20740个扇区的硬盘分区,则采用16位的FAT。<BR>五,文件目录表<BR>  每张经过格式化的,并且装文件的磁盘,包括360K,1.2M及各种规格的硬盘,都在磁盘<BR>中建立了一张文件目录表,记录着整个磁盘上所有文件的有用信息,所以我们了解它的结构<BR>很有好处。在文件目录表中,每个文件占32个字节(用PC-TOOLS或DEBUB读出时占两行),<BR>各个字节的含义是这样的:<BR>0-7 
        字节:文件名,共8个字节,不足8个的用29填满,其中第一个字节为00时,表示此项未<BR>用,为E5时表示此项已经删除。<BR>8-10 
        字节:扩展名,占3个字节,无扩展名或不足3个的用20填充。<BR>11 
        字节,表示文件属性。具体含义是:20为归档文件,01为只读文件,不能对其进行修改<BR>和删除。02为隐含,不能为用DIR命令进行查找,04为系统文件,也不能用DIR命令进行查<BR>找。10表示此项为子目录,而不是文件。28表示此项为磁盘的卷标,即磁盘的名字,不是文<BR>件。<BR>12-21 
        共10个字节为保留字段,没有使用。<BR>22-23 为建立文件的时间。<BR>24-25 为建立文件的日期。<BR>26-27 
        为文件占用的第一个簇号,即起始簇。<BR>28-31 
        共4个字节为此文件的长度。<BR>  不同的磁盘目录表在磁盘中的位置和长度也不相同,360K磁盘目录表在磁盘的相对5号<BR>扇区到11号扇区共7个扇区;1.2M磁盘在相对15号扇区到28号扇区共14个扇区而30M硬盘在相<BR>对123号扇区到154号扇区用DEBUG或PCTOOLS工具软件。例如用DEBUG调出A盘中1.2M磁盘目录<BR>表:<BR><BR>  用PCTOOLS(5.0)读写更加方便。运行后,按F3进入磁盘服务状态,再按E进入编辑磁<BR>盘功能,选择A盘,按F2后再按R进入选择目录区,此时磁盘的目录表到后按F3进入全屏幕编<BR>辑状态,修改完毕,按F5再按U存盘。<BR>掌握了目录表的结构和修改方法,我们可以利用它来做一些工作,下面仅举几例。修改目录<BR>项的文件名部分,可以在文件名中间出现空格和小写字母。如果用此方法修改的是文件名,<BR>则此文件在DOS下不能正常调用,如果修改的是子目录名,则此子目录也不能正常的进入,<BR>因为文件名和子目录名中是不能出现空格的,空格作为命令的分隔符。这就达到了保密的效<BR>果,自己用时,只需再将名字改为正常的名字即可。如果用此方法修改硬盘的卷标项为一些<BR>小写字母,那么可以防止硬盘被误格式化,因为硬盘格式化时必须输入卷标名,而在一般情<BR>况下卷标是不能输入小写字母的。真要进行格式化时,再把卷标改为正常即可。如果误删了<BR>文件,而磁盘又没进行其它写操作,在没有其它软件恢复时,可以修改目录表此项的第一个<BR>字节,把E5改为其它,就可以恢复误删文件(此方法并不是恢复文件的最好方法,对于<BR>ASCII文件较好,而一些可执行文件易出错)。<BR>  另外可以修改属性位,如果把某些文件修改成隐含的或只读的,可以防止他人删除和修<BR>改,并且可以防止病毒感染。在加密子目录时,为了防止PCTOOLS的查找,可以把子目录的<BR>长度项改为无穷大后即最后一项改为FF。其它项如时间、日期等,都可以按照自己的需要进<BR>行修改。<BR>六,分区表<BR>  分区表决定磁盘操作系统的基本设置, 
        包括分区类型和位置。每个分区表长16 字节, <BR>从主引导记录的 0x01BE(446) 开始。不满 4 个分区时剩下的填 
        0。<BR>  一个硬盘至多只能有4个分区, 常见的多个逻辑卷在逻辑上是一个分区(扩展分区), 
        严<BR>格意义上讲逻辑卷不是分区。此即卷和分区的区别。卷为引导扇区 +数据区的一个逻辑概<BR>念, 访问时为字母冒号, 
        一个分区可能包含一个或多个卷。 <BR>Windows 2000 中只有基本磁盘使用分区表。动态磁盘使用磁盘尾部的 DiskManagement 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -