FAT文件系统原理(二)

Fat32文件系统详解--DBR与目录 每4个字节储存一个簇(可用于计算每簇扇区数-->FAT表总字节数除以4,即:(FAT2-FAT1)×128=总簇数)00-07 主文件名 (第一个字节表示分配状态:00为从未使用过,E5为已删除)11-12 FAT32必须等于0,FAT12/FAT16为根目录中目录的个数。-28--2B 可用簇数(可用于计算每簇扇区数)0E-0F 保留扇区数(FAT1表位置)-2C--2F下一个可用簇。1A-1B 文件起始簇号的低位。数据区扇区数-根目录扇区数=簇的大小。0010000子目录。1C-1F 文件大小(字节) 阅读详情

四、FAT分区原理。

先来一幅结构图:
   

    现在我们着重研究FAT格式分区内数据是如何存储的。FAT分区格式是MICROSOFT最早支持的分区格式,依据FAT表中每个簇链的所占位数(有关概念,后面会讲到)分为fat12、fat16、fat32三种格式"变种",但其基本存储方式是相似的。
    仔细研究图7中的fat16和fat32分区的组成结构。下面依次解释DBR、FAT1、FAT2、根目录、数据区、剩余扇区的概念。提到的地址如无特别提示均为分区内部偏移。

4.1 关于DBR.

    DBR区(DOS BOOT RECORD)即操作系统引导记录区的意思,通常占用分区的第0扇区共512个字节(特殊情况也要占用其它保留扇区,我们先说第0扇)。在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,os引导程序,结束标志几部分组成。 以用的最多的FAT32为例说明分区DBR各字节的含义。见图8。
   

图8的对应解释见表3   

单击此处查看PDF版全文

    表3   FAT32分区上DBR中各部分的位置划分   
字节位移字段长度字段名对应图8颜色
0x003个字节跳转指令 
0x038个字节厂商标志和os版本号 
0x0B53个字节BPB 
0x4026个字节扩展BPB 
0x5A420个字节引导程序代码 
0x01FE2个字节有效结束标志 

图9给出了winhex对图8 DBR的相关参数解释:
   

    根据上边图例,我们来讨论DBR各字节的参数意义。      
    MBR将CPU执行转移给引导扇区,因此,引导扇区的前三个字节必须是合法的可执行的基于x86的CPU指令。这通常是一条跳转指令,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分。
    跳转指令之后是8字节长的OEM ID,它是一个字符串, OEM ID标识了格式化该分区的操作系统的名称和版本号。为了保留与MS-DOS的兼容性,通常Windows 2000格式化该盘是在FAT16和FAT32磁盘上的该字段中记录了“MSDOS 5.0”,在NTFS磁盘上(关于ntfs,另述),Windows 2000记录的是“NTFS”。通常在被Windows 95格式化的磁盘上OEM ID字段出现“MSWIN4.0”,在被Windows 95 OSR2和Windows 98格式化的磁盘上OEM ID字段出现“MSWIN4.1”。
    接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的信息。通常称之为BPB(BIOS Parameter Block),BPB一般开始于相同的位移量,因此,标准的参数都处于一个已知的位置。磁盘容量和几何结构变量都被封在BPB之中。由于引导扇区的第一部分是一个x86跳转指令。因此,将来通过在BPB末端附加新的信息,可以对BPB进行扩展。只需要对该跳转指令作一个小的调整就可以适应BPB的变化。图9已经列出了项目的名称和取值,为了系统的研究,针对图8,将FAT32分区格式的BPB含义和扩展BPB含义释义为表格,见表4和表5。

