FAT32 文件系统 实践
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 文件系统 实践相关推荐
- fat16和fat32文件系统学习
根据自己电脑的fat,fat32分区来学习fat,fat32文件系统 fat16和fat32文件系统学习 - 下载频道 - CSDN.NET http://download.csdn.net/deta ...
- FAT32文件系统结构分析
FAT,英文为File Allocation Table,文档分配表.先要记住几个概念: 扇区:一般扇区为512个字节. 簇:由若干个扇区组成,是存取数据的最小单位.如 ...
- SD卡FAT32文件系统格式
一.声明 1.本文来源和主旨 2.本文测试环境 二.SD卡FAT文件系统 1.SD卡FAT32文件系统的整体布局 2.FAT文件系统简介 ① 文件分配表 ② 目录项 三.DBR(DOS BOOT RE ...
- 为什么 UEFI 方式启动的 U 盘必须使用 FAT32 文件系统?
如果你希望更刺激地安装 Windows,那么你需要了解很多 Windows 系统相关的问题. 为什么 UEFI 方式启动的 U 盘必须使用 FAT32 文件系统? 因为 NTFS 是 Windows ...
- 快速了解FAT32文件系统
文章目录 1 快速了解Fat32文件系统 1.1 只读文件系统 1.2 可写文件系统 1.3 Fat32分区结构 1 快速了解Fat32文件系统 1.1 只读文件系统 首先看一下我们的第一个需求,如果 ...
- JAVA——构建FAT32文件系统的DBR(DOS引导记录)类
Maven <dependency><groupId>org.projectlombok</groupId><artifactId>lombok< ...
- SD卡移植FAT32文件系统无MBR
问题:在研究SD卡和FAT32文件系统的时候,发现SD卡有的有MBR,有的没有MBR,这个为什么呢? 分析:MBR是主引导记录,是在给磁盘分区的时候建立的,我们的SD卡没有这个可能就是没有进行过分区操 ...
- 【转载】FAT32文件系统详解
硬盘是用来存储数据的,为了使用和管理方便,这些数据以文件的形式存储在硬盘上.任何操作系统都有自己的文件管理系统,不同的文件系统又有各自不同的逻辑组织方式.例如:常见的文件系统有FAT,NTFS,EXT ...
- DSP之解读FAT32文件系统
FAT 的全称是File Allocation Table(文件分配表系统),FAT 文件系统1982年开始应用于MS- DOS 中. FAT 文件系统主要的优点是它可以被多种操作系统访问,如MS- ...
- linux fat32 乱码,FAT32文件系统乱码的研究和分析
刘宏斌 摘 要 FAT32文件分配表是Windows操作系统磁盘分区格式的一种.采用32位的文件分配表,使其对磁盘的管理能力增强.本文通过文件系统出现乱码对FAT32的文件分配表进行研究和分析 关键词 ...
最新文章
- 如何利用计算机做主题模型,利用概率主题模型的微博热点话题发现方法-计算机系统应用.PDF...
- Maven-学习笔记03【基础-Maven标准目录结构和常用命令】
- 第7章 Scrapy突破反爬虫的限制
- COVID-19 肺炎疫情数据实时监控(python 爬虫 + pyecharts 数据可视化 + wordcloud 词云图)
- 阿里云如何二次驱动云计算
- Java 项目开发及管理常用工具收集
- gogs只支持mysql5.7_在docker中跑nginx,gogs,mysql服务
- vue 循环tabs 标签页 组件_Vue render函数实战--实现tabs选项卡组件
- “我男友是程序员,修BUG比我重要,服了!”
- user-agent 批量汇总+随机返回一个
- 大学生必学练习题 - C 语言经典50例
- 原型工具Axure常见问题
- 绿城离职员工万言书全文
- HDU-1728-逃离迷宫
- 调用Android自带浏览器打开网页
- python 单位根检验代码_Python中ADF单位根检验实现查看结果的方法
- 8个成语接龙首尾相连_成语接龙该怎么接?每组开头有一个成语,要接龙,每一个词的末尾都是下一个词的开头,从 来日方长 到 取之不尽,中间要填8个...
- UVA10066(DP)
- ue4之将Sequence嵌入蓝图
- 怎么用python编写个apk_【android】如何利用python做Android项目自动化构建,并一键实现构建结果发送到钉钉通知以及通过二维码下载apk或者其他处理等功能...
热门文章
- 软件工程 | 第三章 需求分析
- ajax里的data的用法,Jquery中ajax方法data参数的用法
- 时间都去哪了?BPC电波授时信号的“零成本”伪造
- linux7配置ftp服务,RedHat 7配置FTP服务
- bin 文件分析(转)
- doe五步法_DOE实验设计的步骤与应用
- 计算机信息技术和网络技术的区别,信息技术计算机技术网络技术通信技术的区别与联系...
- 大型通用ERP生产管理系统源码
- jmeter请求grpc接口
- 对付U盘病毒彻底免疫