FAT,英文为File Allocation Table,文档分配表。先要记住几个概念:
扇区:一般扇区为512个字节。
:由若干个扇区组成,是存取数据的最小单位。如果簇大小为16K,文件大小为1字节,那也要用一个簇来存,而且该簇不用再拿来他用。
FAT文件系统就是专门管理这些簇的。一个文件可能占据一个或者多个簇,按正确的顺序去读取这些簇,就可以获取这个文件的内容了。
一、FAT16的基本结构
FAT16基本结构依次为:DBR扇区、FAT表1、FAT表2、根目录和数据区。
1、DBR扇区
DBR是操作系统可以直接访问的第一个扇区,包括一个引导程序和一个称为BPB的本分区参数记录表。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元的大小等重要参数。

2、FAT表1和FAT表2
FAT表1和FAT表2是保存簇状态的地方,从DBR可知一个FAT表是21个扇区。它里面的内容很简单就是指出下一个簇在哪里。盘里有多少个簇,FAT就有多少个项来描述它们。FAT16用16bit来描述一个簇。第0和第1个字节表示第0个簇,第2和第3个字节表示第1个簇,第4和第5个字节表示第2个簇…就这样,每个簇都有两个和它对应的字节,这两个字节里面存放的数据就是文件中下一个簇大小数据所在的簇号。
比如要读new.txt文件,从根目录中找到了它,读它的根目录信息知道它的第一个簇的簇号是5,于是把第5号簇的数据送出去,在FAT表中5号簇是第10和第11字节来表示的,于是去读第10和第11字节,得到0007,知道了文件接下来的数据保存在7号簇中,把7号簇的数据送出去,又去读第14和第15字节的数据,得到FFFF,说明文件到末尾了。
下面是FAT中数据的含义:

对于FAT16,每个簇用16Bit来表示,最大能表示65536,FAT16的簇最大为32K,因此FAT16最大只能支持6553632K约等于2G。因此大于2G的盘必须选择其他的文件系统,比如FAT32,没有簇用32bit来表示。
根据DBR的参数,我们可以算出FAT1的偏移地址以及根目录的偏移值。
FAT1偏移地址:保留扇区(FAT1之前的扇区,包括引导扇区)之后就是FAT1。因此可以得到,FAT1的偏移地址就是第1个扇区的位置,也就是512。大小为21个扇区,即21
512=10752字节。
FAT2偏移地址:FA1偏移地址+FAT1的大小,512+21512 = 11264。

3、根目录
根目录偏移地址: FAT2偏移地址+ FAT2的大小,11264+21
512= 22016。
根目录的偏移地址也是第1个簇的起始位置,根目录保存在第1个簇中,即第1个簇地址为22016,第2个簇为22016+32512=38400(每个簇占32个扇区)。我们来看看根目录的数据:

在根目录中,一个文件或者一个文件夹用32字节来表示。

根据这个我们就可以解读根目录的信息了,可以看到现在根目录中只有一个名字为IMAGE和名字为VERINFO的文件夹。可以看到VERINFO文件夹的首簇号是 9F 12 也就是 0x129F = 4767号簇。可以得到VERINFO文件夹的偏移地址是22016+(4767-1)
51232 = 78108160。数据如下:

VERINFO文件夹下文件信息的组织方式和根目录一样,可以看到现在VERINFO文件夹下有两个不知名的文件夹和一个叫ver_info.txt的文件。又可以继续得到该文件的首簇号和文件的长度。首簇号是 A0 12 也就是0x12A0=4768。文件长度是1F 也就是31字节,小于簇大小51232字节,因此只占一个簇,不需要回去查看FAT来找到剩下的簇。
该文件所在位置:22016+(4768-1)51232 = 78124544。

上面看到的数据就正好是ver_info.txt中保存的数据。

