zoukankan      html  css  js  c++  java
  • FAT32文件格式示例解析

    1.前言

    本文主要以一个示例来分析FAT32文件系统的格式,对FAT32文件系统的各个区域详细分析。

    2.FAT32文件系统典型分区

    3.FAT32文件系统示例

    按如下步骤在ubuntu下创建FAT32文件系统:

    1.chenbo@chenbo-ThinkPad-R61:~$ cd /tmp/

    2.创建文件test.img

    chenbo@chenbo-ThinkPad-R61:/tmp$ sudo dd if=/dev/zero of=test.img bs=512 count=80000

    3.创建FAT32文件系统

    chenbo@chenbo-ThinkPad-R61:/tmp$ sudo mkfs.vfat -F 32 test.img

    4.将test.img挂载在/mnt

    chenbo@chenbo-ThinkPad-R61:/tmp$ sudo mount test.img /mnt
    5.创建test1 test2 test3三个目录

    chenbo@chenbo-ThinkPad-R61:/mnt$ sudo mkdir test1 test2 test3

    6.在test1下创建test1-1   test1-1-1目录

    chenbo@chenbo-ThinkPad-R61:/mnt$ cd test1

    chenbo@chenbo-ThinkPad-R61:/mnt/test1$ sudo mkdir test1-1

    chenbo@chenbo-ThinkPad-R61:/mnt/test1$ cd test1-1/

    chenbo@chenbo-ThinkPad-R61:/mnt/test1/test1-1$ sudo mkdir test1-1-1
    7.创建hello.txt文件,写入内容,拷贝到test1/test1-1/test1-1-1下

    chenbo@chenbo-ThinkPad-R61:/tmp$ touch hello.txt

    chenbo@chenbo-ThinkPad-R61:/tmp$ echo you are my friend! > hello.txt

    chenbo@chenbo-ThinkPad-R61:/tmp$ sudo cp hello.txt /mnt/test1/test1-1/test1-1-1/

    8.执行完如上步骤后,通过hexdump查看文件系统内容

    chenbo@chenbo-ThinkPad-R61:/tmp$ sudo umount /mnt

    chenbo@chenbo-ThinkPad-R61:/tmp$ hexdump -C test.img

    00000000  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 01 20 00  |.X.mkfs.fat... .|
    00000010  02 00 00 00 00 f8 00 00  20 00 40 00 00 00 00 00  |........ .@.....|
    00000020  80 38 01 00 68 02 00 00  00 00 00 00 02 00 00 00  |.8..h...........|
    00000030  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00000040  80 00 29 80 73 bc 92 4e  4f 20 4e 41 4d 45 20 20  |..).s..NO NAME  |
    00000050  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
    00000060  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
    00000070  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
    00000080  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
    00000090  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
    000000a0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
    000000b0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
    000000c0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
    000000d0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
    000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000200  52 52 61 41 00 00 00 00  00 00 00 00 00 00 00 00  |RRaA............|
    00000210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000003e0  00 00 00 00 72 72 41 61  89 33 01 00 08 00 00 00  |....rrAa.3......|
    000003f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000400  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000c00  eb 58 90 6d 6b 66 73 2e  66 61 74 00 02 01 20 00  |.X.mkfs.fat... .|
    00000c10  02 00 00 00 00 f8 00 00  20 00 40 00 00 00 00 00  |........ .@.....|
    00000c20  80 38 01 00 68 02 00 00  00 00 00 00 02 00 00 00  |.8..h...........|
    00000c30  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00000c40  80 00 29 80 73 bc 92 4e  4f 20 4e 41 4d 45 20 20  |..).s..NO NAME  |
    00000c50  20 20 46 41 54 33 32 20  20 20 0e 1f be 77 7c ac  |  FAT32   ...w|.|
    00000c60  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2|
    00000c70  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n|
    00000c80  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di|
    00000c90  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse|
    00000ca0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl|
    00000cb0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press |
    00000cc0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a|
    00000cd0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......|
    00000ce0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000df0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
    00000e00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00004000  f8 ff ff 0f ff ff ff 0f  f8 ff ff 0f ff ff ff 0f  |................|
    00004010  ff ff ff 0f ff ff ff 0f  ff ff ff 0f ff ff ff 0f  |................|
    00004020  ff ff ff 0f 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00004030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00051000  f8 ff ff 0f ff ff ff 0f  f8 ff ff 0f ff ff ff 0f  |................|
    00051010  ff ff ff 0f ff ff ff 0f  ff ff ff 0f ff ff ff 0f  |................|
    00051020  ff ff ff 0f 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    00051030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    0009e000  41 74 00 65 00 73 00 74  00 31 00 0f 00 2e 00 00  |At.e.s.t.1......|
    0009e010  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff  |................|
    0009e020  54 45 53 54 31 20 20 20  20 20 20 10 00 00 ba 23  |TEST1      ....#|
    0009e030  4d 4c 4d 4c 00 00 ba 23  4d 4c 03 00 00 00 00 00  |MLML...#ML......|
    0009e040  41 74 00 65 00 73 00 74  00 32 00 0f 00 9a 00 00  |At.e.s.t.2......|
    0009e050  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff  |................|
    0009e060  54 45 53 54 32 20 20 20  20 20 20 10 00 00 a1 23  |TEST2      ....#|
    0009e070  4d 4c 4d 4c 00 00 a1 23  4d 4c 04 00 00 00 00 00  |MLML...#ML......|
    0009e080  41 74 00 65 00 73 00 74  00 33 00 0f 00 76 00 00  |At.e.s.t.3...v..|
    0009e090  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff  |................|
    0009e0a0  54 45 53 54 33 20 20 20  20 20 20 10 00 00 a1 23  |TEST3      ....#|
    0009e0b0  4d 4c 4d 4c 00 00 a1 23  4d 4c 05 00 00 00 00 00  |MLML...#ML......|
    0009e0c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    0009e200  2e 20 20 20 20 20 20 20  20 20 20 10 00 00 a1 23  |.          ....#|
    0009e210  4d 4c 4d 4c 00 00 a1 23  4d 4c 03 00 00 00 00 00  |MLML...#ML......|
    0009e220  2e 2e 20 20 20 20 20 20  20 20 20 10 00 00 a1 23  |..         ....#|
    0009e230  4d 4c 4d 4c 00 00 a1 23  4d 4c 00 00 00 00 00 00  |MLML...#ML......|
    0009e240  41 74 00 65 00 73 00 74  00 31 00 0f 00 a7 2d 00  |At.e.s.t.1....-.|
    0009e250  31 00 00 00 ff ff ff ff  ff ff 00 00 ff ff ff ff  |1...............|
    0009e260  54 45 53 54 31 2d 31 20  20 20 20 10 00 64 c3 23  |TEST1-1    ..d.#|
    0009e270  4d 4c 4d 4c 00 00 c3 23  4d 4c 06 00 00 00 00 00  |MLML...#ML......|
    0009e280  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    0009e400  2e 20 20 20 20 20 20 20  20 20 20 10 00 00 a1 23  |.          ....#|
    0009e410  4d 4c 4d 4c 00 00 a1 23  4d 4c 04 00 00 00 00 00  |MLML...#ML......|
    0009e420  2e 2e 20 20 20 20 20 20  20 20 20 10 00 00 a1 23  |..         ....#|
    0009e430  4d 4c 4d 4c 00 00 a1 23  4d 4c 00 00 00 00 00 00  |MLML...#ML......|
    0009e440  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    0009e600  2e 20 20 20 20 20 20 20  20 20 20 10 00 00 a1 23  |.          ....#|
    0009e610  4d 4c 4d 4c 00 00 a1 23  4d 4c 05 00 00 00 00 00  |MLML...#ML......|
    0009e620  2e 2e 20 20 20 20 20 20  20 20 20 10 00 00 a1 23  |..         ....#|
    0009e630  4d 4c 4d 4c 00 00 a1 23  4d 4c 00 00 00 00 00 00  |MLML...#ML......|
    0009e640  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    0009e800  2e 20 20 20 20 20 20 20  20 20 20 10 00 00 ba 23  |.          ....#|
    0009e810  4d 4c 4d 4c 00 00 ba 23  4d 4c 06 00 00 00 00 00  |MLML...#ML......|
    0009e820  2e 2e 20 20 20 20 20 20  20 20 20 10 00 00 ba 23  |..         ....#|
    0009e830  4d 4c 4d 4c 00 00 ba 23  4d 4c 03 00 00 00 00 00  |MLML...#ML......|
    0009e840  41 74 00 65 00 73 00 74  00 31 00 0f 00 0e 2d 00  |At.e.s.t.1....-.|
    0009e850  31 00 2d 00 31 00 00 00  ff ff 00 00 ff ff ff ff  |1.-.1...........|
    0009e860  54 45 53 54 31 2d 7e 31  20 20 20 10 00 64 45 24  |TEST1-~1   ..dE$|
    0009e870  4d 4c 4d 4c 00 00 45 24  4d 4c 07 00 00 00 00 00  |MLML..E$ML......|
    0009e880  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    0009ea00  2e 20 20 20 20 20 20 20  20 20 20 10 00 64 c3 23  |.          ..d.#|
    0009ea10  4d 4c 4d 4c 00 00 c3 23  4d 4c 07 00 00 00 00 00  |MLML...#ML......|
    0009ea20  2e 2e 20 20 20 20 20 20  20 20 20 10 00 64 c3 23  |..         ..d.#|
    0009ea30  4d 4c 4d 4c 00 00 c3 23  4d 4c 06 00 00 00 00 00  |MLML...#ML......|
    0009ea40  41 68 00 65 00 6c 00 6c  00 6f 00 0f 00 f1 2e 00  |Ah.e.l.l.o......|
    0009ea50  74 00 78 00 74 00 00 00  ff ff 00 00 ff ff ff ff  |t.x.t...........|
    0009ea60  48 45 4c 4c 4f 20 20 20  54 58 54 20 00 64 45 24  |HELLO   TXT .dE$|
    0009ea70  4d 4c 4d 4c 00 00 45 24  4d 4c 08 00 13 00 00 00  |MLML..E$ML......|
    0009ea80  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    0009ec00  79 6f 75 20 61 72 65 20  6d 79 20 66 72 69 65 6e  |you are my frien|
    0009ec10  64 21 0a 00 00 00 00 00  00 00 00 00 00 00 00 00  |d!..............|
    0009ec20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    027100004

    4.示例解析

    对如上创建的文件系统进行解析如下。

    4.1 保留区

    4.1.1 BPB和启动扇区

    启动跳转:本身占2字节它将程序执行流程跳转到引导程序处。

    OEMNAME:这部分占8字节,其内容由创建该文件系统的OEM厂商具体安排。

    详细参数请参见:FAT文件系统规范v1.03学习笔记---1.保留区之启动扇区与BPB

    4.1.2 引导程序

     

    引导程序代码:FAT32的DBR引导程序占用420字节,对于没有安装操作系统的分区来说这段程序是没有用处的。

    结束标志:为“55 AA”

    4.1.3 FSInfo区

    FAT32文件系统在保留区中安排了一个文件系统信息扇区,用以记录数据区中空闲簇的数量及下一个空闲簇的簇号,该扇区一般在分区的1号扇区,也就是紧跟着BPB和启动扇区后的一个扇区

    详细请参见:FAT文件系统规范v1.03学习笔记---1.保留区之 Fat32 FSInfo扇区结构和备份启动扇区

    4.1.4 BPB与启动扇区备份


    4.1.5 保留区之剩余部分空间

    4.2 FAT区

    FAT区一般为两个,用于备份。对于FAT32每4个字节表示一簇,用来表示簇的状态。由BPB分区中FATsz32可知FAT区大小为0x0268个也就是616个扇区。

    • FAT表结构及作用

    (1)FAT32文件一般有两份FAT,他们由格式化程序在对分区进行格式化时创建,FAT1是主,FAT2是备份。

    (2)FAT1跟在保留分区之后,其具体地址由BPB参数中指定,FAT2跟在FAT1的后面。

    (3)FAT表由FAT表项构成,我们把FAT表项简称FAT项,每个FAT项占用4字节。

    (4)每个FAT项都有一个固定的编号,这个编号从0开始。

    (5)FAT表项的前两个FAT项为文件系统保留使用,0号FAT为介质类型,1号FAT为文件系统错误标志。

    (6)分区的数据区中每个簇都会映射到FAT表中的唯一一个FAT项,因为0号FAT和1号FAT被系统占用,用户的数据从2号FAT开始记录。

    (7)如果某个文件占用很多个簇,则第一个FAT项记录下一个FAT项的编号(既簇号),如果这个文件结束了,则用“0F FF FF FF”表示。

    (8)分区格式化后,用户文件以簇为单位存放在数据区中,一个文件至少占用一个簇。

    (9)FAT的主要作用是标明分区存储的介质以及簇的使用情况

    • 定位FAT绝对位置的方法

    (1)首先从MBR的分区表中得知分区的起始扇区,偏移到此扇区(我的是单分区,没有分区表?)。

    (2)从DBR的BPB中得知DBR的保留扇区数,FAT表的个数,FAT表的大小。

    (3)因此FAT1=分区起始扇区+保留扇区数,FAT2=分区起始扇区+保留扇区数+FAT1大小。

    4.3 文件与目录数据区

    由于0号簇和1号簇用于特殊用途,实际目录和文件是从2号簇开始存放

    由hello.txt目录项可知它的内容存储在0x00000008的簇(8号簇)里面,如下图:

    再去回看前面FAT区中8号簇的状态为0ffffffff,表示这是最后一个簇

    •  数据区的定位方式

    数据区的位置在FAT2的后面,具体定位方式如下;

    (1)通过MBR中的分区表信息得知分区的起始位置。

    (2)通过分区中BPB保留扇区数以及FAT表的大小,FAT表的个数。

    (3)通过上面的信息就可以找到数据区的起始位置,根目录=数据区的起始扇区+(簇大小*2)。

    • 数据区分类

    数据区的内容主要由三部分组成:根目录,子目录和文件内容。在数据区中是以“簇”为单位进行存储的,2号簇被分配给根目录使用。

    • 根目录的定位方式

    根目录=分区起始扇区+DBR保留扇区+(FAT表*2)+(簇大小*2)

    FAT32文件系统中,分区根目录下的文件和目录都放在根目录区中,子目录中的文件和目录都放在子目录区中,并且没每32个字节为一个目录项,

    每个目录项纪录着一个目录或文件(也可能是多个目录项记录一个文件或目录)

    • 目录项分类

    在FAT32文件系统中,目录项可以分为四类:卷标目录项、“.”和“..”目录项、短文件名目录项、长文件名目录项

    (1)卷标目录项:卷标就是分区的名字,可以在格式化分区时创建,也可以随意修改,长度为11字节。

    (2)“.”和“..”目录项:“.”表示当前目录,“..”表示上一层目录。这两个目录项多存在子目录中。

    (3)短文件名目录项:所谓短文件名既文件名的“8.3”格式,此格式支持主文件名不能超过8字节,扩展名不能超过3字节。短文件名目录始终存放在一个目录项中。

    (4)长文件名目录项:由于短文件名“8.3”的格式远远不能满足现实中的需求,所以就出现了长文件名,长文件名其实就是将文件名进行分段,分成若干个短文件名进行存储。

    • 长文件名处理原则

    (1)系统取长文件名的前6个字符加上“~1”形成短文件名,其扩展名不变;

    (2)如果已存在这个名字的文件,则符号“~”后的数字自动增加;

    (3)如果文件名内存在windows非法的字符,则以下划线“_”代替;

    (4)长文件名目录项采用倒叙的方式进行记录。

  • 相关阅读:
    tuple 元组及字典dict
    day 49 css属性补充浮动 属性定位 抽屉作业
    day48 选择器(基本、层级 、属性) css属性
    day47 列表 表单 css初识
    day 46 http和html
    day 45索引
    day 44 练习题讲解 多表查询
    day 40 多表查询 子查询
    day39 表之间的关联关系、 补充 表操作总结 where 、group by、
    day38 数据类型 约束条件
  • 原文地址:https://www.cnblogs.com/smartjourneys/p/8446449.html
Copyright © 2011-2022 走看看