为什么我的U盘空间变小了:图解 FAT 文件系统基础知识

嵌入式Linux

共 2502字,需浏览 6分钟

 ·

2021-12-14 16:11

作者 | 鱼鹰Osprey

转自 | 鱼鹰谈单片机


FAT 文件系统是什么,当你格式化 U 盘之后 U 盘发生了什么,为什么删除的文件还可以再恢复?买的 U 盘明明写着 16 G,实际却只有15 G,这里隐藏了什么事实?

FAT 文件系统随着发展,经历了多个版本,从 FAT12 到 FAT16 再到 FAT32,exFAT,每一个版本的迭代都是容量的巨大提升……

文件系统整体结构

我们看看当你的 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 之后会有一些保留分区存在(如果磁盘空间有限,可以不需要)。
另外就是文件系统本身占用的空间了(即上面的保留扇区),如果有多个分区,那么显示的只有当前分区的大小,其他分区大小是无法查看的。
而如果是单个分区,那么显示的大小只是数据区大小而已,保留区并不在显示空间内,你也不能直接通过文件的方式操作它。
还有就是数据区的空间使用来进行管理的,不满一簇大小的扇区空间,将直接丢弃不被文件系统所使用,这也会损失一点空间。
而有些分区为了效率,会将分区进行对齐处理,未对齐部分也不能使用。
种种原因,导致显示的空间比实际要小,不过对于大容量的存储介质来说,这点损失根本不算什么,而且在后面你会发现,为了高效管理空间,还有其他损失。

------------ END ------------



推荐阅读:

专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~

浏览 73
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报