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)长文件名目录项采用倒叙的方式进行记录。
FAT32文件格式示例解析的更多相关文章
- xml scheme 示例解析
第一个示例解析 第二个示例解析
- MP4文件格式的解析
MP4文件格式的解析,以及MP4文件的分割算法 mp4应该算是一种比较复杂的媒体格式了,起源于QuickTime.以前研究的时候就花了一番的功夫,尤其是如何把它完美的融入到视频点播应用中,更是费尽了心 ...
- PHP 使用header函数设置HTTP头的示例解析 表头
PHP 使用header函数设置HTTP头的示例解析 表头 //定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header ...
- 【腾讯Bugly干货分享】WebVR如此近-three.js的WebVR示例解析
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ff1689a6c9121b1adb16 作者:苏晏烨 关于WebVR 最 ...
- Android 图表绘制 achartengine 示例解析
一. AChartEngine 简介 1. 项目地址 AChartEngine 简介 : AChartEngine 是 Android 平台的图表开发库, 能绘制 折线图, 饼图, 气泡图, 柱状图, ...
- SD卡中FAT32文件格式快速入门(图文详细介绍)【转】
本文转自:http://blog.csdn.net/mjx91282041/article/details/8904705 说明: MBR :Master Boot Record ( 主引导记录) D ...
- NFC(10)NDEF uri格式规范及读写示例(解析与封装ndef uri)
只有遵守NDEF uri 格式规范的数据才能写到nfc标签上. NDEF uri 格式规范 uri 只有两部分: 第1个字节是uri协议映射值,如:0x01 表示uri以 http://www.开头. ...
- NFC(9)NDEF文本格式规范及读写示例(解析与封装ndef 文本)
只有遵守NDEF文本格式规范的数据才能写到nfc标签上. NDEF文本格式规范 不管什么格式的数据本质上都是由一些字节组成的.对于NDEF文本格式来说. 1,这些数据的第1个字节描述了数据的状态, 2 ...
- SD卡中FAT32文件格式快速入门(图文详细介绍)
说明: MBR :Master Boot Record ( 主引导记录) DBR :DOS Boot Record ( 引导扇区) FAT :File Allocation Table ( 文件分配表 ...
随机推荐
- 2017-12-14python全栈9期第一天第五节之变量、常量、注释
6,变量. 变量:就是将一些运算的中间结果暂存到内存中,以便后续代码调用. 1,必须由数字,字母,下划线任意组合,且不能数字开头. 2,不能是python中的关键字. ['and', 'as', 'a ...
- mysql表基本查询
第一节 -- or # 单行注释/***多行注释*/ -- c创建数据库examCREATE DATABASE exam; USE exam; /*创建部门表*/CREATE TABLE dept( ...
- Spark源码剖析 - 计算引擎
本章导读 RDD作为Spark对各种数据计算模型的统一抽象,被用于迭代计算过程以及任务输出结果的缓存读写.在所有MapReduce框架中,shuffle是连接map任务和reduce任务的桥梁.map ...
- 解决svn检出后不显示图标的问题
解决svn检出后不显示图标的问题: 此文经过个人验证,可以解决TortoiseSVN图标显示异常问题: 问题出现原因:Windows Explorer Shell 支持 Overlay Icon 最多 ...
- http的三次握手四次挥手
http : 是一种超文本传输协议 传输指的是在客户端和服务器之间进行传输数据 http不仅仅可以传输文本,还可以传输图片.音频.视频等内容 https : 是一种更加安全的传输协议 在普通的传输协议 ...
- 从word得到表格数据插入数据库(6位行业代码)
复制表格到excel 点击表格左上角选中全部表格,然后crtl+c,再贴到excel中 可以发现,大类代码,单元格往下走,碰到下一个有值的之前,都是上一个的范围 填充空白单元格 1.选中前四列,然后c ...
- java四种权限修饰符(public > protected > (default) > private)
权限修饰符在哪里可以访问 (default) : 表示什么权限修饰符都不写 位置 public protected (default) private 同一个类 yes yes yes yes 同一个 ...
- nginx静态资源反向代理
server { listen 80; server_name music.didi365.com; index index.php index.html index.htm; root /alida ...
- Oracle SQL*Plus命令
登录数据库: 方式(1)当我们刚安装Oracle数据库时,登录账户时可以使用win+r 输入sqlplus,进入sqlplus命令窗口,然后输入用户名和密码,这里输入密码时不会有回显 方式(2)使用w ...
- Cisco Common Service Platform Collector - Hardcoded Credentials(CVE-2019-1723)
Cisco Common Service Platform Collector - Hardcoded Credentials 思科公共服务平台收集器-硬编码凭证(CVE-2019-1723) htt ...