1.引言

FAT文件系统在Windows比较常见,相对于ext系统而言,也比较简单。是学习文件系统的切入点。

2.FAT16的基本结构

首先先了解下FAT16文件系统的基本结构依次为:DBR扇区、FAT表1、FAT表2、根目录和数据区。

DBR扇区:DBR是操作系统可以直接访问的第一个扇区,包括一个引导程序和一个称为BPB的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区跟目录前两个文件是不是操作系统的引导文件。如果确定是,就将其读入内存,并把控制权交给该文件。BPB参数块记录着本分区的启始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元的大小等重要参数。

FAT1,FAT2:是簇的链表。在根据目录项获取文件的首簇号后,在FAT 找到对应的簇,可以找到下一个簇,一直到文件结束。对于FAT16,每个簇用16Bit来表示,而对于FAT32,使用32Bit来表示。这应该是两者之间的重要区别。

根目录:根目录的作用就是有文件或者目录的首簇号,以及文件的长度(目录的长度是0)。FAT16中,根目录的所占空间可以根据BPB中的参数——Maximum Root Directory Entries(0x11,2bytes)。

数据区:文件等数据待的地方。紧跟着根目录。从2号簇开始。

3.查找文件的过程

根据DBR中的一些参数得到FAT和根目录的位置。根据根目录得到次级目录的簇号(对于更多级的目录依此类推),来到该簇后,再根据文件名得到查到对应的文件的首簇和文件长度。根据文件长度得到文件所占的簇的数量。由首簇号到FAT查看文件的簇链表,依次得到文件的各个簇,从而也就得到了文件的全部内容。

4.查找文件示例

选取安卓手机中modem 分区作为对象。modem 在机台里的挂载点是firmware,可以adb  shell 进去系统之后,cd firmware看看里面的内容。里面有两个文件夹:image和verinfo。而我的目的就是要读到verinfo文件夹里面的文件ver_info.txt。将modem dd出来,然后使用winhex查看二进制文件。

4.1 DBR

先看通过winhex查看的结果。这个扇区里面基本上能得到大部分的文件系统的参数。(特别注意,存储是按照小端模式)

下面的表,解释了一些主要参数的意义。

4.2 FAT

根据上面的参数,我们可以算出FAT1的偏移地址以及根目录的偏移值。

FAT1偏移地址:保留扇区(FAT1之前的扇区,包括引导扇区)之后就是FAT1。因此可以得到,FAT1的偏移地址就是1个扇区的位置,也就是512。

FAT2偏移地址:FA1偏移地址+FAT1的大小,512+21*512 = 11264

2字节表示一个簇的状态。具体意义如下表所示:

每个簇对应的0x0002-0xFFEF之间的值,表示要读取文件那么下一个簇的簇号。

4.3 根目录

根目录偏移地址: FAT2偏移地址+ FAT2的大小,11264+21*512= 22016

下面看一下根目录的前面部分:

看到这里,就可以看到前面提到的两个文件夹了。在根目录中,一个文件或者一个目录用32字节来表示。

因此,可以得到,verinfo目录的首簇号是 9F 12 也就是 0x129F = 4767号簇。

根目录的偏移地址是22016,根目录占32个扇区,所以,2号簇的位置是:22016+32*512=38400 。可以得到verinfo的偏移地址是38400 +(4767-2)*512*32 = 78108160

看看这个位置的二进制:

显然,接下来可以看到这个目录下面,会有ver_info.txt的文件的首簇号和文件的长度。首簇号是 A0 12 也就是0x12A0=4768。文件长度是1F 也就是31<<512*32,因此只占一个簇,不需要回去查看FAT来找到剩下的簇。

根据簇号,又可以得到这个文件所在位置:(4768-2)*512*32+38400 = 78124544

看看这个位置的二进制:

到这里,也就看到了我们要查看的文件的内容。事实上,这和用mount挂载出来看到的结果是一样的,撒花~~

看这个还是花了很多时间的。FAT16和FAT32也有所区别,但是实际上大同小异。下篇写ext2文件系统的结构。

参考文章:http://www.xuebuyuan.com/598485.html

http://blog.csdn.net/menghnhhuan/article/details/4270168

非常感谢!

