精华内容
下载资源
问答
  • 目录你要知道的最少磁盘信息小端模式硬盘组成DBR区保留扇区FAT表项数据区例子FAT表项含义举例短目录举例地址的计算公式例子创建文件流程 你要知道的最少磁盘信息 ...FAT32文件系统由以下四部分组成: DBR...

    本人并非计算机专业,如有用词不准请谅解。按照本文步骤一步步执行即使新手也可完成简单文本文档的创建。

    你需要的东西

    1个格式化好的U盘(不要勾选快速格式化
    1个PC
    winhex.exe完全版

    你最少要知道的信息

    小端模式

    重点内容:数据的高字节保存在内存的高地址
    其余内容可自行查阅百度百科:大小端模式,或以其他渠道学习

    硬盘组成

    FAT32文件系统由以下四部分组成:

    DBR区 保留扇区 FAT区 数据区

    以下的“只读”和“读写”是我们需要的操作,实际上磁盘的任何位置都可以读写。

    DBR区

    (前512个字节)——用于查找FAT1区、FAT2区、数据区开头
    只读

    地址 长度 定义 我的U盘
    0x0B-0x0C 2 每扇区字节数 512
    0x0D 1 每簇扇区数 8
    0x0E-0x0F 2 DOS保留扇区数 3032
    0x10 1 FAT个数 2
    0x24-0x27 4 每FAT扇区数 14868
    0x2C-0x2F 4 根目录首簇号 2

    保留扇区

    读+写

    地址(绝对地址) 长度(字节) 定义
    0x3EC-0x3EF 4 下一可用空簇号

    此区域用于加快索引。
    可以不使用,若要使用则要注意在索引后判断是否真的是空簇(根据FAT表判断)。
    如果是空簇则使用后将其 赋新值
    如果不是空簇则在其簇号之后寻找空簇,使用后 赋新值

    FAT表项

    读+写

    FAT表项 含义
    0x0000 0000 空闲簇,可用簇
    0x0000 0001 保留簇
    0x0000 0002 ~ 0x0FFF FFEF 该簇已用,其值指向下一个簇号
    0x0FFF FFF0 ~ 0X0FFF FFF6 这些值保留,不使用
    0x0FFF FFF7 坏簇,当一个簇中有一个扇区损坏(如物理损坏、病毒感染)时称为坏簇,这个簇将不被FAT32使用
    0x0FFF FFF8 ~ 0x0FFF FFFF 文件的最后一个簇

    注:
    1.FAT32中不存在0号簇与1号簇,2号簇开始才有实际意义(2号簇一般为根目录),上表中分别为0-7号簇的使用信息
    2.在根目录项超过一个簇时,申请一个空簇并把它链到根目录的FAT表上。(先将占满的根目录的FAT信息赋值为空簇的簇号,再将空簇的FAT信息赋值为0x0FFFFFFFF,最后在空簇上写入目录信息)

    数据区

    读+写
    短目录:

    字节偏移 长度(字节) 定义
    0x0-0x7 8 文件名(E5开头则证明已经删除,20表示空)
    0x8-0xA 3 扩展名
    0xB 2 属性
    0xC 1 系统保留
    0xD 1 创建时间的10毫秒位
    0xE-0xF 2 文件创建时间
    0x10-0x11 2 文件创建日期
    0x12-0x13 2 文件最后访问日期
    0x14-0x15 2 文件起始簇号高16位
    0x16-0x17 2 文件最近修改时间
    0x18-0x19 2 文件最近修改日期
    0x1A-0x1B 2 文件起始簇号低16位
    0x1C-0x1F 4 表示文件的长度

    其中0xB代表:

    0xB
    00000000B读写
    00000001B只读
    00000010B隐藏
    00000100B系统
    00001000B卷标
    00010000B子目录
    00100000B归档
    00001111B长目录

    时间

    bit 含义
    高5位 小时
    中6位 分钟
    低5位 2秒

    日期

    bit 含义
    高7位 从1980年开始的年数
    中4位
    低5位

    注:
    1.每两行(32字节)相当于一个短目录
    2.长目录在短目录前面,为32字节的整数倍(手动创建可以不创建长目录,自动创建时会有长目录短目录同时创建)
    3.下一目录必须紧紧挨着上一目录,若出现字头为0x00则系统不再向下读取

    例子

    FAT表项含义举例

    FAT1表
    例如第二行第一组0x0FFFFFFF 代表第4簇(从0开始计数)的使用情况是文件的最后一个簇

    短目录举例

    下图为一个短目录,拆分其个位置含义
    短目录
    2020202020202031->1
    545854->txt
    20->属性:归档
    10->系统保留
    A5->10毫秒位 0xA5=165(1.650s)
    B490->创建时间 10110(22时) 100100(36分) 10000(32秒)
    4F7A->创建日期0100111(1980+39=2019年) 1011(11月) 11010(26日)
    4F7B->最后访问日期(略)
    0000->起始簇号高16位
    7EA3->最近修改时间(略)
    4F7B->最近修改日期(略)
    0006->起始簇号低16位
    0000000C->文件长度:12(在读取时仅读取到文件长度,之后的数据不会读取)

    地址的计算公式

    注:以下数据除“文件起始簇号”外均在“DBR区域”,“文件起始簇号”在“短目录”区域
    FAT1表头地址=保留扇区数×每扇区字节数
    FAT2表头地址=(保留扇区数+FAT1表扇区数)×每扇区字节数
    FAT1表中簇首地址=保留扇区数×每扇区字节数+簇号×4
    FAT2表中簇首地址=(保留扇区数+FAT1表扇区数)×每扇区字节数+簇号×4
    数据区偏移=(保留扇区数+ FAT表扇区数× FAT表个数+(根目录首簇号-2)×每簇扇区数)×每扇区字节数
    【当根目录首簇号为2时,数据区开始即为根目录】
    文件起始地址偏移=(保留扇区数+ FAT表扇区数× FAT表个数+(文件起始簇号-2)×每簇扇区数)×每扇区字节数

    例子

    例子:
    FAT1表地址=3032×512=0x17B000
    FAT1表中第5簇首地址=3032×512+4×5=0x17B014
    FAT1表
    FAT2表地址=(3032+14868)×512=0x8BD800
    FAT2表中第5簇首地址=3032×512+4×5=0x8BD814
    FAT2表
    根位置=(3032+14868×2+(2-2)×8)×512=0x1000000
    根目录位置/数据区开始位置
    文件位置=(3032+14868×2+(6-2)×8)×512=0x1004000
    文件位置

    创建文件流程

    在这里插入图片描述

    例子

    例1:在U盘中写一个文件大小小于一簇的txt(写到第6簇)

    写之前:
    保留扇区:
    在这里插入图片描述
    (第六簇是空的)
    FAT1/2扇区(两个扇区内容完全相同):
    在这里插入图片描述
    (第六簇确实是空的)
    在这里插入图片描述
    根目录
    在这里插入图片描述
    文件簇位置
    在这里插入图片描述
    在这里插入图片描述
    写之后
    保留扇区:
    在这里插入图片描述
    磁盘重新装载,此处空余簇号并没有改变,证明其值不会自动修改!
    FAT1/2扇区(两个扇区内容完全相同):
    在这里插入图片描述
    根目录
    在这里插入图片描述
    文件簇位置
    在这里插入图片描述
    txt文件
    在这里插入图片描述

    例2:在U盘中写一个文件大小大于一簇的txt(写到第7-8簇).

    写之前与上方写之后相同。
    写之后
    保留扇区:
    在这里插入图片描述
    磁盘重新装载,此处空余簇号并没有改变,证明其值不会自动修改!
    FAT1/2扇区(两个扇区内容完全相同):
    在这里插入图片描述
    根目录
    在这里插入图片描述
    文件簇位置
    (第七簇)
    在这里插入图片描述
    (第八簇)
    在这里插入图片描述
    txt文件
    在这里插入图片描述

    Q&A

    Q1:数据区不区分目录和数据,文件如何分辨什么地方为目录区?
    Q2:目录区只分配第2簇,用完了怎么办?
    A1&A2:理解系统工作顺序比较重要

    系通工作顺序如下
    1.通过DBR区获取根目录簇号等信息
    2.计算根目录区地址
    3.计算根目录区簇号在FAT表中的位置
    4.如果FAT表中该簇号为结束信息,则目录索引完毕;如果不是结束信息,则FAT表指向的簇号也为目录,直到FAT表中为0x0FFFFFFF。
    5.每找到一簇,读取一簇的目录

    举例
    1.通过DBR区获取根目录是第2簇
    2.根目录地址为:0x1000000
    3.根目录在FAT表中第2簇的地址为:0x17B008
    4.根目录在FAT表中第2簇信息为0x00000008,找到第八簇,第八簇FAT表地址为0x17B030,数据为0x0FFFFFFF
    5.目录信息在第二簇和第八簇,地址为0x1000000与0x1006000

    展开全文
  • FAT包括FAT16和FAT32,FAT16、FAT32、NTFS是目前最常见的三种磁盘文件系统。 一、关于FAT16和FAT32 FAT16:我们以前用的DOS、Windows 95都使用FAT16文件系统,现在常用的Windows 98/2000/XP等系统均支持F...

    FAT(File Allocating Table的缩写)是文件分配表的意思。对我们来说,它的意义在于对硬盘分区的管理。FAT包括FAT16和FAT32,FAT16、FAT32、NTFS是目前最常见的三种磁盘文件系统。

    一、关于FAT16和FAT32 FAT16:我们以前用的DOS、Windows 95都使用FAT16文件系统,现在常用的Windows 98/2000/XP等系统均支持FAT16文件系统。它最大可以管理大到2GB的分区,但每个分区最多只能有65525个簇(簇是磁盘空间的配置单位)。随着硬盘或分区容量的增大,每个簇所占的空间将越来越大,从而导致硬盘空间的浪费。 FAT32:随着大容量硬盘的出现,从Windows 98开始,FAT32开始流行。它是FAT16的增强版本,可以支持大到2TB(2048G的分区。FAT32使用的簇比FAT16小,从而有效地节约了硬盘空间。

    二、FAT16和FAT32的比较 在推出FAT32文件系统之前,通常PC机使用的文件系统是FAT16。像基于MS-DOS,Win 95等系统都采用了FAT16文件系统。在Win 9X下,FAT16支持的分区最大为2GB。我们知道计算机将信息保存在硬盘上称为“簇”的区域内。使用的簇越小,保存信息的效率就越高。在FAT16的情况下,分区越大簇就相应的要增大,存储效率就越低,势必造成存储空间的浪费。并且随着计算机硬件和应用的不断提高,FAT16文件系统已不能很好地适应系统的要求。在这种情况下,推出了增强的文件系统FAT32。同FAT16相比,FAT32主要具有以下特点: 1. 同FAT16相比FAT32最大的优点是可以支持的磁盘大小达到2TB(2047GB),但是不能支持小于512MB的分区。基于FAT32的Win 2000可以支持分区最大为32GB;而基于 FAT16的Win 2000支持的分区最大为4GB。 2. 由于采用了更小的簇,FAT32文件系统可以更有效率地保存信息。如两个分区大小都为2GB,一个分区采用了FAT16文件系统,另一个分区采用了 FAT32文件系统。采用FAT16的分区的簇大小为32KB,而FAT32分区的簇只有4KB的大小。这样FAT32就比FAT16的存储效率要高很多,通常情况下可以提高15%。 3. FAT32文件系统可以重新定位根目录和使用FAT的备份副本。另外FAT32分区的启动记录被包含在一个含有关键数据的结构中,减少了计算机系统崩溃的可能性。

    三、关于 NTFS NTFS:微软Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式。随着以NT为内核的Windows 2000/XP的普及,很多个人用户开始用到了NTFS。NTFS也是以簇为单位来存储数据文件,但NTFS中簇的大小并不依赖于磁盘或分区的大小。簇尺寸的缩小不但降低了磁盘空间的浪费,还减少了产生磁盘碎片的可能。NTFS支持文件加密管理功能,可为用户提供更高层次的安全保证。

    四、NTFS 的四大优点 1.具备错误预警的文件系统 在NTFS分区中,最开始的16个扇区是分区引导扇区,其中保存着分区引导代码,接着就是主文件表(Master File Table,以下简称MFT),但如果它所在的磁盘扇区恰好出现损坏,NTFS文件系统会比较智能地将MFT换到硬盘的其他扇区,保证了文件系统的正常使用,也就是保证了Windows的正常运行。而以前的FAT16和FAT32的FAT(文件分配表)则只能固定在分区引导扇区的后面,一旦遇到扇区损坏,那么整个文件系统就要瘫痪。 但这种智能移动MFT的做法当然并非十全十美,如果分区引导代码中指向MFT的部分出现错误,那么NTFS文件系统便会不知道到哪里寻找MFT,从而会报告“磁盘没有格式化”这样的错误信息。为了避免这样的问题发生,分区引导代码中会包含一段校验程序,专门负责侦错。
    2.文件读取速度更高效! 恐怕很多人都听说NTFS文件系统在安全性方面有很多新功能,但你可否知道:NTFS在文件处理速度上也比FAT32大有提升呢? 对DOS略知一二的读者一定熟悉文件的各种属性:只读、隐藏、系统等。在NTFS文件系统中,这些属性都还存在,但有了很大不同。在这里,一切东西都是一种属性,就连文件内容也是一种属性。这些属性的列表不是固定的,可以随时增加,这也就是为什么你会在NTFS分区上看到文件有更多的属性. NTFS文件系统中的文件属性可以分成两种:常驻属性和非常驻属性,常驻属性直接保存在MFT中,像文件名和相关时间信息(例如创建时间、修改时间等)永远属于常驻属性,非常驻属性则保存在MFT之外,但会使用一种复杂的索引方式来进行指示。如果文件或文件夹小于1500字节(其实我们的电脑中有相当多这样大小的文件或文件夹),那么它们的所有属性,包括内容都会常驻在MFT中,而MFT是Windows一启动就会载入到内存中的,这样当你查看这些文件或文件夹时,其实它们的内容早已在缓存中了,自然大大提高了文件和文件夹的访问速度。

     

    五、FAT 和NTFS支持的操作系统 FAT16: windows 95/98/me/nt/2000/xp unix,linux,dos FAT32 :windows 95/98/me/2000/xp NTFS: windows nt/2000/xp 只有Windows NT/2000/XP才能识别NTFS系统,Windows 9x/Me以及DOS等操作系统都不能支持、识别NTFS格式的磁盘。由于DOS系统不支持NTFS系统,所以最好不要将C:盘制作为NTFS系统,这样在系统崩溃后便于在DOS系统下修复。 Windows 2000/XP在文件系统上是向下兼容的,它可以很好地支持FAT16/FAT32和NTFS,其中NTFS是Windows NT/2000/XP专用格式,它能更充分有效地利用磁盘空间、支持文件级压缩、具备更好的文件安全性。如果你只安装Windows 2000/XP,建议选择NTFS文件系统。如果多重引导系统,则系统盘(C盘)必须为FAT16或FAT32,否则不支持多重引导。当然,其他分区的文件系统可以为NTFS。

    转载于:https://www.cnblogs.com/cksis/archive/2012/03/28/2421487.html

    展开全文
  • 核心提示:格式化的意思是数据全删,就是把目标盘变成一张空白的fat32格式的盘。 WIN下使用方法(内含MAC版本): 1、管理员身份打开guiformat-x64.Exe或guiformat.exe 2、Dirve 选择需要格式化的硬盘/U盘的盘符:...
  • SD卡中FAT32文件格式快速入门(图文详细介绍)

    万次阅读 多人点赞 2013-05-09 11:52:21
    说明: MBR:MasterBootRecord(主引导记录) DBR:DOSBootRecord(引导扇区) ...硬件:本文SD卡为Kingston4GB,FAT32格式,簇大小4KB,每扇区512字节。 SD Specification Standards:https://www.sdc...

    说明:

    MBR :Master Boot Record ( 主引导记录) 

    DBR :DOS Boot Record ( 引导扇区) 

    FAT :File Allocation Table ( 文件分配表) 

    硬件:本文SD卡为Kingston 4GB,FAT32格式,簇大小4KB,每扇区512字节。

    SD Specification Standards: https://www.sdcard.org/downloads/pls/

    第一章 硬盘结构与SD卡结构

    1.1 硬盘介绍

    1.1硬盘结构

     

    如果你熟悉硬盘结构跳过本节。下图是硬盘的结构,如果你只是为了学习SD卡FAT32文件系统的话,这里你只需要注意硬盘排序结构:主引导记录(MBR)—引导扇区—数据—引导扇区—数据。

    图1

     

    1.2 MBR分析

     

    MBR(Main Boot Record 主引导记录区)放置在硬盘物理地址0的地方。总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外64个字节交给了 DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。DPT由4个分区表组成,每个16字节。下图中以以硬盘的MBR图,粉红色为硬盘分区表。

    图2

     

    对于我们来说,更关注硬盘分区表表中红色区域:下图为硬盘分区表详细说明 。如果要对SD卡、U盘等分多个区,DPT的内容就表示各个区的偏移地址和大小。

    起始地址

    字节数

    描述

    0x1BE

    1

    可引导标志,0x00不可引导,0x80可引导

    0x1BF~0x1C1

    3

    分区起始CHS地址(CHS=磁头、柱面、扇区),起始地址

    0x1C2

    1

    分区类型

    0x1C3~0x1C5

    3

    分区结束CHS地址

    0x1C6

    4

    从磁盘开始到该分区开始的偏移量(分区起始LBA地址Little-endian顺序)

    0x1CA

    4

    总扇区数(Little-endian顺序)

     

    图3

     

     

    SD结构

    SD卡没有分区,默认就是一个分区。首先用WinHex文件打开SD所在的盘符,显示如下图:

    图4 

    ① 非分区空间(红线所示): 起始扇区0,我认为这个分区就是硬盘上的MBR所在区域,

    打开后如下图所示,也可以称为SD卡的MBR区域。

    图5

     

    根据表1知道:

    红线区域(00002000)为下个分区的扇区地址,即第8192扇区,见图3分区1的起始扇区。

    蓝线区域(00760C00)为SD卡总的扇区个数,我们可以计算一下:

         0x760C00 *512(每扇区字节)= 3960995840 (字节),与实际大小基本一样。

     

    ② 分区1(蓝线所示):起始扇区8192.

     

    ③ 剩余扇区    : 才疏学浅,我不知道干嘛的,呵呵

    1.3 SD卡存储结构

    由此可知SD卡文件系统并不是处在整个SD卡最开始的地方,它处在MBR所处的保留区之后,于是我们可以对使用FAT32文件系统的SD卡整体布局给出如下图示。

    图6

     

     

     

    第二章 FAT32文件系统介绍

    2.1 FAT文件系统简介

    FAT(File Allocation Table,文件分配表)文件系统是windows操作系统所使用的一种文件系统,它的发展过程经历了FAT12、FAT16、FAT32三个阶段。FAT文件系统用“簇”作为数据单元。一个“簇”由一组连续的扇区组成,簇所含的扇区数必须是2的整数次幂。簇的最大值为64个扇区,即32KB。所有簇从2开始进行编号,每个簇都有一个自己的地址编号。用户文件和目录都存储在簇中。 本文每簇4KB大小。

    FAT文件系统的数据结构中有两个重要的结构:文件分配表和目录项:

    文件分配表:文件和文件夹内容储存在簇中,如果一个文件或文件夹需要多余一个簇的空间,则用FAT表来描述,如何找到另外的簇。FAT结构用于指出文件的下一个簇,同时也说明了簇的分配状态。FAT12、FAT16、FAT32这三种文件系统之间的主要区别在与FAT项的大小不同。 

    目录项:FAT文件系统的每一个文件和文件夹都被分配到一个目录项,目录项中记录着文件名、大小、文件内容起始地址以及其他一些元数据。 

    在FAT文件系统中,文件系统的数据记录在“引导扇区中(DBR)”中。引导扇区位于整个文件系统的0号扇区,是文件系统隐藏区域(也称为保留区)的一部分,我们称其为DBR(DOS Boot Recorder——DOS引导记录)扇区,DBR中记录着文件系统的起始位置、大小、FAT表个数及大小等相关信息。在FAT文件系统中,同时使用“扇区地址”和“簇地址”两种地址管理方式。这是因为只有存储用户

    数据的数据区使用簇进行管理(FAT12和FAT16的根目录除外),所有簇都位于数据区。其他文件系统管理数据区域是不以簇进行管理的,这部分区域使用扇区地址进行管理。文件系统的起始扇区为0号扇区。 

    2.2 FAT32文件系统结构

    FAT文件系统整体分布如上图 存储器文件结构图 所示,有:

    【1深绿色】保留区含有一个重要的数据结构——系统引导扇区(DBR)。FAT12、FAT16的保留区通常只有一个扇区,而FAT32的保留扇区要多一些,除0号扇区外,还有其他一些扇区,其中包括了DBR的备份扇区。 

    【2黄色】  FAT区由来年各个大小相等的FAT表组成——FAT1、FAT2,FAT2紧跟在FAT1之后。 

    【3灰色】  FAT12、FAT16的根目录虽然也属于数据区,但是他们并不由簇进行管理。也就是说FAT12、FAT16的根目录是没有簇号的,他们的2号簇从根目录之后开始。而FAT32的根目录通常位于2号簇。

    2.2.1 保留区(深绿色区域)

    FAT32文件系统的开始部分有一个由若干个扇区组成的保留区,保留区的大小会记录在DBR扇区中,比较常见的为32、34或38个扇区。如上图:由DBR中)0x0e和0x0f两个地址的数值决定,记得是小端模式,即N的值。 

    2.2.1.1 引导扇区(DBR)

    【大小】:512字节;

    对读写FAT文件系统来说常用的就图中红色划线部分,48个字节。其他的均为一些标注信息。想了解具体的定义请看附录表。

    图7

    【1】0x00~0x02:3字节,跳转指令。 

    【2】0x03~0x0A:8字节,文件系统标志和版本号,这里为MSDOC5.0。 

    【3】0x0B~0x0C:2字节,每扇区字节数,512(0X02 00)。 

    【4】0x0D~0x0D:1字节,每簇扇区数,8(0x08)。 

    【5】0x0E~0x0F:2字节,保留扇区数,38(0x00 26,符合FAT1起始地址为38扇区。 

     

    【6】0x10~0x10:1字节,FAT表个数,2。 

    【7】0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数; 

    【8】0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。 

    【9】0x15~0x15:1字节,哪种存储介质,0xF8标准值,可移动存储介质,常用的 0xF0。 

    【10】0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。

    【11】0x18~0x192字节,每磁道扇区数,只对于有“特殊形状”(由磁头和柱面每 分割为若干磁道)的存储介质有效,63(0x00 3F)。 

    【12】0x1A~0x1B:2字节,磁头数,只对特殊的介质才有效,255(0x00 FF)。 

    【13】0x1C~0x1F:4字节,EBR分区之前所隐藏的扇区数,8192(0x00 00 20 00,与MBR中地址0x1C6开始的4个字节数值相等

     

    【14】0x20~0x23:4字节,文件系统总扇区数,7736320(0x 00 76 0C 00),7736320 *  512 = 3960995840   3.67GB

    【15】0x24~0x27:4字节,每个FAT表占用扇区数,7541(0x 00 00 1D 75)。 

    【16】0x28~0x29:2字节,标记,此域FAT32 特有。 

    【17】0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有。 

    【18】0x2C~0x2F:4字节,根目录所在第一个簇的簇号,2。(虽然在FAT32文件系统 下,根目录可以存放在数据区的任何位置,但是通常情况下还是起始于2号簇) 

     

    【19】0x30~0x31:2字节,FSINFO(文件系统信息扇区)扇区号1,该扇区为操作 系统提供关于空簇总数及下一可用簇的信息。 

    【20】0x32~0x33:2字节,备份引导扇区的位置。备份引导扇区总是位于文件系统 的6号扇区。 

    【21】0x34~0x3F:12字节,用于以后FAT 扩展使用。 

     

    【22】0x40~0x40:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不

    同的位置而已。

      【23】0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不

    同的位置而已 。 

    【24】0x42~0x42:1字节,扩展引导标志,0x29。与FAT12/16 的定义相同,只不过 两者位于启动扇区不同的位置而已

    【25】0x43~0x46:4字节,卷序列号。通常为一个随机值。 

    【26】0x47~0x51:11字节,卷标(ASCII码),如果建立文件系统的时候指定了卷 标,会保存在此。 

    【27】0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。 

    ★【28】0x5A~0x1FD:90~509共420字节,未使用。该部分没有明确的用途。 

    【29】0x1FE~0x1FF:签名标志“55 AA”。 

    说明:引导代码

    FAT文件系统将引导代码与文件形同数据结构融合在一起,FAT32文件系统引导扇区的512字节中,90~509字节为引导代码,而FAT12/16则是62~509字节为引导代码。同时,FAT32还可以利用引导扇区后的扇区空间存放附加的引导代码。一个FAT卷即使不是可引导文件文件系统,也会存在引导代码。

    2.2.1.2 FSInfo信息分区

    FAT32在保留区中增加了一个FSINFO扇区,用以记录文件系统中空闲簇的数量以及下一可用簇的簇号等信息,以供操作系统作为参考。FSINFO信息扇区一般位于文件系统的1号扇区,结构非常简单。FSINFO信息扇区结构。

    图8

     

    【1】0x00~0x03: 4个字节,扩展引导标志“0x52526141”。 

    【2】0x04~0x1E3:480个字节,未使用,全部置0。 

    【3】0x1E4~0x1E7: 4个字节,FSINFO签名“0x72724161”。 

    【4】0x1E8~0x1EB: 4个字节,文件系统的空簇数,964466(0x00 0E B7 72)。 

    【5】0x1EC~0x1EF: 4个字节,下一可用簇号(0x 00 00 00 15)。 

    【6】0x1F0~0x1FD: 14个字节,未使用。 

    【7】0x1FE~0x1FF: 2个字节,“55 AA”标志。 

     

    温馨提示:通常情况下,文件系统的2号扇区结尾也会被设置“55 AA”标志。6号扇区也会有一个引导扇区的备份,相应的,7号扇区应该是一个备份FSINFO信息扇区8号扇区可以看做是2号扇区的备份

    2.2.2 文件分区FAT表(黄色区域)

    紧跟在保留分区后面的是FAT区,其由两个完全相同的FAT(File Allocation Table, 文件分配表)表单组成,FAT文件系统的名字也是因此而来。FAT 表(File Alloacation Table)是一组与数据簇号对应的列表。FAT2紧跟在FAT1之后,它的位置可以通过FAT1的位置加上FAT表的大小扇区数计算出来。

    2.2.2.1 文件系统概述

    文件系统分配磁盘空间按簇来分配。因此,文件占有磁盘空间时,基本单位不是字节而是簇,即使某个文件只有一个字节,操作系统也会给它分配一个最小单元:即一个簇。对于大文件,需要分配多个簇。同一个文件的数据并不一定完整地存放在磁盘中一个连续地区域内,而往往会分若干段,像链子一样存放。这种存储方式称为文件的链式存储。为了实现文件的链式存储,文件系统必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继的下一个簇的簇号,对于文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的,FAT 表对应表项中记录着它所代表的簇的有关信息:诸如是空,是不是坏簇,是否是已经是某个文件的尾簇等。

     

    v 对于文件系统来说,FAT表有两个重要作用:描述簇的分配状态以及标明文件或目录的下一簇的簇号。 

    v 通常情况下,一个FAT把文件系统会有两个FAT表,但有时也允许只有一个FAT表,FAT表的具体个数记录在引导扇区的偏移0x10字节处。 

    v 由于FAT区紧跟在文件系统保留区后,所以FAT1在文件系统中的位置可以通过引导记录中偏移0x0E~0x0F字节处的“保留扇区数”得到,如存储器结构体图中M值。 

     

    2.2.2.2 FAT表分析说明

     

    FAT32中每个簇的簇地址是有32bit(4个字节),FAT表中的所有字节位置以4字节为单位进行划分,并对所有划分后的位置由0进行地址编号。0号地址与1号地址被系统保留并存储特殊标志内容。从2号地址开始,每个地址对应于数据区的簇号,FAT表中的地址编号与数据区中的簇号相同。我们称FAT表中的这些地址为FAT表项,FAT表项中记录的值称为FAT表项值。 

    当文件系统被创建,也就是进行格式化操作时,分配给FAT区域的空间将会被清空,在FAT1与FAT2的0号表项与1号表项写入特定值。由于创建文件系统的同时也会创建根目录,也就是为根目录分配了一个簇空间,通常为2号簇,与之对应的2号FAT表项记录为2号簇,被写入一个结束标记。

    几点说明:

    Ø 由于簇号起始于2号,所以FAT表项的0号表项与1号表项不与任何簇对应。FAT32的0号表项值总是“F8FFFF0F”。

    Ø 1号表项可能被用于记录脏标志,以说明文件系统没有被正常卸载或者磁盘表面存在错误。不过这个值并不重要。正常情况下1号表项的值为“FFFFFFFF”或“FFFFFF0F”。

    Ø 如果某个簇未被分配使用,它对应的FAT表项内容为0;

    Ø 当某个簇已被分配使用,则它对应的FAT表项内的FAT表项值也就是该文件的下一个存储位置的簇号。如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记,对于FAT32而言,代表文件结束的FAT表项值为0x0FFFFFFF。

    Ø 如果某个簇存在坏扇区,则整个簇会用0xFFFFFF7标记为坏簇,这个坏簇标记就记录在它所对应的FAT表项中。

    Ø 在文件系统中新建文件时,如果新建的文件只占用一个簇,为其分配的簇对应的FAT表项将会写入结束标记。如果新建的文件不只占用一个簇,则在其所占用的每个簇对应的FAT表项中写入为其分配的下一簇的簇号,在最后一个簇对应的FAT表象中写入结束标记。

    Ø 新建目录时,只为其分配一个簇的空间,对应的FAT表项中写入结束标记。当目录增大超出一个簇的大小时,将会在空闲空间中继续为其分配一个簇,并在FAT表中为其建立FAT表链以描述它所占用的簇情况。

     

    2.2.2.3 FAT表示例

     

    【0号表项】:0x0FFFFFF8;FAT表起始固定标识

    【1号表项】:0xFFFFFFFF;不是用,默认值

    【2号表项】:0x0FFFFFFF;根目录所在簇,

    紫色的为3号表项,绿色的为4号表项,以此类推。注意:0和1号表项均不与实际的物理地址对应,2号表项开始才与物理地址对应。2号表项物理地址为FAT2表后紧跟着的那个簇!3号在2号表项紧跟着的一个簇。

    计算:FAT所占扇区数 7541(0x1D75);FAT2起始扇区为38+7541=7579;根目录起始扇区在7579 + 7541 = 15120。记得本文8个扇区为一个簇,即4K(0x1000),簇是系统分配内存的最小单元。

    如图表中的起始地址对比,发现根目录起始地址刚好在15120,所以FAT表中0和1号表项没有对应物理地址!

    图9 

    我将SD格式化,新建了一个test.txt的文本文件,大小为8.2kB。如下图:

    图10 

    我们来分析上图:

    在图中可以看出,test.txt文件起始簇为15128,这个地址是我们根目录(2号簇)后的一个簇,所以test.txt文件起始簇是3号簇,也就是3号表项(FAT表中表项值与簇号对应)。

    【1】:2号表项为根目录,即2号簇。

    【2】:3号表项为-0x00 00 00 04,test文件的下一簇号在4号表项,查看4号表项。

    【3】:4号表项为-0x00 00 00 05,test文件下一簇号在5号表项,查看5号表项。

    【4】:5号表项为-0x0F FF FF FF,结束符号。说明文件在5号簇时就存储完毕。

     

    2.2.3 数据区(灰色区域)

    数据区时真正用于存放用户数据的区域。数据区紧跟在FAT2之后,被划分成一个个的簇。所有的簇从2开始进行编号,也就是说,2号簇的起始位置就是数据区的起始位置。 

    2.2.3.1 根目录

    FAT表示例中,根目录截图:

     

    图11

    虽然原则上FAT32允许根目录位于数据区的任何位置,但通常情况下它都位于数据区起始扇区,2号簇,可以在DBR偏移地址0x2C~0x2F查看。在FAT文件系统中,先要寻找数据区的第一簇(即2号簇)的位置,它不是位于文件系统开始处,而是位于数据区。从前面的学习知道,在数据区前面是保留区域和FAT区域,在前面还有MBR区域,区域都不使用FAT表进行管理。因此,数据区以前的区域只能使用扇区地址,而无法使用簇地址。

    其实在2.2.2.3节,FAT表示例中我们就已经计算过其实地址(15128),注意这个地址不是物理地址哦,只是在FAT文件区域中一个相对地址!因为在之前还有MBR保留区域!

    【保留区域大小(绿色部分)】:DBR偏移地址0x0E~0x0F38(0x26),

    FAT表个数】:DBR偏移地址0x10开始2字节2个,

    每个FAT表区数】:DBR偏移地址0x24~0x277541(0x 00 00 1D 75

    说明:以上值均参见2.2.1.1节

     

    【计算公式】:

         数据区起始扇区号 = 保留扇区数 + 每个FAT表大小扇区数 × FAT表个数

    示例】: 数据区起始扇区号 = 38 + 7541*2 = 15120 

    为了避免根目录被更改,也可以用下面的计算公式计算出根目录扇区:

        根目录起始扇区=保留扇区数+FAT×2+(根目录起始簇-2)x每簇的扇区数

    说明:1、如果要得到物理地址,需要加上MBR保留区域大小。

    2.2.3.2 根目录的短文件目录项定义

    目录所在的扇区,都是以32 Bytes划分为一个单位,每个单位称为一个目录项(Directory 

    Entry ),即每个目录项的长度都是32 Bytes 。根目录由若干个目录项组成,一个目录项占用32个字节,可以是长文件名目录项、文件目录项、子目录项等。32字节的具体定义如下图:

    图12

    示例:

    图13

    特别关注的参数说明:

    【1】:文件或者文件夹存储的起始簇号,上图中紫色区域,偏移地址:0x14-0x15(高16为)和0x1A-0x1B(低16位)0x 00 00 00 03 ,表示这个文件存储在3号簇的位置,在FAT表中为3号表项。

    【2】:文件大小:偏移地址0x1C-0x1F0x 00 00 20 EE(8430字节);

    【3】文件属性:偏移地址0x0B-0x0B,0x20 ,归档。

    其他说明:

    【0】子目录存储在数据区

    【1】文件名的第一个字节,为0xE5,表示该项已被删除。

    【2】名字为0x2E(“.”),表示当前目录。

     

    图14

    【3】名字为0x2E 0x2E(“. .”),表示上一级目录。

     

    2.2.3.3 长文件目录定义

    图15

     

    点击链接下载本文的pdf版:http://download.csdn.net/detail/mjx91282041/5348397

     

    展开全文
  • FAT32文件系统格式详解

    千次阅读 2018-11-28 16:25:56
    FAT32 文件系统 在FAT16中,采用了16bit宽的簇地址, 32bit宽扇区地址, 但由于规定每簇最大的容量不超过102432. 所以FAT16文件系统的容量也就限制到了2^16102432,大约2.1GB的空量,并且实际还达不到这个值。 FAT32...

    FAT32 文件系统
    在FAT16中,采用了16bit宽的簇地址, 32bit宽扇区地址, 但由于规定每簇最大的容量不超过1024 * 32. 所以FAT16文件系统的容量也就限制到了2^16 * 1024 * 32,大约2.1GB的空量,并且实际还达不到这个值。
    FAT32文件系统使用了32bit宽的簇地址,所以称为FAT32。但在微软件的文件系统中只使用了低28位,最大容量为2^28 * 1024 * 32,约8.7TB的空量.
    最大单文件大小: 4 GB (Fat16分区是2 GB )
    最大文件数量: 268,435,437
    一个FAT文件系统包括四个不同的部分。
    在这里插入图片描述
    图片1
    在这里插入图片描述
    图片2

    SD卡为例:
    在这里插入图片描述
    图片3
    MBR:Master boot record
    主引导记录,占446字节, 为计算机启动后从可启动介质上首先装入内存并且执行的代码。
    在FAT文件系统中,同时使用“扇区地址”和“簇地址”两种地址管理方式。这是因为只有存储用户数据的数据区使用簇进行管理(FAT12和FAT16的根目录除外),所有簇都位于数据区。其他文件系统管理数据区域是不以簇进行管理的,这部分区域使用扇区地址进行管理。文件系统的起始扇区为0号扇区。
    FAT32文件系统的DBR有5部分组成,分别为跳转指令,OEM代号,BPB,引导程序和结束标志。如下图是一个完整的FAT32文件系统的DBR。
    在这里插入图片描述
    图片4
     MBR:
    偏移(字节) 长度(字节) 说明
    0x00 3 跳转指令(跳过开头一段区域)
    0x03 8 OEM名称常见值是MSDOS5.0.
    0x0b 2 每个扇区的字节数。
    取值只能是以下几种:512,1024,2048或是4096。设为512会取得最好的兼容性
    0x0d 1 每簇扇区数。 其值必须中2的整数次方,同时还要保证每簇的字节数不能超过32K
    0x0e 2 保留扇区数(包括启动扇区)此域不能为0,FAT12/FAT16必须为1,FAT32的典型值取为32
    0x10 1 文件分配表数目。 NumFATS,任何FAT格式都建议为2
    0x11 2 最大根目录条目个数, 0 for fat32, 512 for fat16
    0x13 2 总扇区数(如果是0,就使用偏移0x20处的4字节值)0 for fat32
    0x15 1 介质描述 0xF8 单面、每面80磁道、每磁道9扇区
    0xF9 双面、每面80磁道、每磁道9扇区
    0xFA 单面、每面80磁道、每磁道8扇区
    0xFB 双面、每面80磁道、每磁道8扇区
    0xFC 单面、每面40磁道、每磁道9扇区
    0xFD 双面、每面40磁道、每磁道9扇区
    0xFE 单面、每面40磁道、每磁道8扇区
    0xFF 双面、每面40磁道、每磁道8扇区
    无沦此域写入什么数值,同时也必须在FAT[0]的低字节写入相同的值,这是因为早期的MSDOS 1.x使 用该字节来判定是何种存储介质
    0x16 2 每个文件分配表的扇区(FAT16),0 for fat32
    0x18 2 每磁道的扇区, 0x003f
    0x1a 2 磁头数,0xff
    0x1c 4 隐藏扇区, 与MBR中地址0x1C6开始的4个字节数值相等
    0x20 4 总扇区数(如果超过65535使用此地址,小于65536参见偏移0x13,对FAT32,此域必须是非0)
    0x24 4每个FAT表占用扇区数。(FAT32特有)
    0x24 1 物理驱动器个数(FAT16),由操作系统决定
    0x25 1 当前磁头(FAT16),格式化FAT卷时必须设为0
    0x26 1 签名(FAT16),扩展引导标记(0x29)用于指明此后的3个域可用
    0x27 4 ID (FAT16)
    0x28 2 Flags (FAT32特有)
    Bits0-3:不小于0的FAT(active FAT)数目,只有在镜像(mirrorig)禁止时才有效。
    Bits 4-6: 保留
    Bits 7: 0,FAT实时镜像到所有的FAT表中,1 ,只有一个活动的FAT表。这个表就是Bits0-3所指定的
    Bits8-15:保留
    0x2a 2 版本号 (FAT32特有)
    0x2c 4 根目录起始簇 (FAT32),一般为2
    0x2b 11 卷标(非FAT32)
    0x30 2 FSInfo 扇区 (FAT32) bootstrap
    0x32 2 启动扇区备份 (FAT32)
    如果不为0,表示在保留区中引导记录的备数据所占的扇区数,通常为6同时不建议使用6以外的其他数值
    0x34 2 保留未使用 (FAT32) 此域用0填充
    0x36 8 FAT文件系统类型(如FAT、FAT12、FAT16)含"FAT"就是PBR,否则就是MBR
    0x3e 2 操作系统自引导代码
    0x40 1 BIOS设备代号 (FAT32)
    0x41 1 未使用 (FAT32)
    0x42 1 标记 (FAT32)
    0x43 4 卷序号 (FAT32)
    0x47 11 卷标(FAT32)
    0x52 8 FAT文件系统类型(FAT32)
    0x1be 64 partitions table, DOS_PART_TBL_OFFSET
    0X1BE ~0X1CD 16 talbe entry for Partition 1
    0X1CE ~0X1DD 16 talbe entry for Partition 2
    0X1DE ~0X1ED 16 talbe entry for Partition 3
    0X1EE ~0X1FD 16 talbe entry for Partition 4
    talbe entry for Partition:
    Offse length content
    0 1 boot indicator(80h=active)
    1 3 start chs , (Cylinder, Head, Sector )
    4 1 type descriptor(0x0b is 32bit fat,0x83 is ext2/3/4 )
    5 3 end chs
    8 4 start sector
    12 4 partition size(unit is sectors)
    0x1FE 2 扇区结束符(0x55 0xAA) 结束标志:MBR的结束标志与DBR,EBR的结束标志相同。
    BPB(BIOS Parameter Block)表,描述逻辑盘结构组成,
    包含隐藏扇区数目、FAT扇区数、FAT拷贝数、硬盘磁头总数、根目录表项最大值等。
      FAT32文件系统的扩展BPB区位于DBR内,从地址0x00B~0x052都是BPB的范围。
    0X5A~0X1FD字节为引导代码. 对于没有安装操作系统的分区来说这段程序是没有用处的。

     Decoding CHS Values:
    在这里插入图片描述
    图片5
    ref: https://thestarman.pcministry.com/asm/mbr/PartTables.htm
    example:
    在这里插入图片描述
    图片6
    则LBA = 877 * 254 * 63 -1; LBA是从0开始的。

     引导扇区DBR DOS boot record
    DOS引导记录,为操作系统进入文件系统以后可以访问的第一个扇区, 512字节,通常只用前48个字节,与MBR格式相同。MBR中0x1c6~0x1c9所指的内容就是DBR的起始地址.
    FAT32文件系统在DBR的保留扇区中安排了一个文件系统信息扇区,用以记录数据区中空闲簇的数量及下一个空闲簇的簇号,该扇区一般在分区的1号扇区,也就是紧跟着DBR后的一个扇区
    在这里插入图片描述
    图片7

    1,DBR与BPB 实例如下表:
    在这里插入图片描述
    图片8
    【1】0x00~0x02:3字节,“EB5890”,跳转指令。
    “EB 58”,就是代表汇编语言中的“JMP 58”。 一条空的指令NOP(90H)
    【2】0x03~0x0A:8字节,文件系统标志和版本号,这里为MSDOS5.0。
    【3】0x0B~0x0C:2字节,每扇区字节数,512(0X02 00)。
    【4】0x0D~0x0D:1字节,每簇扇区数,8(0x08),这个值不能为0,而且必须是2的整数次方,比如1、2、4、8、16、32、64、128。规定每簇最大的容量不超过1024* 32,1024* 32/512=64
    【5】0x0E~0x0F:2字节,保留扇区数,38(0x00 26),那么就知道FAT1起始位置在38扇区。
    【6】0x10~0x10:1字节,FAT表个数为2,另外一个是备份的。
    【7】0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数;
    【8】0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。
    【9】0x15~0x15:1字节,哪种存储介质,0xF8标准值,可移动存储介质。
    【10】0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT表所占的扇区数。
    【11】0x18~0x19:2字节,每磁道扇区数,只对于有“特殊形状”(由磁头和柱面每 分割为若干磁道)的存储介质有效,63(0x003F)。
    【12】0x1A~0x1B:2字节,磁头数,只对特殊的介质才有效,255(0x00 FF)。
    【13】0x1C~0x1F:4字节,EBR分区之前所隐藏的扇区数,0(0x00 00 00 00)。
    【14】0x20~0x23:4字节,此文件系统分区的总扇区数,3887104(0x 00 3B 50 00),3887104 * 512 = 1990197248 ≈ 1.9GB。
    【15】0x24~0x27:4字节,每个FAT表占用扇区数,3789(0x 00 00 0E CD)。
    【16】0x28~0x29:2字节,标记,此域FAT32 特有。
    【17】0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有。
    【18】0x2C~0x2F:4字节,根目录所在第一个簇的簇号,2。(虽然在FAT32文件系统 下,根目录可以存放在数据区的任何位置,但是通常情况下还是起始于2号簇)。
    【19】0x30~0x31:2字节,FSINFO(文件系统信息扇区)扇区号是1,该扇区为操作系统提供关于空簇总数及下一可用簇的信息。
    【20】0x32~0x33:2字节,备份引导扇区的位置。
    【21】0x34~0x3F:12字节,用于以后FAT 扩展使用。
    【22】0x40~0x40:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已。
    【23】0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已 。
    【24】0x42~0x42:1字节,扩展引导标志,0x29。与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
    【25】0x43~0x46:4字节,卷序列号。通常为一个随机值。
    【26】0x47~0x51:11字节,卷标(ASCII码),如果建立文件系统的时候指定了卷标,会保存在此。
    【27】0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。
    2, FSINFO分区
    FSINFO信息扇区一般位于文件系统的1号扇区,结构非常简单
    【1】0x200~0x203: 4个字节,扩展引导标志“0x52526141”。
    【2】0x204~0x3E3:480个字节,未使用,全部置0。
    【3】0x3E4~0x3E7: 4个字节,FSINFO签名“0x72724161”。
    【4】0x3E8~0x3EB: 4个字节,文件系统的空簇数,484934(0x00 07 66 46)。
    【5】0x3EC~0x3EF: 4个字节,下一可用簇号(0x 00 00 00 04)。
    【6】0x3F0~0x3FD: 14个字节,未使用。
    【7】0x3FE~0x3FF: 2个字节,“55 AA”标志。
    3, 文件分区FAT表
    文件系统分配磁盘空间按簇来分配。因此,文件占有磁盘空间时,基本单位不是字节而是簇,即使某个文件只有一个字节,操作系统也会给它分配一个最小单元:即一个簇。对于大文件,需要分配多个簇。同一个文件的数据并不一定完整地存放在磁盘中一个连续地区域内,而往往会分若干段,像链子一样存放。这种存储方式称为文件的链式存储。为了实现文件的链式存储,文件系统必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继的下一个簇的簇号,对于文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的,FAT 表对应表项中记录着它所代表的簇的有关信息:诸如是空,是不是坏簇,是否是已经是某个文件的尾簇等。
    FAT表中的表项也是以4字节为单位进行划分,对FAT表由0进行逻辑编号。0号地址与1号地址被系统保留并存储特殊标志内容。从2号地址开始,每个地址对应于数据区的簇号,FAT表中的地址编号与数据区中的簇号一一对应。我们称FAT表中的这些单元为FAT表项,FAT表项中记录的值称为FAT表项值。
      FAT32中把簇是以32bit(4个字节)进行编码,而这种编码是逻辑编码,与物理地址也有一定的对应关系。FAT表紧接着的是有效数据区,从此区开始从2进行簇标号。从2开始,以4KB (8*512)为跨度进行簇编号。
    当文件系统被创建,也就是进行格式化操作时,分配给FAT区域的空间将会被清空,在FAT1与FAT2的0号表项与1号表项写入特定值。由于创建文件系统的同时也会创建根目录,也就是为根目录分配了一个簇空间,通常为2号簇,与之对应的2号FAT表项被写入一个结束标记。
    说明:
    ① 由于簇号起始于2号,所以FAT表项的0号表项与1号表项不与任何簇对应。
    FAT32的0号表项值总是“F8FFFF0F”。 0号FAT为介质类型,1号FAT为文件系统错误标志
    ② 1号表项可能被用于记录脏标志,以说明文件系统没有被正常卸载或者磁盘表面存在错误。不过这个值并不重要。正常情况下1号表项的值为“FFFFFFFF”或“FFFFFF0F”。
    ② 如果某个簇未被分配使用,它对应的FAT表项内容为0;
    ③ 当某个簇已被分配使用,则它对应的FAT表项内的FAT表项值也就是该文件的下一个存储位置的簇号。如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记,
    对于FAT32而言,代表文件结束的FAT表项值为0x0FFFFFFF。
    ③ 如果某个簇存在坏扇区,则整个簇会用0xFFFFFF7标记为坏簇,这个坏簇标记就记录在它所对应的FAT表项中。
    ④ 在文件系统中新建文件时,如果新建的文件只占用一个簇,为其分配的簇对应的FAT表项将会写入结束标记。如果新建的文件不只占用一个簇,则在其所占用的每个簇对应的FAT表项中写入为其分配的下一簇的簇号,在最后一个簇对应的FAT表象中写入结束标记。
    ⑤ 新建目录时,只为其分配一个簇的空间,对应的FAT表项中写入结束标记。当目录增大超出一个簇的大小时,将会在空闲空间中继续为其分配一个簇,并在FAT表中为其建立FAT表链以描述它所占用的簇情况。
    定位FAT绝对位置的方法如下:
    1、首先从MBR的分区表中得知分区的起始扇区[0x1c6],偏移到此扇区。
    2、从DBR的BPB中得知DBR的保留扇区数,FAT表的个数,FAT表的大小。
    3、因此FAT1=分区起始扇区+DBR保留扇区,FAT2=分区起始扇区+DBR保留扇区+FAT1。
    假设MBR[0x16~0x19]=0x00000010; 则DBR的起始地址为0x10 * 512=0x2000;
    假设DBR[0x0e]=0x1234,即[0x200e]=0x1234;则FAT1的起始扇区=0X10+0X1234

    在这里插入图片描述

    							图片9
    

    在这里插入图片描述
    图片10
     FAT表占据扇区数
      = 簇总数 * 4 Bytes/ 扇区占据字节数
      = (数据区扇区数/每簇占据扇区数)* 4 / 512
      = ( 3879488 / 8 ) * 4 / 512
      = 3788.5625
      FAT表占据扇区数取整数为3789 Sector 即 0x24单元的0x0ecd。
    数据区扇区数:(不含FAT)
    总扇区数-保留扇区数-FAT表所占扇区数 参考图片8
    3879488 =3887104(0x 00 3B 50 00)-3789 * 2-38(0x00 26)
    下面介绍如何为cluster_size选择一个合适的值,及FAT表占据扇区数的确定方法:
    有效扇区数(lFatDataSectors) =总扇区数(lTotalSectors_-保留扇区数(reserveSectors)

    #define SECTOR_SIZE 512
    #define FAT_NUM 2
    #define MAX_CLUST_32 ((1 << 28) - 16)
    unsigned long lFAT_sectors; //fat32表占的扇区数
    mbs.cluster_size = 8;//2^n,的一个随机值,但要小于128
    do{
    unsigned long lCluster32= (lFatDataSectors * SECTOR_SIZE- FAT_NUM*8)/(mbr.cluster_size* SECTOR_SIZE+ FAT_NUM*4);
    unsigned long lFAT_bytes= (lCluster32+2)*4; //保留2个簇,每个簇在FAT中占有4个字节
    lFAT_sectors = (lFAT_bytes+ SECTOR_SIZE-1)/ SECTOR_SIZE;
    //重新验证
    lCluster32= (lFatDataSectors - FAT_NUM * lFAT_sectors)/mbs.cluster_size;
    	unsigned long lMaxClust32 = (lFAT_sectors * SECTOR_SIZE) / 4;
    	if (lMaxClust32 > MAX_CLUST_32)
    			lMaxClust32 = MAX_CLUST_32;
    	if (lCluster32> lMaxClust32) 
    			lCluster32= 0;
    	if (lCluster32)
    	break;
        mbr.cluster_size <<=1;
    } while(mbs.cluster_size <= 128)
    

    4,数据区
      数据区时真正用于存放用户数据的区域。数据区紧跟在FAT2之后,被划分成一个个的簇。所有的簇从2开始进行编号,也就是说,2号簇的起始位置就是数据区的起始位置。
    数据区起始扇区号 =分区的起始扇区+ 保留扇区数 + 每个FAT表大小扇区数(offset:0x24~0x27) × FAT表个数
    =38+3789 * 2
    根目录起始扇区=数据区起始扇区号+(根目录起始簇-2)x每簇的扇区数
    =数据区的起始扇区+(簇大小 * 2)
    数据区的位置在FAT2的后面,具体定位方式如下;
    1、通过MBR中的分区表信息得知分区的起始位置。
    2、通过分区中DBR得知DBR的保留扇区数以及FAT表的大小,FAT表的个数。
    3、通过上面的信息就可以找到数据区的起始位置,根目录=数据区的起始扇区+(簇大小 * 2)。

    1、目录项定义
      目录所在的扇区,都是以32 Bytes划分为一个单位,每个单位称为一个目录项(Directory Entry),即每个目录项的长度都是32 Bytes 。根目录由若干个目录项组成,一个目录项占用32个字节,可以是长文件名目录项、文件目录项、子目录项等。
    <1> 短文件目录项的具体定义
    在这里插入图片描述
    图片11
    ☆ 目录项的第一个字节为“0xE5”,表示该项已被删除。
    ☆ 目录项的第一个字节为0x2E(“.”),表示当前目录的信息(目录的数据空间也会保存当前目录的目录项信息)
    ☆ 目录项的前两个字节为“0x2E 0x2E(“. .”),表示上一级目录。
    ☆ 目录项的第一个字节为"0x00",代表从此位置开始以后的数据空间都没有使用。
    ☆ 0x1c-0x1f 文件的长度以字节为单位
    在这里插入图片描述
    图片12
    在这里插入图片描述
    图片13
    注意:
      对于目录对应的短目录项,没有文件长度参数,也就是说0x1C-0x1F等于0。那么对于目录,又如何知道它占用空间的大小呢,又如何遍历目录呢?
      目录中的目录项是按照从前到后紧密排放,即使文件或者目录删除,也不会删除它们对应的目录项(删除目录项意味着目录项清零),只是将目录项标记为删除(0xE5)。这样目录的数据空间直到遇到第一个空目录项之前,所有的目录项都是非空的。我们可以根据目录项是否非空判断是否到达了目录的目录项尾部。
      至于目录的大小,其实已经没有意义了。我们获取目录的大小就是想判断目录的结束位置,而现在第一个空目录项就是目录的结束位置,所以已经没有必要知道目录的大小。当然, 通过遍历目录可以确定目录占用空间的大小,不过没有意义。
    <2> 长文件目录项的具体定义
    长文件名其实就是将文件名进行分段,分成若干个短文件名进行存储
    在这里插入图片描述
    图片14
    再详细的列出上表中地址0x0处各位段的含义
    在这里插入图片描述
    图片15
    ☆ 长文件名文件目录项的unicode编码:无论是英文字符,还是中文字符都占用2个字节。
    ☆ 目录项的第一个字节为“0xE5”,表示该项已被删除。
    ☆ 一个长文件它在目录中的记录可能有几个目录项组成,包含若干个长目录项和一个短目录项
    ☆ 0xB位段的取值如果是0FH代表是长目录项,反之就是短目录项。
    ☆ 1个长文件目录项:能记录13个字符,对应26个字节
    ☆ 顺序是从1开始编号直到13,倘若到了结尾的地方,除了要按照规则的编号还需要将0x0地址的第6位置1。
    长文件名在进行分段存储的时候,遵循一下三个处理原则:
    1、系统取长文件名的前6个字符加上“~1”形成短文件名,其扩展名不变;0
    2、如果已存在这个名字的文件,则符号“~”后的数字自动增加;
    3、如果文件名内存在windows非法的字符,则以下划线“_”代替;
    4、长文件名目录项采用倒叙的方式进行记录,如下图:
    在这里插入图片描述
    图片16
    目录项举例
    <1> 短目录项举例
      格式化SD卡,然后在其中创建一个文件readme.txt和Test子目录,WinHex打开根目录内容如下:
    在这里插入图片描述
    图片17
    首先看子目录Test的对应目录项:
    【1】0x3B8020 - 0x3B8027 目录项名为Test
    【2】0x3B802B 10H(0001 0000B),表明为子目录
    【3】[0x3B8034 - 0x3B8035,0x3B803A - 0x3B803B] 00 03H,表明Test子目录位于3号簇的位置,在FAT表中为3号表项
    【4】0x3B803C - 0x3B803F 0000H,大小为0
    readme.txt的对应目录项:
    【1】0x3B8040 - 0x3B8047 目录项名为readme
    【2】0x3B8048 - 0x3B804A 目录项扩展名为TXT
    【3】0x3B804B 20H(0010 0000B),表明为归档文件
    【3】[0x3B8054 - 0x3B8055,0x3B805A - 0x3B805B] 00 04H,表明readme.txt位于4号簇的位置,在FAT表中为4号表项
    【4】0x3B805C - 0x3B805F 23A7H,大小为9127 Bytes
    <2> 长目录项举例
      格式化SD卡,然后在其中创建一个文件abcdefghigklmnopqrstuvwxyz.txt,WinHex打开根目录内容如下:
    在这里插入图片描述
    图片18
    先看看卷标
    【1】0x3B8000 - 0x3B8007 目录项名为Huang
    【2】0x3B800B 08H(0000 1000B),表明为"卷标"
    再看看长文件目录项
    【1】003B8020  0x43 表明此长文件包含了3个长目录项,并且当前目录项是它的最后一个长目录项
    【2】003B8040  0x02 表明这是长文件的第2个目录项
    【3】003B8041 - 003B804A 长文件目录项的unicode的第一部分, 006EH 006FH 0070H 0071H 0072H 代表了nopqr五个字符
    【4】003B804B  0x0F 表明是一个长目录项
    【5】003B804D 0x27 校验和
    【6】003B804E -003B8059 长文件目录项的unicode的第二部分, 0073H 0074H 0075H 0076H 0077H 0078H 代表了stuvwx六个字符
    【7】003B805A - 003B805B 起始簇号,目前常置0
    【8】003B805C - 003B805F 长文件目录项的unicode的第三部分, 0079H 007AH 代表了yz两个字符
     为了记录abcdefghigklmnopqrstuvwxyz.txt,使用了3个长目录项和1个短目录项。至于位于003B8080处的短目录项,就不在说明了。

    FAT32文件系统总结
    上述的内容已经简单的介绍了FAT32文件系统,下面根据定位某个文件来详细的了解FAT32文件系统是如何存储数据的。
    1、根据磁盘0号扇区MBR的分区表得知分区的起始位置,既DBR;
    2、根据DBR中BPB记录的信息,得知DBR保留扇区数,FAT的大小,FAT的个数;
    3、根据上述信息可以算出数据的起始位置,数据区=分区起始扇区+DBR保留扇区+(FAT表 * 2);
    4、计算根目录所在的绝对位置,根目录=数据区的起始扇区+(簇大小 * 2);
    5、根据根目录中的目录项信息得知,根目录下的文件以及子目录等所对应的簇;
    6、根据文件的簇号就可以找到文件内容的绝对扇区;
    7、如果一个文件占用多个簇,则需要根据FAT表项得知下一个数据簇的簇号。
    7、如果根目录下的目录项是子目录的话,则根据子目录中的文件目录项得知文件内容的簇号;
    8、如果子目录中还有子目录的话,则根据这种方法一直找下去即可。

    展开全文
  • NTFS转FAT32格式必备软件及NTFS与FAT32的区别 ParagonPartitionManager是一个类似于PQPartitionMagic的磁盘分区工具集,是一套磁盘管理软件,PartitionMagic的最佳替代品!有着直觉的图形使用介面和支持鼠标操作...
  • FAT32、FAT16指的是分区格式,而FAT16单个文件大小最大只能2G,FAT32单个文件可以最大4G,所以这里优先选FAT32 HDD是硬盘启动模式,而ZIP是软盘启动模式,因此U盘选HDD模式。 至于智能,兼容,增强,主要就是根据...
  • FAT32和NTFS的区别: 1、什么是NTFS-新(N)技术(T)文件(F)系统(S)? 想要了解NTFS,我们首先应该认识一下FAT。FAT(File Allocation Table)是“文件分配表”的意思。对我们来说,它的意义在于对硬盘分区的管理...
  • 经常有这样的说法,“我的硬盘是FAT32格式的”,“C盘是NTFS格式”等,它们的错误在于,NTFS或是FAT32并不是格式,而是管理文件的系统,其次刚买回来的硬盘并没有文件系统,必须使用FDISK或Windows 2000/XP的分区...
  • 如何将FAT32格式转换为NTFS格式(二)

    千次阅读 2007-05-29 11:39:00
    一、FAT32转NTFS在“运行”中输入“CMD”打开“命令提示符”窗口,输入:“CONVERT F: /FS:NTFS”,其中“F:”是分区盘符(要跟冒号),“/FS:NTFS”是把指定分区转换为NTFS格式。本来以为很快就可以搞定了,但却出...
  • HDD-FAT32 ZIP-FAT32

    千次阅读 2016-02-02 00:53:00
    那么HDD-FAT32和ZIP-FAT32模式到底有什么区别呢?现在就为大家讲解一下!1.HDD-FAT32模式适合新型电脑使用。通常新型主板或笔记本电脑的BIOS都支持HDD模式,这时我们在制作的时候就可以选择HDD-FAT32。2.ZIP-FAT32模...
  • FAT32汇总

    千次阅读 2015-11-17 09:12:32
    FAT32 是不是过时了呢...其实系统本身都市LINUX,为什么还要用FAT32呢,因为要在windows上使用。还有像用于监控行业录像存储,如预分配、也是很方便的。 ==========================================================
  • 格式化U盘为FAT32

    2021-05-28 10:55:27
    使用fdisk格式化U盘 查看硬盘挂载点 df 卸载挂载的硬盘 umount /media/xxx/8CDA-0A87 擦除硬盘分区信息 mkfs.vfat /dev/sdb -I 创建新的分区 #fdisk打开硬盘/dev/sdb sudo fdisk /dev/sdb #创建新分区...
  • FAT,FAT32,NTFS

    2019-01-24 15:09:22
    FAT全称File Allocation Table,意思是... FAT,FAT32,NTFS指不同的硬盘分区格式:  1.FAT格式:即FAT16,这是MS-DOS和最早期的Win 95操作系统中最常见的磁盘分区格式。它采用16位的文件分配表,能支持最大为2G...
  • FAT16 FAT32 文件系统

    千次阅读 2015-06-27 10:50:35
    AT,英文为File Allocation Table,文档分配表。 先要记住几个概念: 扇区:一般扇区为512个字节。 簇:由若干个扇区组成。...而FAT文件系统(其他文件系统应该相似)...FAT16, FAT32的区别 FAT16是用16位即2个字节来
  • NTFS比FAT16和FAT32更节约磁盘空间。而且更安全。因为NTFS有文件加密的功能。文件系统 支持的操作系统FAT16 windows 95/98/Me/NT/2000/XP Unix,Linux,DOSFAT32 windows 95/98/Me/2000/XPNTFS windows nt/2000/...
  • 浅析FAT32

    2017-04-05 14:22:00
    最近在接触网络录像机项目时,因项目需要,需要接触硬盘,接触fat32系统。 总的来说一开始接触fat32,Google比microsoft官方的冗长难懂的说明文档要好啊(虽然fat32是微软的专利),根据自己的使用需要,以及参考...
  • FAT32转成NTFS格式

    2010-09-21 08:23:00
    一、FAT32转NTFS 在“运行”中输入“CMD”打开“命令提示符”窗口,输入:“CONVERT F: /FS:NTFS”,其中“F:”是分区盘符(要跟冒号),“/FS:NTFS”是把指定分区转换为NTFS格式。 本来以为很快...
  • fat16和fat32文件系统学习

    千次阅读 2016-01-06 11:01:43
    根据自己电脑的fat,fat32分区来学习fat,fat32文件系统 fat16和fat32文件系统学习 - 下载频道 - CSDN.NET http://download.csdn.net/detail/guyue35/9392290 FAT文件系统原理(一)---北亚数据恢复服务...
  • FAT 32 文件系统学习

    2021-04-09 18:18:55
    本文将通过实际读取一个FAT32格式的U盘来简单了解和学习FAT32文件系统的格式。虽然目前windwos操作系统的主流文件系统格式是NTFS,但是FAT32由于其兼容性原因,还是有一定的学习价值。为了能做出一个窗体程序提供...
  •   注意:本文章主要是翻译自 FatFs 官网的 The basics of FAT filesystem。但是,原文大多都是文字说明,因此在翻译时,添加了大量的图片示例以及一些额外的章节。因此,以下翻译与原文有些差别。具体表现为下文中...
  • FAT32转为NTFS

    2013-12-09 10:44:22
    这表明你的磁盘分区是fat的,因为fat、fat16、fat32都是不支持大于4G的单个文件的,只有ntfs支持你最好转换一下e盘的文件系统格式。你要把FAT32转为NTFS才可以。这NTFS格式分区是什么意思呢?首 先说一下什么是ntfs...
  • 一、FAT32转NTFS在“运行”中输入“CMD”打开“命令提示符”窗口,输入:“CONVERT F: /FS:NTFS”,其中“F:”是分区盘符(要跟冒号),“/FS:NTFS”是把指定分区转换为NTFS格式。本来以为很快就可以搞定了,但却出...
  • FAT16 FAT32 NTFS exFAT ReFS

    2020-06-16 10:27:25
    1.FAT16 FAT16按照其不同的特点和作用大致可分为5部分:MBR区、DBR区、FAT区、DIR区和DATA区。我们来分别介绍一下: (1)MBR区(主引导扇区) MBR (Main Boot Record),按其字面上的理解即为主引导记录区,位于...
  • 一、前言 硬盘是用来存储数据的,为了使用和管理方便,这些数据以文件的...本博客是基于linux的FAT32文件系统讲解,应用于嵌入式产品磁盘存储的预分配。 二、FAT32文件系统结构 FAT32文件系统由DBR及其保留扇区...
  • FAT32转NTFS / NTFS转FAT32

    千次阅读 2007-08-30 10:56:00
    一、FAT32转NTFS 在“运行”中输入“CMD”打开“命令提示符”窗口,输入:“CONVERT F: /FS:NTFS”,其中“F:”是分区盘符(要跟冒号),“/FS:NTFS”是把指定分区转换为NTFS格式。 本来以为很快就可以搞定了,但却...
  • 但不同的U盘有这不同的文件系统格式,像FAT32、exFAT、NTFS等格式间有什么区别呢?  U盘文件系统类型:  ● FAT32 文件系统 FAT32使用4个字节(也就是32位)的空间来表示每个扇区(Sector)配置文
  • 格式FAT32 与 NTFS 互转方法

    千次阅读 2010-12-23 12:06:00
    <br />一、FAT32转NTFS  在“运行”中输入“CMD”打开“命令提示符”窗口,输入:“CONVERT F: /FS:NTFS”,其中“F:”是分区盘符(要跟冒号),“/FS:NTFS”是把指定分区转换为NTFS格式。  本来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,735
精华内容 4,694
关键字:

fat32格式什么意思