表4  FAT32分区的BPB字段     
字节位移字段长度(字节)图8对应取值名称和定义
0x0B20x0200扇区字节数(Bytes Per Sector) 硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为512
0x0D10x08每簇扇区数(Sectors Per Cluster),一簇中的扇区数。由于FAT32文件系统只能跟踪有限个簇(最多为4 294 967 296个),因此,通过增加每簇扇区数,可以使FAT32文件系统支持最大分区数。一个分区缺省的簇大小取决于该分区的大小。本字段的合法十进制值有1、2、4、8、16、32、64和128。Windows 2000的FAT32实现只能创建最大为32GB的分区。但是,Windows 2000能够访问由其他操作系统(Windows 95、OSR2及其以后的版本)所创建的更大的分区
0x0e20x0020保留扇区数(Reserved Sector) 第一个FAT开始之前的扇区数,包括引导扇区。本字段的十进制值一般为32
0x1010x02FAT数(Number of FAT) 该分区上FAT的副本数。本字段的值一般为2
0x1120x0000根目录项数(Root Entries)只有FAT12/FAT16使用此字段。对FAT32分区而言,本字段必须设置为 0
0x1320x0000小扇区数(Small Sector)(只有FAT12/FAT16使用此字段)对FAT32分区而言,本字段必须设置为0
0x1510xF8媒体描述符( Media Descriptor)提供有关媒体被使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS FAT16磁盘,在Windows 2000中未被使用
0x1620x0000每FAT扇区数(Sectors Per FAT)只被FAT12/FAT16所使用,对FAT32分区而言,本字段必须设置为0
0x1820x003F每道扇区数(Sectors Per Track) 包含使用INT13h的磁盘的“每道扇区数”几何结构值。该分区被多个磁头的柱面分成了多个磁道
0x1A20x00FF磁头数(Number of Head) 本字段包含使用INT 13h的磁盘的“磁头数”几何结构值。例如,在一张1.44MB 3.5英寸的软盘上,本字段的值为 2
0x1C40x0000003F隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数。在引导序列计算到根目录的数据区的绝对位移的过程中使用了该值。本字段一般只对那些在中断13h上可见的媒体有意义。在没有分区的媒体上它必须总是为0
0x2040x007D043F总扇区数(Large Sector) 本字段包含FAT32分区中总的扇区数
0x2440x00001F32每FAT扇区数(Sectors Per FAT)(只被FAT32使用)该分区每个FAT所占的扇区数。计算机利用这个数和 FAT数以及隐藏扇区数(本表中所描述的)来决定根目录从哪里开始。该计算机还可以从目录中的项数决定该分区的用户数据区从哪里开始
0x2820x00

扩展标志(Extended Flag)(只被FAT32使用)该两个字节结构中各位的值为:
位0-3:活动 FAT数(从0开始计数,而不是1).
       只有在不使用镜像时才有效
位4-6:保留
位7:0值意味着在运行时FAT被映射到所有的FAT
     1值表示只有一个FAT是活动的
位8-15:保留

0x2A20x0000文件系统版本(File ystem Version)只供FAT32使用,高字节是主要的修订号,而低字节是次要的修订号。本字段支持将来对该FAT32媒体类型进行扩展。如果本字段非零,以前的Windows版本将不支持这样的分区
0x2C40x00000002根目录簇号(Root Cluster Number)(只供FAT32使用) 根目录第一簇的簇号。本字段的值一般为2,但不总是如此
0x3020x0001文件系统信息扇区号(File System Information SectorNumber)(只供FAT32使用) FAT32分区的保留区中的文件系统信息(File System Information, FSINFO)结构的扇区号。其值一般为1。在备份引导扇区(Backup Boot Sector)中保留了该FSINFO结构的一个副本,但是这个副本不保持更新
0x3420x0006备份引导扇区(只供FAT32使用) 为一个非零值,这个非零值表示该分区保存引导扇区的副本的保留区中的扇区号。本字段的值一般为6,建议不要使用其他值
0x361212个字节均为0x00保留(只供FAT32使用)供以后扩充使用的保留空间。本字段的值总为0

 

表5   FAT32分区的扩展BPB字段           
字节位移字段长度(字节)图8对应取值字段名称和定义
0x4010x80物理驱动器号( Physical Drive Number) 与BIOS物理驱动器号有关。软盘驱动器被标识为0x00,物理硬盘被标识为0x80,而与物理磁盘驱动器无关。一般地,在发出一个INT13h BIOS调用之前设置该值,具体指定所访问的设备。只有当该设备是一个引导设备时,这个值才有意义
0x4110x00保留(Reserved) FAT32分区总是将本字段的值设置为0
0x4210x29扩展引导标签(Extended Boot Signature) 本字段必须要有能被Windows 2000所识别的值0x28或0x29
0x4340x33391CFE分区序号(Volume Serial Number) 在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘
0x4711"NO NAME"卷标(Volume Label) 本字段只能使用一次,它被用来保存卷标号。现在,卷标被作为一个特殊文件保存在根目录中
0x528"FAT32"系统ID(System ID) FAT32文件系统中一般取为"FAT32"


     DBR的偏移0x5A开始的数据为操作系统引导代码。这是由偏移0x00开始的跳转指令所指向的。在图8所列出的偏移0x00~0x02的跳转指令"EB 58 90"清楚地指明了OS引导代码的偏移位置。jump 58H加上跳转指令所需的位移量,即开始于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为合法结束标志。