fat16 文件系统的结构相关推荐

  1. android 读写sd文件系统,SD卡FAT16文件系统的学习笔记

    一.读文件的流程读物理扇区0,得到引导扇(逻辑扇区0)的偏移地址. 读引导扇的内容,得到文件系统基本配置信息. 根据文件系统的基本配置信息计算FAT,FDT,数据簇的起始地址和大小. 根据要读的文件名 ...

  2. 操作系统实验——简易FAT16文件系统的实现

    操作系统实验--简易FAT16文件系统的实现 前言 实验要求 FAT16基础知识 磁盘组成部分 分区原理 思路 完整代码 前言 暑假啦!呼,所有的补课终于也都结束了,虽然绩点还是一如既往的拉跨,但是很 ...

  3. 电子工程师名片——FAT16文件系统(转)

    源:电子工程师名片--FAT16文件系统 从8月8号开始,连续一个月利用每天下班时间和周末的时间终于初步完成了一个电子工程师的电路板名片,就像U盘一样,不过这个FLASH只有64KB的大小,用的单片机 ...

  4. FAT16文件系统解析(C 版本)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 今天FA ...

  5. FAT16文件系统简介

    本文转自:<FAT16文件系统简介> 有必要说明一下,以下对FAT16系统的介绍,很多都是参考文献.由于FAT16系统一般在U盘.MMC卡.SD卡以及一些小型存储设备上使用比较多,以后把这 ...

  6. linux fat16 id,解析FAT16文件系统

    前面总结了usb,现在总结一下fat文件系统,首先看看下文. 那偶就不用那么辛苦总结了. 首先需要介绍一个工具winhex,江湖上到处流传这种武器的用法是恢复数据,其实这里不是用来恢复,这里是用来读数 ...

  7. 电子工程师名片——FAT16文件系统

    从8月8号开始,连续一个月利用每天下班时间和周末的时间终于初步完成了一个电子工程师的电路板名片,就像U盘一样,不过这个FLASH只有64KB的大小,用的单片机是C8051F320,是一个USB型的单片 ...

  8. stm32 模拟U盘IAP升级 与 FAT16文件系统

    如果用的MCU有USB接口,那么使用模拟U盘升级程序,不失为一个好办法,因为 第1,模拟U盘,不需要驱动,也不需要上位机,现场操作非常方便, 第2,USB传输速度快,升级过程耗时少,且可靠. 这项技术 ...

  9. FAT16文件系统之总结构分析(一)

    硬盘是用来存储数据的,为了使用和管理的方便,这些数据以文件的形式存储存储在硬盘上.任何 操作系统都有自己的文件管理系统,不同的文件系统又有不同的逻辑组织方式,要对硬盘进行高效 的管理并对数据进行恢复, ...

最新文章

  1. linux系统调用 ftruncate设置文件大小
  2. 哈尔滨商业大学计算机与信息工程学院地址,计算机与信息工程学院
  3. Yann LeCun 怒喷 Sophia:这就是彻头彻尾的骗局
  4. C#字符串格式化说明(String.Format) (zz.IS2120)
  5. md5模块(Python内置模块)和hashlib模块
  6. w7计算机不显示移动硬盘,win7系统不显示移动硬盘怎么回事_win7移动硬盘在电脑上显示不出来如何处理-win7之家...
  7. iphone android传照片大小,iPhone竟然可以传文件到安卓机?99%的人都不知道
  8. audio.js的研究与使用
  9. 基于mysql的可视化日志管理——loganalyzer
  10. 2.Modbus通信协议-软件调试4个工具软件(推荐)
  11. 罗技鼠标驱动G HUB导致触摸板无法使用
  12. linux 图片转视频教程,如何在Ubuntu上转换图像、音频和视频格式
  13. C语言实现方程组LU分解法和列主元LU分解法
  14. LeetCola_19_删除链表的倒数第N个节点_0723M
  15. 访问swagger2时出现空白页
  16. win7 系统打开文件扩展名
  17. 解决安装vmware以后,系统服务增多,系统变慢的问题。
  18. 卷积的拉普拉斯变换等于拉普拉斯变换的乘积
  19. C#.NET PrintDocument 自定义报表数据打印
  20. 高鸿业微观经济学第8版笔记和课后答案

热门文章

  1. 黄金 白银T+D 盈利计算器
  2. 虚拟化运维中:为什么对网络流量监控这么重要?
  3. 华为电脑linux装win7不用u盘,华为笔记本开不了机 怎么用u盘安装windows7
  4. 【天光学术】下面这篇,带你走进研究生实证论文写作进阶之路!
  5. Java判断字符串是否为非负整数 / 数字
  6. 用Python写了个绝地求生(附源码)
  7. 清风数学建模代码笔记3(更新课_2
  8. 2021年通辽市高考成绩查询,2021年通辽高考状元是谁分数多少分,历年通辽高考状元名单...
  9. 3D基础--Vertex
  10. 跳出程序员思维:如何应对上手英文工具站的几点误区