FAT32文件系统的存储组织结构
(一)
http://blog.chinaunix.net/uid-26913704-id-3213948.html
(二)
http://blog.chinaunix.net/uid-26913704-id-3213951.html


FAT32 存放的内容 从低地址 到 高地址 一般如下
* DBR (boot sector)
* FAT1
* FAT2
* root (目录信息)
* data(数据部分)


FAT boot sector

该U盘目前还没有任何的文件,是个空U盘

WinHex打开U盘

20H处的4个字节为扇区总数
0x00E5EF00 = 15,068,928(10)
15068928*512(字节) = 7,715,291,136(字节)
将近7G多,与windows下基本一致

其它相关信息
偏移0BH:扇区字节数 00 02 即0X0200,512字节
偏移0DH:每簇扇区数 08 ,即每簇包括8个扇区, 一个族的大小为 8*512字节=4*1024字节,即4KB(也就是文件存取的最小单位是 4KB(一个“块”的大小))
偏移0EH:保留扇区数 48 0D即0x0D48 ,保留3400个扇区
偏移10H:FAT表份数 02,即两个FAT表 FAT1,FAT2
偏移2CH:根目录入口簇号 02 00 00 00即根目录从02号簇开始
偏移24H:FAT表占用扇区数 5C 39 00 00, 即FAT表占14684个扇区



FAT32的 FAT表

FAT表(文件分配表),是FAT文件系统中用于磁盘数据索引和定位而引进的一种链式结构。在FAT文件系统中,文件的存储依照FAT表制定的簇链式数据结构来进行。同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。

在偏移0EH处存储了保留扇区的个数,这个保留扇区数指的就是当前分区内DBR到FAT表之间的所有扇区的个数(包括DBR但不包括FAT表)。因此,我们可以定位FAT表所在的起始偏移位置了,即0D48H*200H=1A9000H。

通过WinHex查看相应位置,发现1A9000H就是FAT1的地址

FAT2偏移地址 = FAT1偏移地址+FAT1的大小
=1A9000H + 395CH*200H
= 8D4800H


FAT32 root director

根目录起始扇区=保留扇区数+FAT×2+(起始簇-2)x每簇的扇区数
= 0D48H+395CH*2H+(2-2)*8H
=8000H

偏移地址 = 8000H*200H(扇区字节数) = 1000000H

目录区的一个目录项占用32个字节,可以是长文件名目录项、文件目录项、子目录项等。
参考:http://blog.chinaunix.net/uid-26913704-id-3213948.html

(1) 0– 7字节 文件正名。
(2) 8–10字节 文件扩展名。
(3) 11字节文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。
(4) 11–13字节仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校
验和等。
(5) 13–15字节 24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。
(6) 16–17字节 16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
(7) 18–19字节 16位二进制的文件最新访问日期,定义同(6)。
(8) 20–21字节 起始簇号的高16位。
(9) 22–23字节 16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。
(10)24–25字节 16位二进制的文件最新修改日期,定义同(6)。
(11)26–27字节 起始簇号的低16位。
(12)28–31字节 32位的文件字节长度。

其中第(4)至(8)项为以后陆续定义的。对于子目录项,其(12)为零;已删除目录项的首字节值为E5H。在可以使用长文件名的FAT32系统中,文件目录项保存该文件的短文件名,长文件名用若干个长文件名目录项保存,长文件名目录项倒序排在文件短目录项前面,全部是采用双字节内码保存的,每一项最多保存十三个字符内码,首字节指明是长文件名的第几项,11字节一般为0FH,12字节指明类型,13字节为校验和,26–27字节为零。


可以看到U盘的名称前7个字节,对比ASCII码表 可以看到文件名称是符合的

16进制 4D 41 53 54 45 52 20 20
10进制 77 65 83 84 69 82 32 32
字符 M A S T E R

如下 新建一个 ABC 目录 可以看到如下的目录信息


文件查找

按照上诉目录的32字节的信息

文件内容偏移位置 = root偏移+(文件的起初簇号 - 根目录起始簇号)*一个簇大小

我们新建a.txt文件
文件里面的内容是 12345678, 8个字节大小

可以看到 最后4个字节 08 00 00 00,说明文件大小是0x00000008(即8个字节大小)
看到偏移是04 00 即 文件起始簇号是4

文件内容偏移位置:
1000000H + (04 - 02)* 4KB
4KB= 2^12 = 1 0000 0000 0000 = 1000H

1000000+ 2*1000H = 1002000H
所以a.txt的内容在 1002000H的位置


数据恢复

重新做了实验,上面的地址都有了的变化

目前U盘下 文件有
ABC空目录
a.txt 内容是:12345678
b.txt内容是: 12345


现在使用 shift+delete 删除a.txt文件

WinHex 没有关闭,刷新后再显示

文件时候还存在 看到了不是A.txt一个文件,通过WinHex查看内容,可以看到12345678 的内容,说明就是a.txt

复制内容到新文件a.txt就能得到a.txt了 内容是12345678