FAT16 DBR:
     FAT32中DBR的含义大致如此,对于FAT12和FAT16其基本意义类似,只是相关偏移量和参数意义有小的差异,FAT格式的区别和来因,以后会说到,此处不在多说FAT12与FAT16。我将FAT16的扇区参数意义列表。感兴趣的朋友自己研究一下,和FAT32大同小异的。

 

表6  一个FAT16分区上的引导扇区段
字节位移字段长度(字节)字段名称
0x003跳转指令(Jump Instruction)
0x038OEM ID
0x0B25BPB
0x2426扩展BPB
0x3E448引导程序代码(Bootstrap Code)
0x01FE4扇区结束标识符(0x55AA)

 

表7  FAT16分区的BPB字段     
字节位移字段长度(字节)例值名称和定义
0x0B20x0200扇区字节数(Bytes Per Sector) 硬件扇区的大小。本字段合法的十进制值有512、1024、2048和4096。对大多数磁盘来说,本字段的值为512
0x0D10x40每簇扇区数(Sectors Per Cluster) 一个簇中的扇区数。由于FAT16文件系统只能跟踪有限个簇(最多为65536个)。因此,通过增加每簇的扇区数可以支持最大分区数。分区的缺省的簇的大小取决于该 分区的大小。本字段合法的十进制值有 1、2、4、8、16、32、64和128。导致簇大于32KB(每扇区字节数*每簇扇区数)的值会引起磁盘错误和软件错误
0x0e20x0001保留扇区数(Reserved Sector) 第一个FAT开始之前的扇区数,包括引导扇区。本字段的十进制值一般为1
0x1010x02FAT数(Number of FAT)该分区上FAT的副本数。本字段的值一般为2
0x1120x0200根目录项数(Root Entries) 能够保存在该分区的根目录文件夹中的32个字节长的文件和文件夹名称项的总数。在一个典型的硬盘上,本字段的值为512。其中一个项常常被用作卷标号(Volume Label),长名称的文件和文件夹每个文件使用多个项。文件和文件夹项的最大数一般为511,但是如果使用的长文件名,往往都达不到这个数
0x1320x0000小扇区数(Small Sector) 该分区上的扇区数,表示为16位(<65536)。对大于65536个扇区的分区来说,本字段的值为0,而使用大扇区数来取代它
0x1510xF8媒体描述符( Media Descriptor)提供有关媒体被使用的信息。值0xF8表示硬盘,0xF0表示高密度的3.5寸软盘。媒体描述符要用于MS-DOS FAT16磁盘,在Windows 2000中未被使用
0x1620x00FC每FAT扇区数(Sectors Per FAT) 该分区上每个FAT所占用的扇区数。计算机利用这个数和FAT数以及隐藏扇区数来决定根目录在哪里开始。计算机还可以根据根目录中的项数(512)决定该 分区的用户数据区从哪里开始
0x1820x003F每道扇区数(Sectors Per Trark)
0x1A20x0040磁头数(Number of head)
0x1C40x0000003F隐藏扇区数(Hidden Sector) 该分区上引导扇区之前的扇区数。在引导序列计算到根目录和数据区的绝对位移的过程中使用了该值
0x2040x003EF001大扇区数(Large Sector) 如果小扇区数字段的值为0,本字段就包含该FAT16分区中的总扇区数。如果小扇区数字段的值不为0,那么本字段的值为0

 

