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

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

    你需要的东西

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

    你最少要知道的信息

    小端模式

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

    硬盘组成

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

    DBR区保留扇区FAT区数据区

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

    DBR区

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

    地址长度定义我的U盘
    0x0B-0x0C2每扇区字节数512
    0x0D1每簇扇区数8
    0x0E-0x0F2DOS保留扇区数3032
    0x101FAT个数2
    0x24-0x274每FAT扇区数14868
    0x2C-0x2F4根目录首簇号2

    保留扇区

    读+写

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

    此区域用于加快索引。
    可以不使用,若要使用则要注意在索引后判断是否真的是空簇(根据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-0x78文件名(E5开头则证明已经删除,20表示空)
    0x8-0xA3扩展名
    0xB2属性
    0xC1系统保留
    0xD1创建时间的10毫秒位
    0xE-0xF2文件创建时间
    0x10-0x112文件创建日期
    0x12-0x132文件最后访问日期
    0x14-0x152文件起始簇号高16位
    0x16-0x172文件最近修改时间
    0x18-0x192文件最近修改日期
    0x1A-0x1B2文件起始簇号低16位
    0x1C-0x1F4表示文件的长度

    其中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

    展开全文
  • FAT32格式理解

    千次阅读 2018-01-27 19:53:37
    FAT32文件系统主要包括三个部分:DBR(dos boot record),FAT表区,数据区。 3.1 DBR区 即DOS引导记录,大小为512个字节。它一定是位于文件系统的最开始,存放启动代码。 3.2 FAT表区 FAT区内存放的...

    1 硬盘结构

    这里写图片描述
    由上面可知,主引导记录MBR中的分区表有4个分区项目,每个分区项可以放一个主分区,也就是表中的基本分区,或者放一个基本分区。所以系统最多有四个主分区,但是如果我们想要更多的分区的话,我们可以放扩展分区,一个扩展分区可以扩展无限个逻辑分区。上图有三个主分区,一个扩展分区,扩展分区扩展为2个逻辑分区。
    扩展分区是如何扩展的呢,其实,每个逻辑分区的头部都有一个字段指向下一个逻辑分区,但最后一个时,就不指向了。
    这里写图片描述

    2 MBR

    主引导记录共有512字节,占用一个扇区,前面446字节为启动代码,后面64字节,每个16字节指向一个分区。MBR最后两个字节固定为“55aa”。这是是否为有效MBR的判断。

    3 FAT32文件系统

    FAT32文件系统主要包括三个部分:DBR(dos boot record),FAT表区,数据区。
    这里写图片描述

    3.1 DBR区

    即DOS引导记录,大小为512个字节。它一定是位于文件系统的最开始,存放启动代码。

    3.2 FAT表区

    FAT区内存放的是FAT表,对于FAT文件系统来说FAT表至关重要,因此在FAT表1后面还有一份FAT表2,二者的内容完全一样,FAT2作为备份,当FAT1出现错误或损坏时对其进行恢复。
    FAT表其实就是一张表,它的每一项大小为4个字节,按照顺序,从第二项开始分别对应着数据区里的每一个簇(第0项和第1项保留给系统使用)。FAT表内项里的内容表示下一个数据存放的簇号,如果已经是最后一簇了则项里的内容为0XFFFFFFFF
    FAT表里的每一项的作用:表明相应的簇被占领;指向下一个簇。
    项里面的数据表示意义如图:
    这里写图片描述

    3.3 数据区

    数据区分为两个部分:根目录区和实际数据区。

    3.3.1 根目录区:

    根目录区,一般位于数据区的最开始位置,里面存放着根目录下的文件或者文件夹的信息。
    根目录区里每一项为32byte,如下:

    //fat32短目录项结构
    struct
    {
        uchar        file_name[8];    //文件名,不足用空格(0x20)填充
        uchar        ext_name[3];    //扩展名(后缀名),不足用空格(0x20)填充
        uchar        attribute;    //属性:0:读写;1只读;10隐藏;100系统;1000卷标;10000子目录;100000归档,0x0f表示是长目录结构;(除0xf外其他为二进制值)
        uchar        reserved;    //系统保留
        uchar        milli_time;    //创建时间的10毫秒位
        FDT_TIME    create_time;    //文件创建时间
        FDT_DATE    create_date;    //文件创建日期
        FDT_DATE    last_visit_date;    //文件最后访问日期
        ushort        high_clus;    //文件起始簇号的高16位
        FDT_TIME    change_time;    //文件的最近修改时间
        FDT_DATE    change_date;    //文件的最近修改日期
        ushort        low_clus;    //文件起始簇号的低16位
        uint        file_length;    //文件的长度
    }SHORT_FDT32;

    3.3.2 实际数据区

    实际数据区与FAT表区的一一对应,FAT表区的0,1项用作它用,所以FAT表区从2开始。也就是FAT表区的第2项,对应着实际数据区的第一个簇,即0-4k位置,FAT表区的第3项,对应着实际数据区从4k-8k位置,依次类推。

    4 FAT32文件系统大致实现

    例如,现在根目录下存放着两个文件1.txt和2.txt。根目录分区就会有两个记录,每个为32byte。假设1.txt文件有20k大小,系统一个簇为4k,所以1.txt要占5个簇,即再FAT1表中占5个项。
    这里写图片描述
    假设现在应用程序要打开读取1.txt文件,我们现在根目录区中找到1.txt那一项,找到1.txt的对应项之后,我们可以看到两个字段字段high_clus,low_clus,将这两个簇组合起来后,我们就可以得到1.txt的起始簇,假设得到1.txt的起始簇是4,那么接下来,我们就到FAT1表区中找到第4个项,然后我们查看该项,发现它是指向第8项的,第8又指向7,依次类推,所以1.txt所在的地址为
    4->8 ->7 ->6->10
    总共5个簇,共20k,假如第一簇的地址在磁盘10000处,那么,文件1.txt在
    10000+4*4k –> 10000+8*4k –> 10000+7*4k 。。。。。
    假如根目录区中除了放1.txt,2.txt两个文件外,还放了home这个文件夹时,找法还是和1.txt文件一样,不过根目录区中相应的32byte项的attribute 字段应当填子目录,表明这个是文件夹。然后所找到的簇所对应的实际数据区中的数据不是和1.txt一样放文件内容,而是放着和根目录区一样的目录项(每项32字节大小)

    展开全文
  • 本文档详细介绍了FAT32文件系统格式,MBR、FAT表等位置与参数都给出了明确的数据。根据本篇文档,针对FAT32的缺点可以方便地进行改善,比如直接操作地址对FAT表或MBR内容进行人为更改。
  • 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

     

    展开全文
  • 本文介绍RHEL系列(Centos/Fedora)下制作Fat32格式的windows10启动盘。   本囧是刚刚如坑几个月的linux小白,第一次写文章,请诸位多多指教:)    最近搜索相关教程,发现大多是ubuntu下或者是格式化为ntfs...

    本文介绍RHEL系列(Centos/Fedora)下制作Fat32格式的windows10启动盘

            

    本囧是刚刚如坑几个月的linux小白,第一次写文章,请诸位多多指教:)

            

           最近搜索相关教程,发现大多是ubuntu下或者是格式化为ntfs分区的做法,链接如下:

    http://blog.csdn.net/wafx1314/article/details/17562181(ntfs分区制作)

    http://www.2cto.com/os/201411/354905.html(ntfs分区制作)

    但是本囧觉得ntfs是在有点高。。。。。一是U盘区区10G左右,用ntfs是在奢侈,格式化也慢;二是vfat'系列远比ntfs识别的广,说不定哪台老主板不认识(本囧刷EMUI时此处有阴影)。然后自己根据以上文章制作了fat32格式的win10安装盘,总结如下


    一,基本配置和工具软件

    (1)本囧的笔记本是DEll成就5568,UEFI启动模式,GPT分区表格式;U盘8G;Centos 7;

    (2)win10镜像名为 “cn_windows_10_multiple_editions_version_1511_x64_dvd_7223622.iso”(下载地址见windows贴吧)

    (3)fdisk命令;mkfs.fat命令;ms-sys工具(下载见官网:http://ms-sys.sourceforge.net/);

    ms-sys工具说明:


    请注意“-H”参数以上的参数大多为向partition(分区)的boot sector写入boot record;而往下的参数是向整个device(设备)的第一扇区写入MBR。若不加参数(Default)可查看该分区(或设备)的boot record类型,文件系统格式等信息。


    二,详细过程

    假定我U盘为/dev/sdb,仅有/dev/sdb1分区

    (1)(检查)卸载U盘,进行分区并格式化

    [ROOT@localhost ~]$       lsblk                                    #检查挂载的分区(请小小白记准设备代号,你的未必是sdb!!!务必!!!

    [ROOT@localhost ~]$       umount     /dev/sdb1           #卸载U盘以便于分区

    [ROOT@localhost ~]$       fdisk       /dev/sdb               #在fdisk工具下删除旧的分区(d)新建单个分区(n),然后写入并离开(w)          

                                              ps:“o”参数可以更新U盘分区表为DOS(MBR)模式

    [ROOT@localhost ~]$      mkfs.fat      -F    32 /dev/sdb1        #格式化sdb1分区为FAT32,-F参数为强制格式化为FAT32

    [ROOT@localhost ~]$      lsblk                                           #再次检查操作是否正确

    (2)写入boot record和MBR

    [ROOT@localhost ~]$    ms-sys       -3      /dev/sdb1          #向sdb1分区的boot sector写入FAT32 DOS boot record;

                                           ps:亲测“-e"参数(FAT32 PE boot record)也行,实在不造选哪个,可用”-w“(自动选择)

    [ROOT@localhost ~]$   ms-sys     -d      /dev/sdb        #向/dev/sdb(U盘设备)的第一扇区写入DOS MBR  (其他那几个参数本囧没试过)

    [ROOT@localhost ~]$    lsblk                                      #检查是不是写入成功啦?不成功重新(1)(2)再来。

    (3)copy镜像

    [ROOT@localhost ~]$    mount    -o    loop     ~/win10.iso     /mnt/ISO                         #挂载iso文件   ,镜像和文件夹自己选

    [ROOT@localhost ~]$    mount     /dev/sdb1         /mnt/U_8G                                #挂载U盘的sdb1分区

    [ROOT@localhost ~]$    cp     -r     /mnt/ISO/*      /mnt/U_8G/                            #复制 镜像内文件到U盘    

                                          ps:可以先把iso内文件取到磁盘上,再往U盘复制比较块

    [ROOT@localhost ~]$        umount      /dev/sdb1    ; umount   /mnt/ISO     #卸载U盘,镜像

    (4)

    [ROOT@localhost ~]$    reboot
    重启按F12选U盘启动(对于win10安装盘,UEFI或BIOS的电脑应该都行)


    写在最后。。。。。最近重做双系统自己鼓捣笔记本,前前后后大概一天吧,然后得此road,以引导小白。。。。。。若有用外置硬盘作安装盘的可作参考。

    写MBR据说还可以使用Lilo工具,本囧没试过。。。


    还有谁能给小弟一个UEFI启动类型的win10 Pro 的激活工具或者激活码额,多谢大笑。邮箱:707zqt@sina.com



    展开全文
  • SD卡fat32文件格式说明

    2019-08-27 10:27:07
    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 说明: MBR:MasterBootRecord(主引导记录) ...硬件:本文SD卡为Kingston4GB,FAT32格式,簇大小4KB,每...
  • 如果要挂载FAT32格式的,直接看第4部分即可。先说exfat的挂载,稍微复杂,要懂点编译技术。如果不想编译,直接下载本文附件安装也行。1、下载fuse-exfat支持软件:exfat支持是通过fuse模块的方式支持的,其项目地址...
  • FAT32

    千次阅读 2019-04-01 11:05:29
    FAT32 DBR及保留扇区 FAT1 FAT2 数据区 DBR及保留扇区:DBR的含义是DOS引导记录,也称为操作...
  • 一. 用winhex工具分析SD卡(FAT32) WinHex.exe -> 工具 ->打开磁盘 ->选中SD卡设备 图(1) 打开后主界面如下: ...
  • Windows下NTFS无损转换FAT32格式

    千次阅读 2008-03-21 16:56:00
    前几天,由于工作忙,让朋友帮做系统,盘是一张XPGHOST的盘,GHOST完成后里面有个选项是:是否把FAT32转换成NTFS格式。我朋友也没在意,就给转换了,等我发现已经所有的分区都是NTFS格式了,由于用不喜欢NTFS,在DOS...
  • SD卡中FAT32文件格式

    2015-05-20 10:59:08
    FAT32 格式,簇大小 4KB ,每扇区 512 字节。 第一章 硬盘结构与 SD 卡结构 1.1  硬盘介绍 1.1 硬盘结构 如果你熟悉硬盘结构跳过本节。下图是硬盘的结构,如果你只是为了学习 SD 卡 FAT...
  • fat32

    2012-06-04 18:39:07
    FAT32分区基本构成与FAT32存储原理 http://www.sina.com.cn 2007年12月27日 09:42 太平洋电脑网 作者:非常可乐    本文来自网络整理。  FAT32是个非常有功劳的文件系统,Microsoft成功地设计并运用了...
  • 格式化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 #创建新分区...
  • SD卡FAT32文件系统格式

    2014-06-08 10:41:00
     1、SD卡FAT32文件系统的整体布局  2、FAT文件系统简介  ① 文件分配表   ② 目录项  三、DBR(DOS BOOT RECORD,DOS引导记录)  1、DBR与BPB  ① DBR  ② BPB  2、DBR实例测试  3、DBR参数...
  • FAT32转NTFS、NTFS无损转FAT32

    千次阅读 2018-08-17 14:22:03
    FAT32转NTFS、NTFS无损转FAT32 http://blog.even8.com Windows XP本身支持NTFS分区,使用NTFS分区的安全程度和磁盘管理比其他分区格式要好。在安装W
  • FAT32汇总

    千次阅读 2015-11-17 09:12:32
    FAT32 是不是过时了呢,答案当然是否定的,目前在消费类的电子产品都市使用FAT32文件系统,如手机SD卡,家用摄像机,照相机、MP3等等 其实系统本身都市LINUX,为什么还要用FAT32呢,因为要在windows上使用。还有像...
  • FAT32文件系统结构

    万次阅读 多人点赞 2018-01-11 09:18:16
    FAT32文件系统结构: FAT32文件系统由DBR及保留扇区,FAT1,FAT2和数据区组成: DBR及保留扇区:DBR的含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往会有一些保留扇区。 FAT1:FAT的含义是文件分配...
  • 文件系统的限制主要是指每个分区(partition)不能大于2TB,不过32位Windows要求物理盘也不能大于2TB。现在,控制器还有这个限制的已经越来越少了,不过常用的文件系统上倒还是经常会有这个问题。NTFS(Windows):...
  • 1、FAT32格式的特征:   第0扇区: 0x52----0x56(5个字节),这5个字节的值分别为:0x46 ,0x41 ,0x54,0x33,0x32,其实就是字符“FAT32”的ascall码值。   2、FAT16格式特征:   第0扇区:0x36-----0x3A(5个...
  • fat16和fat32文件系统学习

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

    万次阅读 多人点赞 2018-04-13 15:38:58
    1. SD卡中FAT32文件系统快速入门 1.1. 理论知识 1.1.1. MBR(Main Boot Record) 主引导记录,占446字节, 为计算机启动后从可启动介质上首先装入内存并且执行的代码,通常用来解释分区结构 1.1.2. DBR(DOS Boot ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,691
精华内容 9,876
关键字:

fat32格式地址