图解 FAT 文件系统之基础知识(一)
来源:公众号【鱼鹰谈单片机】
作者:鱼鹰Osprey
ID :emOsprey
FAT 文件系统是什么,当你格式化 U 盘之后 U 盘发生了什么,为什么删除的文件还可以再恢复?买的 U 盘明明写着 16 G,实际却只有15 G,这里隐藏了什么事实?这些问题,将由鱼鹰一一为你解答(佛系更新,喜欢的话就关注鱼鹰吧)。
FAT 文件系统随着发展,经历了多个版本,从 FAT12 到 FAT16 再到 FAT32,exFAT,每一个版本的迭代都是容量的巨大提升……
你以为鱼鹰会像书本一样长篇大论历史?那你错了,关于这些历史感兴趣的话可以自行查阅资料,鱼鹰就不多谈了。本篇主要介绍 FAT 文件系统的通用知识点。
文件系统整体结构
我们看看当你的 U 盘(16 G,鱼鹰亲自试验并图解)格式化为 FAT32 格式后,U盘发生了什么:
这里将 U盘分成了三个分区,类似你将电脑的硬盘分成C盘、D盘、E盘,这里的新加卷、分区2、分区3 就是目前 U盘上建立的三个分区,但事实上,我们一般不会将 U 盘分成三个分区,一个就够用了,只是鱼鹰想告诉你,这在 U 盘也可以做到。
MBR
在 FAT 文件系统中, 0 扇区必定是 MBR,这个扇区包含了磁盘(U 盘)很多信息,比如整个 U 盘的大小(容量),即扇区总数,各个分区的起始扇区、分区大小,引导代码等。
前面 446 个字节和主引导代码有关,因为在单片机系统中一般不会使用这种引导方式引导操作系统,所以按下不表。
我们主要关注后面的分区信息和一些标志:
分区表项具体含义可看该图:
这里有一个标志,即扇区最后的两个字节,一般是 55 AA(0xAA55),如果说你的扇区里面没有这个标志,那么系统就不认为这是一个 FAT 文件系统,更不用说进行接下来的其他验证操作了。
我们从上图可以看到,一个 MBR 可以记录四个分区信息,但是你会发现你的 U盘可以分成超过四个分区,那么这又是怎么回事?
原因在于,可以使用逻辑分区。即可设置三个主分区,另一个分区设置为逻辑分区,这个逻辑分区里面可以分成很多很多分区,这就是它为什么能创建超过四个分区的原因。
当然,我们目前也没必要深入了解逻辑分区是怎么一回事,先把基本分区搞定再说。
MBR
说完 MBR,我们再说一个和 MBR 很像的一个扇区,DBR。
从上图我们可以看到,每一个分区的第一个扇区必定是 DBR,这是做什么用的?
我们知道 MBR 记录的分区信息十分有限,只有分区的开始扇区、分区的大小、分区类型、引导标志(表示该分区是否可被引导,通俗的话说,就是这个分区是否存在操作系统)等有限信息,我们不知道这个分区叫什么名字,文件系统的版本号是多少等。所以我们需要一个扇区保存这些信息。这就是 DBR的作用。
如果说MBR保存的是整个磁盘的基本信息,那么 DBR 保存的就是当前分区的基本信息。
我们可以看到 DBR 的扇区结尾也是一样的结束标志,所以它们是比较相似的,在有些资料中,如果不区分它们的话,很容易让人迷惑。
隐藏扇区
细看这张图,你会发现其中存在隐藏扇区。隐藏扇区指的是扇区0到DBR扇区之间的空间。换句话说,从整个磁盘开始到分区部分的扇区称之为隐藏扇区(每一个分区都有自己的隐藏扇区),因为这些扇区对于分区而言是不可见的,也不可以被分区内的文件系统所管理。
这部分扇区数保存在 DBR 中。
当然,除了这部分扇区不被当前分区管理外,其他分区也不可以被当前分区管理,也可说其他分区也对当前分区隐藏了,但不被 DBR 所记录。
从这个角度说,每一个分区都是一个独立的文件系统,比如一个 U 盘可以同时创建一个 FAT32 文件系统分区,同时还可以创建一个 FAT16 文件系统分区,他们之间并不会相互影响。
同时,格式化某个分区不会影响其他分区的正常使用,比如 C盘格式化或重装系统并不会影响D盘的数据,这就是为什么说要分区的原因了,否则一个硬盘只分一个区,想重装系统的话,很多数据都会丢失,包括桌面文件。
这就是为什么最好把数据放在除 C 盘外的区域了,当然为了方便,你也可以使用快捷方式,将文件指向其他盘,而将快捷方式放桌面。
保留扇区
在每个分区之内,我们可以看到有部分扇区被文件系统认为是保留扇区,而这些所谓的保留扇区才是实现FAT文件系统的关键。
(这里为了图解清晰,并没有按照比例图解,实际上,数据区比保留区空间大的多)
这里有 DBR、FSINFO、FAT,还有为了安全考虑,存有他们的备份信息(如果文件系统损坏,可以尝试使用备份恢复他们)。
但我们还可以从上面知道,除了这些,还有一部分是真正的保留扇区,即上面的空白部分,这些保留扇区大小不是固定的,但确实占用了空间,而你却无法使用它们。
文章开头,有个疑问,为什么明明买的是 16 G U盘,格式化后,系统却提示我们只有 15 G,这少了 1 G 空间去哪了?
最大头,我相信大家都知道了,就是 1024 和 1000 进制的区别了,商家说的 16 G 是按照1000 为单位的,而系统按照 1024 计算,当然不一致了。
还有就是一般 MBR 之后会有一些保留分区存在(如果磁盘空间有限,可以不需要)。
另外就是文件系统本身占用的空间了(即上面的保留扇区),如果有多个分区,那么显示的只有当前分区的大小,其他分区大小是无法查看的。
而如果是单个分区,那么显示的大小只是数据区大小而已,保留区并不在显示空间内,你也不能直接通过文件的方式操作它。
还有就是数据区的空间使用簇来进行管理的,不满一簇大小的扇区空间,将直接丢弃不被文件系统所使用,这也会损失一点空间。
而有些分区为了效率,会将分区进行对齐处理,未对齐部分也不能使用。
种种原因,导致显示的空间比实际要小,不过对于大容量的存储介质来说,这点损失根本不算什么,而且在后面你会发现,为了高效管理空间,还有其他损失。
本篇笔记本打算介绍分区的簇、FAT等相关知识的,但目前文章太长了,只能下期再见了。
推荐阅读:
嵌入式系统优先级详解
KEIL 调试经验总结
线程CPU使用率到底该如何计算?
许久以后,你会感谢自己写的异常处理代码
终极串口接收方式,极致效率
延时功能进化论(合集)
如何写一个健壮且高效的串口接收程序?
打了多年的单片机调试断点到底应该怎么设置?| 颠覆认知
-THE END-
如果对你有帮助,记得转发分享支持鱼鹰!
微信公众号「鱼鹰谈单片机」
每周一更单片机知识
长按后前往图中包含的公众号关注
图解 FAT 文件系统之基础知识(一)相关推荐
- git flow 命名规范 驼峰_图解ThinkPHP5框架(一):基础知识,开发规范与目录结构
php中文网最新课程 每日17点准时技术干货分享 基于最新ThinkPHP5.0.8制定,原稿是xmind思维导图制作,如果觉得图片看不太清楚,可以下载xmind源文件,用xmind软件打开. 另外, ...
- 分布式文件系统KFS基础知识介绍
Kosmos distributed file system,简称KFS,是一个类GFS的分布式文件系统,被设计用于分布式的结构化存储.下面将对KFS的体系结构进行简单介绍,最后给出一个使用KFS C ...
- fat文件系统基础知识
文件分配表(英语:File Allocation Table,首字母缩略字:FAT),是一种由微软发明并拥有部分专利的文件系统,供MS-DOS使用,也是所有非NT核心的Windows系统使用的文件系统 ...
- Linux操作系统文件系统基础知识详解
标签:基础知识操作系统根目录Linux程序 一 .Linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法.主要体现在对文件和目录的组织上. 目录提供了管理文件的一个方便而有效的途径. Li ...
- linux文件系统基础知识
这两天看了一本fedora 6的实践教程,下面是有关linux文件系统知识的学习笔记: 1.linux文件系统分配策略: 块分配( block allocation ) 和 扩展分配 ( e ...
- linux文本运行层次,Linux基础知识之---文件系统层级结构
#Linux基础知识之---文件系统层级结构 @(Linux系统)[基础知识,文件系统,层级结构,FHS] 一切皆文件: 在Linux中,无论是目录.配置.cpu.内存.键盘.鼠标.或者运行中的系统及 ...
- unix/linux文件系统基础知识
1.linux文件系统分配策略: 块分配( block allocation ) 和 扩展分配 ( extent allocation ) 块分配:磁盘上的文件块根据需要分配给文件,避免了存储空间的浪 ...
- 常用电子元件基础知识(图解)
常用电子元件基础知识(图解) 分类: 基础电路2009-04-16 16:483387人阅读评论(5)收藏举报 工作c测试存储 电容 电容器俗称电容.它是在两个金属电机之间夹了一层电介质构成.所以它具 ...
- Linux基础知识与文件系统简介
Linux基础知识与文件系统简介 参考文献:Ubuntu Linux 基础教程 Linux是在什么样的历史背景下出现的 Linux的诞生与发展与UNIX系统.Minix系统.Internet.GNU计 ...
- linux基础知识之磁盘管理及文件系统
linux基础知识之磁盘管理及文件系统管理 磁盘管理及文件系统管理 一.磁盘硬件介绍 1. 接口类型 2. 硬盘种类 3. 磁盘命名 二.磁盘分区及文件系统介绍 1. 分区 1.1 什么是分区 1.2 ...
最新文章
- SQLite header and source version mismatch解决方案
- 正则表达式 (re包)——python(快餐)
- 【信号与系统】三大变换公式表 | 傅里叶变换 | 拉普拉斯变换 | Z变换
- Android EditText监测(TextWatcher)输入后延时500ms再搜索
- python定义结构体_python中定义结构体的方法
- 服务器系统怎么打驱动精灵,win7系统如何使用驱动精灵?教你在win7系统使用驱动精灵的方法...
- Java集成快递100的订阅服务和根据物流单号查询物流详情的接口
- 启动系统提示“NTLDR is missing”的解决办法
- 《西部世界》第三季开播,机器人会比人类更有人性吗?
- 基于JAVA高校教材征订管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
- fiddler手机下载证书提示No root certificate was found. Have you enabled HTTPS traff 解决方法 及手机配置代理后无网络问题
- 请假工资扣费总额计算机公式,病假扣款计算公式excel
- 著者四角号码查询_著者姓名汉语拼音与四角号码数字混合编制书次号之见
- 什么是客户关系管理CRM?
- linux xdm 启动执行文件,Linux下配置XDM登录服务器
- JAVA测试题-定义一个运动员(Sportsman)类,包含姓名(name)、跳高(highJump)
- html5 xml在线编辑,XML 编辑器
- OpenStack-Ironic裸金属简介
- js setTimeout 参数传递使用
- 判断浏览器是pc端还是手机端