表8   FAT16分区的扩展BPB字段           
字节位移字段长度(字节)图8对应取值字段名称和定义
0x2410x80物理驱动器号( Physical Drive Number) 与BIOS物理驱动器号有关。软盘驱动器被标识为0x00,物理硬盘被标识为0x80,而与物理磁盘驱动器无关。一般地,在发出一个INT13h BIOS调用之前设置该值,具体指定所访问的设备。只有当该设备是一个引导设备时,这个值才有意义
0x2510x00保留(Reserved) FAT16分区一般将本字段的值设置为0
0x2610x29扩展引导标签(Extended Boot Signature) 本字段必须要有能被Windows 2000所识别的值0x28或0x29
0x2720x52368BA8卷序号(Volume Serial Number) 在格式化磁盘时所产生的一个随机序号,它有助于区分磁盘
0x2B11"NO NAME"卷标(Volume Label) 本字段只能使用一次,它被用来保存卷标号。现在,卷标被作为一个特殊文件保存在根目录中
0x368"FAT16"文件系统类型(File System Type) 根据该磁盘格式,该字段的值可以为FAT、FAT12或FAT16

4.2  关于保留扇区

     在上述FAT文件系统DBR的偏移0x0E处,用2个字节存储保留扇区的数目。所谓保留扇区(有时候会叫系统扇区,隐藏扇区),是指从分区DBR扇区开始的仅为系统所有的扇区,包括DBR扇区。在FAT16文件系统中,保留扇区的数据通常设置为1,即仅仅DBR扇区。而在FAT32中,保留扇区的数据通常取为32,有时候用Partition Magic分过的FAT32分区会设置36个保留扇区,有的工具可能会设置63个保留扇区。
     FAT32中的保留扇区除了磁盘总第0扇区用作DBR,总第2扇区(win98系统)或总第0xC扇区(win2000,winxp)用作OS引导代码扩展部分外,其余扇区都不参与操作系统管理与磁盘数据管理,通常情况下是没作用的。操作系统之所以在FAT32中设置保留扇区,是为了对DBR作备份或留待以后升级时用。FAT32中,DBR偏移0x34占2字节的数据指明了DBR备份扇区所在,一般为0x06,即第6扇区。当FAT32分区DBR扇区被破坏导致分区无法访问时。可以用第6扇区的原备份替换第0扇区来找回数据。

 

http://www.sjhf.net/Article/sjhfdoc/200404/2.html

FAT12文件系统C语言模拟实现及原理讲解 本文介绍了如何使用C语言模拟一个FAT12文件系统并且自制Shell进行交互,同时讲解了系统原理和代码实现。 阅读详情

相关推荐

【FatFs】FAT32文件系统协议总结(理论+实践)

1.前言 本篇文章主要是介绍FAT 格式分区内数据是如何存储的。FAT 分区格式是Microsoft 最早支持的分区格式,依据 FAT 表中每个簇链的所占位数(有关概念,后面会讲到)分为 FAT12、 FAT16、 FAT32 三种格式"变种",但其基本存储方式是相似的。我们在嵌入式系统中使用的最多的是FAT32,所以后面主要介绍的是FAT32。 在介绍 FAT32文件系统前,我们需要先了解一下硬盘基本知识:磁头、磁道、扇区、柱面等,方便后面对FAT32文件系统的理解。 NOTE:本文介绍的很多概念都是

ZHONGCAI0901的博客 9368

MBR、DBR、FAT、FAT 各部分简单介绍

文章目录MBR:主引导记录DBR:操作系统引导记录扇区FDT:文件 目录表FAT:文件系统中的文件分配表 MBR:主引导记录 创建时间:由分区软件(Fdisk/PartitionMagic/Windows 2000/Windows XP安装 工具等)给 硬盘分区时建立的。 功能 :存放硬盘分区信息和引导系统时检查分区。 作用范围:MBR和虚拟MBR控制着整个硬盘的所有分区信息,可定义1~4个不等的分区,作用范围是全局性的。 所占硬盘空间大小:占1个扇区 512字节 位于 :硬盘的0柱面,0磁道,1扇区

流楚丶格念的博客 4611

FAT12、FAT16、FAT32与NTFS的区别与利弊

FAT12、FAT16、FAT32与NTFS的区别与利弊,讲解详细。

文件系统:ExFAT

本文介绍了ExFAT文件系统的结构

ITer之家 8095

dbR:数据库和R

如何从dbms检索数据并将其加载到Rstudio 我用了闪亮的演示来检查 可以找到 尽管在R中完成了一些有关心脏病预测的文件 检查如何使用插入符号包在R中编写几行代码,并同时进行建模

UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount()【已解决】

UserWarning: CUDA initialization: Unexpected error from cudaGetDeviceCount()【已解决】

围炉夜敲的博客 1万+

FAT文件系统结构