FAT16文件系统结构扇区数据分析相关推荐

  1. FAT16文件系统结构简述

    近一个礼拜为解决项目中的一个BUG而学习了一点新知识.大致总结出来和有兴趣的朋友分享学习一波. 这个 BUG是这样的,当系统将采集到的数据存到SD卡中时,未知问题导致单片机卡死在写数据到SD卡过程中某 ...

  2. yaffs2文件系统结构及应用

    文件系统是包括在一个磁盘(包括光盘.软盘.闪盘及其它存储设备)或分区中的目录结构:一个可应用的磁盘设备可以包含一个或多个文件系统:如果您想进入一个文件系统,首先您要做的是挂载(mount)文件系统:为 ...

  3. Linux 文件系统类型 文件系统结构 与Windows文件系统的比较

    Linux 文件系统类型 磁盘文件系统. 包括硬盘.CD-ROM.DVD.USB存储器.磁盘阵列等.常见文件系统格式有:autofs.coda.Ext(Extended File sytem,扩展文件 ...

  4. 13.Linux文件系统结构

    1.硬盘结构 文件系统结构,理解文件系统,要从文件储存说起. 硬盘结构: 硬盘相关专业术语: 硬盘的内部是金属盘片,将圆形的盘片划分成若干个扇形区域,这就是扇区.若干个扇区就组成整个盘片.为什么要分扇 ...

  5. Linux的文件系统结构

    1.硬盘结构 磁盘的内部并不是真空的,只是空气很干净:利于散热 文件系统结构,理解文件系统,就得从文件存储说起 磁盘的专业术语 磁盘的内部是金属片,将原型的盘片分成若干个扇形区域, 若干个扇区就组成一 ...

  6. 用WinHex查看SD卡FAT32文件系统结构

    一鼓作气,今儿忙里抽个闲,既然前篇"原创猛料"开了个好头,今晚就继续敲一篇补补更,呵呵~ 前段时间自己曾经写了一篇关于sd卡和Fat文件系统的自学笔记(http://blog.ch ...

  7. linux学习零基础教学课程:Linux文件系统结构

    全套学习资料移步至公众号[学神来啦]更多学习资料添加扣扣资源群:661308959 本节所讲内容:   13.1  硬盘结构   13.2  文件系统结构   13.2  硬链接和软链接   13.4 ...

  8. Linux系统介绍(二)文件系统结构

    Table of Contents 概述 根目录/ 二进制目录 配置文件目录 数据目录 内存目录 /dev目录 物理设备文件 /dev/tty跟/dev/pts /dev/null /proc目录 / ...

  9. linux+网络根文件系统,认识Linux根文件系统结构

    INTRO 认识Linux根文件系统结构,尽管Linux的根文件系统在形式表现上是一体的(所有数据目录均为根目录下的子目录),但实际它们是多个不同的[逻辑主体](为了实现不同的逻辑 功能)组合在一起的 ...

最新文章

  1. python程序员最害怕的东西,面试!恭喜你收到了offer,来看下吧
  2. mysql过滤复制的实现
  3. 被字节跳动T4级大佬鄙视了:让你10倍提升认知效率,就这3个方法!
  4. CYQ.Data.ProjectTool 项目配置工具发布(包源码)
  5. 如何让你的SQL运行得更快
  6. 如何通过 Serverless 提高 Java 微服务治理效率?
  7. java servlet+oracle 新手可看
  8. 南科大计算机系实力a,五大竞赛学科A+高校排行榜发布!北大实力碾压,科大赶超清华...
  9. H.264的CAVLC(编码.解码)过程详解
  10. Matlab运用mapping包在地图上绘制散点图(热力图)
  11. JS 逻辑中断(一)
  12. 最新JCR期刊影响因子及分区情况(中科院SCI期刊分区表)
  13. 消息钩子入门篇(4)---示例__外壳钩子(WH_SHELL)
  14. Android一键锁屏功能的实现,推荐一款非常好用的Android一键锁屏软件
  15. Java---设计【超市商品管理系统】
  16. 计算机专业省赛一等奖有什么好处,厉害了!计算机应用专业的他获省级书法比赛一等奖...
  17. 导出Excel功能的3种实现
  18. 技术科普丨景深到底是什么
  19. 二进制,八进制,十进制,十六进制转换算法
  20. openlayers6【二十二】vue addLayer实现点击地图添加图标要素信息,编辑点位信息

热门文章

  1. java前后端分离的实现方式_采用前后端分离的方式进行开发,实现了几种常用的文件上传功能...
  2. mysql日志的作用_MySQL 日志相关知识总结
  3. python占多少空间_Python如何查看变量占用空间大小
  4. 人人可用的AI大模型来了,“玩”TA还有奖金拿
  5. 一流科技CEO袁进辉:人工智能产业化困局和机遇 | 量子位·视点分享回顾
  6. 波士顿动力机器狗化身警犬入宅执法,网友:我不想生活在《黑镜》里
  7. 马斯克欢庆特斯拉年交付50万辆!国产三雄创新高,逼近其1/5
  8. 威马新车型,率先放话搭载L4自动驾驶
  9. 原型机拱手让人,飞行器停售,谷歌创始人押注的飞行汽车,如今搁浅
  10. idea springboot jrebel hotreloaded