FAT32 文件系统 实践相关推荐

  1. fat16和fat32文件系统学习

    根据自己电脑的fat,fat32分区来学习fat,fat32文件系统 fat16和fat32文件系统学习 - 下载频道 - CSDN.NET http://download.csdn.net/deta ...

  2. FAT32文件系统结构分析

    FAT,英文为File Allocation Table,文档分配表.先要记住几个概念:         扇区:一般扇区为512个字节.         簇:由若干个扇区组成,是存取数据的最小单位.如 ...

  3. SD卡FAT32文件系统格式

    一.声明 1.本文来源和主旨 2.本文测试环境 二.SD卡FAT文件系统 1.SD卡FAT32文件系统的整体布局 2.FAT文件系统简介 ① 文件分配表 ② 目录项 三.DBR(DOS BOOT RE ...

  4. 为什么 UEFI 方式启动的 U 盘必须使用 FAT32 文件系统?

    如果你希望更刺激地安装 Windows,那么你需要了解很多 Windows 系统相关的问题. 为什么 UEFI 方式启动的 U 盘必须使用 FAT32 文件系统? 因为 NTFS 是 Windows ...

  5. 快速了解FAT32文件系统

    文章目录 1 快速了解Fat32文件系统 1.1 只读文件系统 1.2 可写文件系统 1.3 Fat32分区结构 1 快速了解Fat32文件系统 1.1 只读文件系统 首先看一下我们的第一个需求,如果 ...

  6. JAVA——构建FAT32文件系统的DBR(DOS引导记录)类

    Maven <dependency><groupId>org.projectlombok</groupId><artifactId>lombok< ...

  7. SD卡移植FAT32文件系统无MBR

    问题:在研究SD卡和FAT32文件系统的时候,发现SD卡有的有MBR,有的没有MBR,这个为什么呢? 分析:MBR是主引导记录,是在给磁盘分区的时候建立的,我们的SD卡没有这个可能就是没有进行过分区操 ...

  8. 【转载】FAT32文件系统详解

    硬盘是用来存储数据的,为了使用和管理方便,这些数据以文件的形式存储在硬盘上.任何操作系统都有自己的文件管理系统,不同的文件系统又有各自不同的逻辑组织方式.例如:常见的文件系统有FAT,NTFS,EXT ...

  9. DSP之解读FAT32文件系统

    FAT 的全称是File Allocation Table(文件分配表系统),FAT 文件系统1982年开始应用于MS- DOS 中. FAT 文件系统主要的优点是它可以被多种操作系统访问,如MS- ...

  10. linux fat32 乱码,FAT32文件系统乱码的研究和分析

    刘宏斌 摘 要 FAT32文件分配表是Windows操作系统磁盘分区格式的一种.采用32位的文件分配表,使其对磁盘的管理能力增强.本文通过文件系统出现乱码对FAT32的文件分配表进行研究和分析 关键词 ...

最新文章

  1. 如何利用计算机做主题模型,利用概率主题模型的微博热点话题发现方法-计算机系统应用.PDF...
  2. Maven-学习笔记03【基础-Maven标准目录结构和常用命令】
  3. 第7章 Scrapy突破反爬虫的限制
  4. COVID-19 肺炎疫情数据实时监控(python 爬虫 + pyecharts 数据可视化 + wordcloud 词云图)
  5. 阿里云如何二次驱动云计算
  6. Java 项目开发及管理常用工具收集
  7. gogs只支持mysql5.7_在docker中跑nginx,gogs,mysql服务
  8. vue 循环tabs 标签页 组件_Vue render函数实战--实现tabs选项卡组件
  9. “我男友是程序员,修BUG比我重要,服了!”
  10. user-agent 批量汇总+随机返回一个
  11. 大学生必学练习题 - C 语言经典50例
  12. 原型工具Axure常见问题
  13. 绿城离职员工万言书全文
  14. HDU-1728-逃离迷宫
  15. 调用Android自带浏览器打开网页
  16. python 单位根检验代码_Python中ADF单位根检验实现查看结果的方法
  17. 8个成语接龙首尾相连_成语接龙该怎么接?每组开头有一个成语,要接龙,每一个词的末尾都是下一个词的开头,从 来日方长 到 取之不尽,中间要填8个...
  18. UVA10066(DP)
  19. ue4之将Sequence嵌入蓝图
  20. 怎么用python编写个apk_【android】如何利用python做Android项目自动化构建,并一键实现构建结果发送到钉钉通知以及通过二维码下载apk或者其他处理等功能...

热门文章

  1. 软件工程 | 第三章 需求分析
  2. ajax里的data的用法,Jquery中ajax方法data参数的用法
  3. 时间都去哪了?BPC电波授时信号的“零成本”伪造
  4. linux7配置ftp服务,RedHat 7配置FTP服务
  5. bin 文件分析(转)
  6. doe五步法_DOE实验设计的步骤与应用
  7. 计算机信息技术和网络技术的区别,信息技术计算机技术网络技术通信技术的区别与联系...
  8. 大型通用ERP生产管理系统源码
  9. jmeter请求grpc接口
  10. 对付U盘病毒彻底免疫