FAT32文件系统格式详解(图文针对具体文件存储,分析fat32 SD卡)
一. 用winhex工具分析SD卡(FAT32)
WinHex.exe -> 工具 -> 打开磁盘 -> 选中SD卡设备
图(1)
打开后主界面如下:
图(2)
二. FAT32磁盘格式分析
当磁盘有多个分区时:
fat32磁盘是由 MBR + 分区1(保留区 + 文件分配表 + 数据区)+ 分区2 + ......
其实,当我们在电脑上面,看到的U盘/SD卡设备,就是如上图红色选择部分,是不包括MBR部分的
图(3)
0x00000000 - 0x0013B000 保留区(DBR + FSINFO + ...)
0x0013B000 - 0x0089D800 FAT1
0x0089D800 - 0x01000000 FAT2
0x01000000 - 数据区
图(4)
三. 分析二进制数据(DBR FSINFO FAT1 FAT2 数据)
(1)启动扇区(DBR)
图(5)
0xEB 0x58 0x90: 跳转指令
0x54 0x48 0x52 0x45 0x45 0x53 0x20 0x20: 文件系统标志和版本号 MSDOS5.0
0x00 0x20: 0x200 (512)每个扇区512字节
0x08: 最小单元(簇)为0x08(8)扇区,8*512=4K
0xD8 0x09: 0x9D8(2520) 保留扇区2520个 2520*512=1.2M
0x02 : 2个FAT表(FAT1 FAT2)
0xF8 : 存储介质类型,F8标准值
0x46 0xCC 0xEC 0x00:文件系统总的扇区数:15518790 15518790*512=7.39G
0x14 0x3B 0x00 0x00:每个fat表占用的扇区总数:15124 15124*512 = 7.4M
0x02 0x00 0x00 0x00: 根目录所在第一个簇的簇号,通常情况下,根目录簇号为2
0x46 0x41 0x54 0x33 0x32 0x20 0x20 0x20:文件系统格式 FAT32
(2)信息扇区(FSINFO)
图(6)
0x52 0x52 0x61 0x41: 扩展引导标志
0x72 0x72 0x41 0x61: FSINFO签名
0x84 0x89 0x1D 0x00: 剩余所有的簇总数 0x1D8984 * 4k = 7928823808 byte = 7.38G
0x06 0x00: 下一个可用簇:6
0x55 0xAA: 结束标记字符
(3)文件分配表(FAT1)
在分析FAT表之前,我们先理解一下FAT32文件系统的一些基本信息:
扇区: 512 字节
簇: 文件系统的最小单元, 多个连续的扇区组成, 本SD卡为 4K(8个扇区,必须为2的整数次幂), 最大支持32K(64个扇区), 当我们保存一个1K的文件时,实际上,在文件系统中,是占用的是4K的空间大小,因为最小的存储单元是4K, 当我们保存一个10K的文件时,那么它需要占用三个簇,实际占用空间大小为12K。
FAT : File Allocation Table, 文件分配表, 当我们存储10K的文件时,需要使用三个簇,但是一定连续的三个簇吗? 并非一定是连续的,那么如何知道是使用了哪三个族呢,就需要我们文件分配表来记录了,第一个簇的地址,下一个簇是哪个,哪个是最后的结束簇。
FAT 是一组与数据簇号对应的列表, 所有簇从2开始进行编号,每个簇都有一个自己的地址编号,根目录默认簇号是为2
FAT32中每个簇的簇地址是有32bit(4个字节),FAT表中的所有字节位置以4字节为单位进行划分,并对所有划分后的位置由0进行地址编号。0号地址与1号地址被系统保留并存储特殊标志内容。从2号地址开始,每个地址对应于数据区的簇号,FAT表中的地址编号与数据区中的簇号相同。我们称FAT表中的这些地址为FAT表项,FAT表项中记录的值称为FAT表项值。(没理解的请反复多读几遍,至关重要)
当文件系统被创建,也就是进行格式化操作时,分配给FAT区域的空间将会被清空,在FAT1与FAT2的0号表项与1号表项写入特定值。由于创建文件系统的同时也会创建根目录,也就是为根目录分配了一个簇空间,通常为2号簇,与之对应的2号FAT表项记录为2号簇,被写入一个结束标记。
几点说明:
(1) 由于簇号起始于2号,所以FAT表项的0号表项与1号表项不与任何簇对应。FAT32的0号表项值总是“F8FFFF0F”。
(2)1号表项可能被用于记录脏标志,以说明文件系统没有被正常卸载或者磁盘表面存在错误。不过这个值并不重要。正常情况下1号表项的值为“FFFFFFFF”或“FFFFFF0F”。
(3)如果某个簇未被分配使用,它对应的FAT表项内容为0;
(4)当某个簇已被分配使用,则它对应的FAT表项内的FAT表项值也就是该文件的下一个存储位置的簇号。如果该文件结束于该簇,则在它的FAT表项中记录的是一个文件结束标记,对于FAT32而言,代表文件结束的FAT表项值为0x0FFFFFFF。
(5)如果某个簇存在坏扇区,则整个簇会用0xFFFFFF7标记为坏簇,这个坏簇标记就记录在它所对应的FAT表项中。
(6)在文件系统中新建文件时,如果新建的文件只占用一个簇,为其分配的簇对应的FAT表项将会写入结束标记。如果新建的文件不只占用一个簇,则在其所占用的每个簇对应的FAT表项中写入为其分配的下一簇的簇号,在最后一个簇对应的FAT表象中写入结束标记。
(7)新建目录时,只为其分配一个簇的空间,对应的FAT表项中写入结束标记。当目录增大超出一个簇的大小时,将会在空闲空间中继续为其分配一个簇,并在FAT表中为其建立FAT表链以描述它所占用的簇情况。
图(7)
【0号表项】:0x0FFFFFF8; FAT表起始固定标识
【1号表项】:0xFFFFFFFF; 默认值
【2号表项】:0x0FFFFFFF; 根目录 Root directory 所在簇,开始扇区32768
【3号表项】:0x0FFFFFFF; 目录 System Volume Information 所在簇,开始扇区32776 (32768+8)
【4号表项】:0x0FFFFFFF; 文件 WPSettings.dat 所在簇,开始扇区32784 (32776+8)
【5号表项】:0x0FFFFFFF; 文件 IndexerVolumeGuid 所在簇,开始扇区32792 (32784+8)
由于我们是把SD卡格式化后分析,所以fat32除了根目录外,无其他我们存储文件,我们拷贝一个build.log文件再分析。build.log的大小为10k, 需要占用三个簇。
图(8)
图(9)
【6号表项】:0x07 表项值为7,即指向下一个表项, 2号簇为根目录,对应的开始扇区为32768, 6号簇。开始的扇区为 32768 + 8 * (6-2)= 32800, 即为build.log的开始扇区。
【7号表项】:0x08 表项值为8,即指向下一个表项。
【8号表项】: 0x0FFFFFFF, 结束簇, 从6号簇build.log开始,到8号簇,文件结束。
到此,build.log的文件如何存储的,我们弄明白了,整个build.log保存在 6号簇-8号簇, 三个族存储了build.log内的数据,但是build.log的文件名/文件属性/最后修改时间/最后保存时间 这些信息保存在哪里呢?
由于build.log是存放在根目录下的,那我们来看下根目录的二进制数据:
图(10)
在查看根目录的二进制数据之前,我们还是先普及下基本信息:
(1)目录所在的扇区,都是以32 Bytes划分为一个单位,每个单位称为一个目录项。
(2)根据文件名及后缀,我们可以分为短目录文件,长目录文件,简单点理解,如果文件名>8 byte 或者后缀名>3, 则为长文件目录,否则为短文件目录
我们查看build.log(短文件目录)
图(11)
图(12)
文件名: build
后缀名: log
属性: 0x20 (0010 0000) 读写 归档
簇号: 0x06开始簇号
大小: 0x2800 10K
至此,build.log的 文件名称以及相关的属性信息,以及build.log文件的内容存储,都已经明白。
如果是长文件目录
图(13)
不再对具体的长文件目录进行分析。
(4)文件分配表(FAT2)
FAT2与FAT1完全相同
(5)数据区
参考资料:
https://blog.csdn.net/mjx91282041/article/details/8904705/
https://blog.csdn.net/u010650845/article/details/60780979
https://blog.csdn.net/eternally123/article/details/79836210
FAT32文件系统格式详解(图文针对具体文件存储,分析fat32 SD卡)相关推荐
- html播放mov格式视频,jQuery及video标签视频播放弹窗插件支持mp4,mov等格式详解(图文)...
在做html5做播放视频时,如果是mp4,ogg,webm等视频格式,用h5自带的video标签就可以实现,但苹果的mov格式视频video标签是不支持的. h5实现mp4视频播放:video标签仅支 ...
- 文件系统的详解与常见文件系统模式比较
目录 1. 文件系统的详解 2. 常见的文件系统比较 2.1 Windows下的文件系统 2.1.1 FAT16文件系统 2.1.2 FAT32文件系统 2.1.3 FAT64文件系统(exFAT文件 ...
- BMP格式详解<转>
BMP格式详解 BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Win ...
- bmp图片的格式详解
BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广 ...
- Ffmpeg快速命令使用 Ffmpeg选项详解 Ffmepg格式详解 常见视频文件格式详解
http://www.ffmpeg.com.cn/index.php/%E9%A6%96%E9%A1%B5 Ffmpeg快速命令使用 From Ffmpeg工程组 Jump to: navigatio ...
- [转]纯真IP数据库格式详解
纯真IP数据库格式详解 摘要 网络上的IP数据库以纯真版的最为流行,LumaQQ也采用了纯真版IP数据库做为IP查询功能的基础.不过关于其格式的文档却非常之少,后来终于在网上找到了一份文档,得以了解其 ...
- TCP数据包协议格式详解
出一个专栏把通信协议搞一下吧,万物互联的根本呀. IP 版本4位:4(二进制0100)表示IPv4,6(二进制0110)表示IPv6 报头长度(单位4byte):因为选项长度不确定,取值范围是5-15 ...
- BMP位图格式详解二--转载
转自:http://www.cnblogs.com/xiehy/archive/2011/06/07/2074405.html BMP文件格式,又称为Bitmap(位图)或是DIB(Device-In ...
- BMP位图格式详解二
BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Windows系统中广泛使用的图像文件格式.由于它可以不作任何变换地保存图像 ...
- Java字节码(.class文件)格式详解(一)
原文链接:http://www.blogjava.net/DLevin/archive/2011/09/05/358033.html 小介:去年在读<深入解析JVM>的时候写的,记得当时还 ...
最新文章
- 划重点!2020年,这些前沿技术最受关注
- string类型比较_redis存json数据时选择string还是hash
- android studio 如何导入工程文件,Android studio如何导入已有的eclipse工程
- linux6无法启动iscsi服务,RHEL6下安装配置ISCSI服务器
- 支持向量机(SVM)复习总结
- Docker学习2-虚拟化
- iPhone11用第三方的快充,电池健康度会下降很快吗?
- C# Winform 运行异常 CefSharp.core.dll 找不到指定的模块
- golang 使用 consul 做服务发现
- 数据结构笔记(十三)-- 串的堆分配存储表示
- 通过set赋值,与select赋值的区别
- html5整个桌面背景图片,HTML5 body设置全屏背景图片 如何让body的背景图片自适应整个屏----实战经验...
- 阿里矢量图标及其引入方式
- 为招商手机银行点个赞!
- 如何安全快速的迁移你的系统到固态硬盘
- UDP与TCP协议详解
- FFMPEG源码编译(Windows篇)
- HTML中利用JS调用PHP (以登录为例)
- excel快速删除空行
- JavaScript实现 数字转换为万 千万 百万
热门文章
- 网课答案免费搜题入口
- dtim 间隔(Delivery Traffic Indication Message)
- fisheye calib视野调整
- 加权平均数的例子_加权平均值和算术平均值的区别与公式
- 摄像头设计工程师面试技巧_系统设计面试准备的5个技巧
- 本科生学习的一些心得
- 宿华辞任快手CEO、程一笑接任;百世将国内快递业务68亿元出售给极兔|美通社头条...
- 图纸打印什么时候用蓝图_为什么工程图纸都是蓝色的?是叫“蓝图”吗?
- html 二维表_Qrcode 二维码 API 接入方法,任何内容都可以生成二维码
- Legend of Mir(传奇)官方源码学习3、服务端程序初始化过程