FAT文件系统详解 FATFS是一个简单的文件系统,本质上说它是一个巨大的表-簇的链表。是目前最常使用的文件系统之一。 1、FATFS的分类

qq_40040716的博客 3582

基于51单片机的智能花盆灌溉系统设计与实现

本文详细介绍了基于51单片机的智能花盆灌溉系统设计与实现,通过DS18B20温度传感器、土壤湿度传感器和LCD1602显示屏等硬件模块,结合精确的算法控制,实现自动监测与灌溉。系统解决了传统灌溉依赖定时器、缺乏可视化界面的问题,适合上班族、园艺爱好者和植物园工作人员使用,有效提升植物养护效率。

honey的博客 1014

嵌入式开发中文件列表生成的3种方法:从FatFs API到缓存优化

在嵌入式系统开发中,文件系统操作是基础且关键的技术环节,尤其在资源受限的MCU环境下。其核心原理是通过文件系统中间件(如FatFs)提供的标准API,实现对存储设备(如SD卡、SPI Flash)中目录结构的遍历与信息提取。掌握高效的文件列表生成技术,不仅能提升系统调试与维护效率,更是实现固件升级、日志管理、USB大容量存储等高级功能的工程基石。本文聚焦嵌入式场景,深入解析三种主流实现路径:一是直接调用FatFs等成熟库的API,快速可靠;二是结合轻量级缓存策略,平衡性能与资源消耗;三是浅析手动解析文件系统

weixin_29171087的博客 328

史上最强量化工具库 Ta-Lib 从入门到精通,一篇文章就够了!

Ta-Lib 提供的 13 个关键指标,并配上详细的代码示例,确保你看完就能直接上手!🔥。

奔跑的蜗牛 9924

车载以太网测试技术解析

在智能汽车与HiL测试领域,高效解析与模拟车载网络通信是开发验证的关键。ZD-Converter 2000以媒体/介质转换器、嗅探器、拦截器、仿真器四合一的颠覆性设计,成为工程师应对复杂车载以太网测试的瑞士军刀。它支持双路车载/标准以太网智能转换、实时通信嗅探、硬件级数据拦截及ECU通信模拟,更通过串口命令实现全参数远程配置,赋能自动化测试流程。本文将深度解析其核心功能与实战应用场景。

Triv2025的博客 1143

FAT32文件系统结构详解

1. SD卡中FAT32文件系统快速入门 1.1. 理论知识 1.1.1. MBR(Main Boot Record) 主引导记录,占446字节, 为计算机启动后从可启动介质上首先装入内存并且执行的代码,通常用来解释分区结构 1.1.2. DBR(DOS Boot Record) DOS引导记录,为操作系统进入文件系统以后可以访问的第一个扇区,通常用来解释文件系统,DBR是由硬盘的MBR装...

Biao 5万+

【控制模块算法】控制理论的进修之路

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、(经典)自动控制理论【本科阶段】二、现代控制理论【本科阶段】三、最优控制理论【硕士阶段】总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对对控制理论的理解做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、(经典)自动控制理论【本科阶段】 一般控制工程、自动化相关的考研专业课就是自动

qq_35635374的博客 1448

详解FAT12文件系统

目录 1、详解FAT12文件系统 2、实验 1、向虚拟软盘写入文件 2、读取软盘文件系统信息 3、在根目录中查找目标文件 4、读取目标文件到内存 3、小结 1、FAT12文件系统 文件系统 -存储介质上组织文件数据的方法(数据组织的方式) 文件系统示例 -FAT12是DOS时代的早期文件系统 -FAT12结构非常简单,一直沿用于软盘 ...

洋葱汪的博客 2万+

深度学习论文: AnomalyDINO: Boosting Patch-based Few-shot Anomaly Detection with DINOv2

通过将DINOv2模型适应到一次性和少量异常检测中,并专注于工业应用少量异常检测。实验表明,这种方法不仅与现有技术相匹敌,甚至可以在许多设置中超越它们。我们提出的仅视觉方法AnomalyDINO基于补丁相似性,能够实现图像级别的异常预测和像素级别的异常分割。该方法在方法论上很简单,无需训练,因此不需要任何额外的数据进行微调或元学习。

mingo_敏 1904

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: FAT文件系统原理(一)
下一篇: FAT文件系统原理(三)
menuconfig
博客等级 码龄19年 713粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值