硬盘文件系统系列之FAT

这篇具有很好参考价值的文章主要介绍了硬盘文件系统系列之FAT。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【一、FAT概述】

FAT(File Allocation Table)是一种由微软发明并拥有部分专利的文件系统,供MS-DOS使用,也是所有非NT核心的微软窗口使用的文件系统。FAT是“文件分配表”的意思,顾名思义,就是用来记录文件所在位置的表格,它对于硬盘的使用是非常重要的,假若丢失文件分配表,那么硬盘上的数据就会因无法定位而不能使用了。

FAT文件系统考虑当时电脑性能有限,所以未被复杂化,因此几乎所有个人电脑的操作系统都支持。其中我们接触最多的是FAT16、FAT32文件系统。

FAT有一个严重的缺点:当文件删除后写入新数据,FAT不会将文件整理成完整片段再写入,长期使用后会使文件数据变得逐渐分散,而减慢了读写速度。碎片整理是一种解决方法,但必须经常重组来保持FAT文件系统的效率。

【二、FAT16与FAT32介绍】

FAT16使用了16位的空间来表示每个扇区(Sector)配置文件的情形,故称之为FAT16;FAT32同理。

FAT16由于受到先天的限制,因此每超过一定容量的分区之后,它所使用的簇(Cluster)大小就必须扩增,以适应更大的磁盘空间。所谓簇就是磁盘空间的配置单位,就像图书馆内一格一格的书架一样。每个要存到磁盘的文件都必须配置足够数量的簇,才能存放到磁盘中。FAT16各分区与簇大小的关系如下表:

分区大小 FAT16簇大小
16MB-127MB 2KB
127MB-255MB 4KB
256MB-511MB 8KB
512MB-1023MB 16KB
1024MB-2047MB 32KB

FAT32文件系统使用了32bit宽的簇地址,所以称为FAT32。但是值得注意的一点是,在微软件的文件系统中只使用了低28位,最大容量为2^28*1024*32,约8.7TB的空量。FAT32各分区与簇大小的关系如下表:

分区大小 FAT32簇大小
32MB-259MB 512B
260MB-8GB 4KB
8GB-16GB 8KB
16GB-32GB 16KB
32GB以上 32KB

同FAT16相比,FAT32主要具有以下特点:
1. FAT32最大的优点是可以支持的磁盘大小达到2TB(2048GB),但是不能支持小于512MB的分区。
2. 由于采用了更小的簇,FAT32文件系统可以更有效率地保存信息。如两个分区大小都为2GB,一个分区采用了FAT16文件系统,另一个分区采用了FAT32文件系统。采用FAT16的分区的簇大小为32KB,而FAT32分区的簇只有4KB的大小。这样FAT32就比FAT16的存储效率要高很多。

有一点需要注意的是,FAT32 将记录簇链的二进制位数扩展到了32 位,32 位二进制位的簇链决定了FAT表最大可以寻址2T个簇。这样即使簇的大小为1 扇区,理论上仍然能够寻址1TB范围内的分区。但实际中FAT32 是不能寻址这样大的空间的,随着分区空间大小的增加,FAT表的记录数会变得 臃肿不堪,严重影响系统的性能。所以在实际中通常不格式化超过32GB的FAT32 分区。WIN2000及之上的OS已经不直接支持对超过32GB的分区格式化成FAT32。

【三、FAT文件系统结构】

主引导区 文件
分配表#1
文件
分配表#2
根目录 其他所有数据...
剩下磁盘空间

一个FAT文件系统包括四个不同的部分。

  1. 保留扇区,位于最开始的位置。第一个保留扇区是引导区(分区启动记录)。它包括一个称为基本输入输出参数块的区域(包括一些基本的文件系统信息尤其是它的类型和其它指向其它扇区的指针),通常包括操作系统的启动调用代码。保留扇区的总数记录在引导扇区中的一个参数中。引导扇区中的重要信息可以被DOS和OS/2中称为驱动器参数块的操作系统结构访问。

  2. FAT区域。它包含有两份文件分配表,这是出于系统冗余考虑,尽管它很少使用,即使是磁盘修复工具也很少使用它。它是分区信息的映射表,指示簇是如何存储的。

  3. 根目录区域。它是在根目录中存储文件和目录信息的目录表。在FAT32下它可以存在分区中的任何位置,但是在早期的版本中它永远紧随FAT区域之后。

  4. 数据区域。这是实际的文件和目录数据存储的区域,它占据了分区的绝大部分。通过简单地在FAT中添加文件链接的个数可以任意增加文件大小和子目录个数(只要有空簇存在)。然而需要注意的是每个簇只能被一个文件占有,这样的话如果在32KB大小的簇中有一个1KB大小的文件,那么31KB的空间就浪费掉了。

【四、文件系统引导原理】

4.1 MBR(master boot record)扇区:

说,电脑启动分几步:

(1) 按下计算机power键以后,开始执行主板bios程序。

(2) 进行完一系列检测和配置以后, 开始按bios中设定的系统引导顺序引导系统。

(3)假定现在是硬盘,Bios执行完自己的程序后把执行权交给硬盘。

(4) 交给硬盘后执行存储硬盘上的系统程序。

这里问:Bios执行完自己的程序后如何把执行权交给硬盘呢?交给硬盘后又执行存储在哪里的程序呢?

其实,称为mbr的一段代码起着举足轻重的作用。MBR(master boot record), 即主引导记录,有时也称主引导扇区。位于整个硬盘的0柱面0磁头1扇区(可以看作是硬盘的第一个扇区),bios在执行自己固有的程序以后就会jump到mbr中的第一条指令。将系统的控制权交由mbr来执行。

在总共512byte的主引导记录中,

a, MBR的引导程序占了其中的前446 个字节(0x0h~0x1BDH),

b, 随后的64个字节(0x1BEH~0x1FDH)为DPT(Disk PartitionTable,硬盘分区表),

c, 最后的两个字节“55 AA”(0x1FEH~0x1FFH)是分区有效结束标志。

MBR不随操作系统的不同而不同,意即不同的操作系统可能会存在相同的MBR,即使不同,MBR也不会夹带操作系统的性质,具有公共引导的特性。

我们来欣赏一段mbr。下面是用winhex查看的一块SanDisk U盘的mbr(手边现在没有SSD了,拿U盘来顶一下)。

硬盘文件系统系列之FAT

你的硬盘的MBR 引导代码可能并非这样。不过即使不同,所执行的功能大体是一样的。

我们看DPT 部分。操作系统为了便于用户对磁盘的管理。加入了磁盘分区的概念。即将一块磁盘逻辑划分为几块。

在DPT 共64 个字节中,以16个字节为分区表项单位描述一个分区的属性。也就是说,第一个分区表项描述一个分区的属性,一般为基本分区。第二个分区表项描述除基本分区外的其余空间,一般而言,就是我们所说的扩展分区。

因为这块U盘只有一个分区,所以我们只在上图中DPT的前16个字节看到有效数据。这里面有两个比较关键的数据,

(1) 0x01C6-0x01C9(DWORD): 0x148F00代表相对扇区数(Relative Sectors) 从该磁盘的开始到该分区的开始的位移量,以扇区来计算。

(2) 0x01CA-0x01CD(DWORD): 0x037FEC24代表总扇区数(Total Sectors) 该分区中的扇区总数。通过这个参数可以计算分区的容量。

也可以在Winhex里面直接查看:

硬盘文件系统系列之FAT


喜欢算术的童鞋们可以自己算算,然后与Winhex自行计算的结果是否一致。

4.2 扩展分区

扩展分区中的每个逻辑驱动器都存在一个类似于MBR的扩展引导记录( Extended Boot Record, EBR),也有人称之为虚拟mbr或扩展mbr,意思是一样的。扩展引导记录包括一个扩展分区表和该扇区的标签。扩展引导记录将记录只包含扩展分区中每个逻辑驱动器的第一个柱面的第一面的信息。一个逻辑驱动器中的引导扇区一般位于相对扇区32 或63。但是,如果磁盘上没有扩展分区,那么就不会有扩展引导记录和逻辑驱动器。

通过一幅4分区的磁盘结构图可以看到磁盘的大致组织形式。

硬盘文件系统系列之FAT

【五、FAT分区原理】

从前面的磁盘结构图可以看到基本分区有两部分组成:引导扇区+数据区。这部分我们着重研究FAT 格式分区内数据是如何存储的。

下面依次解释DBR、FAT1、FAT2、根目录、数据区、剩余扇区的概念。

5.1 DBR

DBR区(DOS BOOT RECORD)即操作系统引导记录区的意思,通常占用分区的第0扇区共512 个字节(特殊情况也要占用其它保留扇区,我们先说第0 扇)。

在这512 个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,OS引导程序,结束标志几部分组成。

下面以用的最多的FAT32 为例说明分区DBR各字节的含义(这里还是拿U盘顶一下):

0x00: 3个字节,代表跳转指令;

0x03: 8个字节,代表厂商标志和OS版本号;

0x0B: 53个字节,代表BPB;

0x40: 26个字节,代表扩展BPB;

0x5A: 420个字节,代表引导程序代码;

0x1FE: 2个字节,代表有效结束标志;

硬盘文件系统系列之FAT

硬盘文件系统系列之FAT

MBR将CPU执行转移给引导扇区,因此,引导扇区的前三个字节必须是合法的可执行的基于x86 的CPU指令。这通常是一条跳转指令,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分。

跳转指令之后是8 字节长的OEM ID,它是一个字符串, OEM ID标识了格式化该分区的操作系统的名称和版本号。

DBR的偏移0x5A开始的数据为操作系统引导代码。这是由偏移0x00 开始的跳转指令所指向的。在上图中所列出的跳转指令"EB 58 90" 清楚地指明了OS引导代码的偏移位置。如EB 58,即跳转到58h处,紧接着跳转指令的是一条空指令NOP(90),即开始于0x5A。此段指令在不同的操作系统上和不同的引导方式上,其内容也是不同的。

注:FAT16的跳转指令=EB 3C 90(FAT16现在基本不用了,在这里就不详细介绍了), NTFS的跳转指令=EB 52 90(NTFS后续会介绍)

5.2 保留扇区

在上述FAT文件系统DBR的偏移0x0E 处,用2 个字节存储保留扇区的数目。所谓保留扇区(有时候会叫系统扇区,隐藏扇区), 是指从分区DBR扇区开始的仅为系统所有的扇区,包括DBR扇区。在FAT16 文件系统中,保留扇区的数据通常设置为1,即仅仅DBR 扇区。而在FAT32 中,保留扇区的数据通常取为32,有时候用Partition Magic 分过的FAT32 分区会设置36 个保留扇区,有的工具可能会设置63 个保留扇区。

FAT32 中的保留扇区除了磁盘总第0扇区用作DBR,总第2扇区(win98系统)或总第0xC 扇区(win2000,winxp)用作OS 引导代码扩展部分外,其余扇区都不参与操作系统管理与磁盘数据管理,通常情况下是没作用的。

操作系统之所以在FAT32 中设置保留扇区,是为了对DBR作备份或留待以后升级时用。FAT32中,DBR 偏移0x32 占2 字节的数据 指明了DBR备份扇区所在,一般为0x06,即第6扇区。当FAT32 分区DBR扇区被破坏导致分区无法访问时。可以用第6扇区的原备份替换第0扇区来找回数据。

5.3 FAT表和数据的存储原则。
FAT 表(File Allocation Table 文件分配表),是Microsoft 在FAT 文件系统中用于硬盘数据(文件)索引和定位引进的一种链式结构。假如把硬盘比作一本书,FAT 表可以认为相当于书中的目录,而文件就是各个章节的内容。但FAT 表的表示方法却与目录有很大的不同。

在FAT文件系统中,文件的存储依照FAT 表制定的簇链式数据结构来进行。同时,FAT文件系统将组织数据时使用的目录也抽象为文件,以简化对数据的管理。

FAT的形成过程是:硬盘格式化后,用户文件以簇为单位存放于DATA区中,每个文件至少一簇,有的多簇,簇号不连续,但是会形成链,这个链就记录在FAT中。

下面为FAT16 Vs FAT32的组织形式对比:

a, FAT16的组织形式:

硬盘文件系统系列之FAT


b, FAT32的组织形式:

硬盘文件系统系列之FAT

下面为FAT16 Vs FAT32中簇号取值以及含义:

硬盘文件系统系列之FAT

FDT(File Directory Table)表即为文件目录表,也称为根目录区或ROOT区。用格式化命令(FORMAT)对硬盘(或逻辑盘)进行格式化的时候,就已经为整个硬盘建立了一个根目录FDT。FDT位于第二个FAT表之后,只有当FAT表不能定位文件在硬盘中的位置时,FAT才需和FDT配合以便能准确定位文件的位置。

FDT的具体定义如下:

硬盘文件系统系列之FAT

六、实例:FAT32中查看文件FDT,FAT

首先现在U盘里面新建一个名为“test”的.txt文档,写入一部分内容如下图:

硬盘文件系统系列之FAT

接下来,将会依次进行以下步骤:

(1) 首先Winhex打开U盘,找到MBR。
(2) 其次找到DBR,

(3) 由DBR(BPB)计算FAT首地址。
(4) 由DBR及FAT推算出FDT位置。
(5) 从FDT中查找文件起始簇号。
(6) 按照簇号计算FAT中的位置。
(7) 按照簇链的结构依次找到该文件所在各个扇区,并读出其内容。

具体如下:
(1) 首先Winhex打开U盘,找到MBR,

硬盘文件系统系列之FAT


偏移0x1C6h~0x1C9h处计算出: 本分区开始扇区=0x00148F00=1347328, 也是DBR扇区,

(2) 其次找到DBR,

硬盘文件系统系列之FAT


(3) 由DBR(BPB)计算FAT首地址。

偏移0x0Dh处计算出: 每簇包含扇区数=0x20h=32,

偏移0x0Eh~0x0Fh处计算出: 保留扇区数=0x0020h=32,

偏移0x1Ch~0x1Fh处计算出: 隐藏扇区=0x00148F00=1347328,

偏移0x24h~0x27h处计算出: 每个FAT包含的扇区数=0x00003800=14336,

偏移0x2Ch~0x2Dh处计算出: 根目录起始簇=0x002h=2号簇,

FAT1起始扇区=DBR扇区+保留扇区数

                       =1347328+32=1347360

FAT2起始扇区=DBR扇区+保留扇区数+每个FAT包含的扇区数

                       =1347328+32+14336=1361696

根目录起始扇区 = DBR扇区+保留扇区数 + 一个FAT的扇区数 * FAT表个数 + (起始簇号-2) * 每簇的扇区数= 1347328+32+14336*2+(2-2)*32= 1376032

FAT32没有独立的根目录区,它的根目录放在数据区,

所以,DATA区起始位置=根目录起始扇区=1376032

(4) 由DBR及FAT推算出FDT位置。

利用Winhex 跳转功能,跳转至扇区1376032,即FDT所在位置,

硬盘文件系统系列之FAT


(5) 从FDT中查找文件起始簇号。

上面第(4)步找到了FDT的起始位置,现在要先找到“test.txt”所在的FDT位置,如下图:

硬盘文件系统系列之FAT


根据FDT的具体定义,我们可以得到:

文件簇号=0x00061836=399414,

(6) 按照簇号计算FAT中的位置。

根据第(5)步计算得到的簇号,我们可以得到:

文件簇号起始扇区=DATA区起始扇区+(簇号-2)*每个簇中包含的扇区数=1376032 + (399414-2) * 32=14157216

(7) 按照簇链的结构依次找到该文件所在各个扇区,并读出其内容。

利用Winhex的跳转功能,跳转至扇区14157216,如下图:

硬盘文件系统系列之FAT


历尽千辛万苦,终于定位到我们最初见的文件啦~是不是很有成就感呢~

感兴趣的话,自己一定要尝试一下哦,会有很大的收获~文章来源地址https://www.toymoban.com/news/detail-438906.html

到了这里,关于硬盘文件系统系列之FAT的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于 IO、存储、硬盘和文件系统

    在计算机领域,IO(Input/Output)指的是将数据从一个设备传输到另一个设备的过程。而存储指的是将数据保存在内存或硬盘等设备中的过程。硬盘则是存储设备的一种,用于长期存储数据。同时,为了更有效地管理和组织硬盘或其他存储设备中的数据,我们需要使用文件系统

    2024年02月02日
    浏览(46)
  • IO、存储、硬盘、文件系统相关常识

    目录 IO 文件系统 存储 存储这些数据的硬盘          io分为io设备和io接口, 我们日常生活中的打印机, 固态硬盘等都是io设备. IO(Input-Output) 是指计算机中输入输出的相关操作,包括数据的读取、存储、传输和显示等。存储是指将数据保存在计算机的存储器中,分为主存储

    2023年04月23日
    浏览(47)
  • 阿里云ECS扩容硬盘空间及文件系统

    一.通过阿里云控制台扩容硬盘 前往ECS实例详情页面的云盘页签。 登录ECS管理控制台。 在左侧导航栏,选择实例与镜像  实例。 在顶部菜单栏处,选择目标ECS实例所在地域。 找到待扩容云盘所在的实例,单击实例ID。 在实例详情页面,单击云盘页签。 找到待扩容的目标云

    2024年02月13日
    浏览(52)
  • 迁移系统:换电脑或者硬盘转移磁盘文件的方法!

    “将操作系统转移到新驱动您好,我刚刚为我的台式机订购了一个新的2TB希捷Barracuda硬盘,我想知道如何将我的Windows 10操作系统与我下载的其他一些软件一起转移过来。我使用新的/大的硬盘,然后格式化旧的/小的硬盘。我应该采取什么步骤来确保我成功地做到了这一点?”

    2024年02月11日
    浏览(41)
  • 苹果mac系统怎么复制文件到移动硬盘?

    苹果因为系统稳定,常被用作办公设备。习惯了windows系统,初次使用苹果发现在苹果电脑中查找、复制文件并没有在windows中方便。那么,苹果系统复制文件在哪里?在苹果电脑我们要复制文件,需要通过【访达】找到文件所在位置。苹果系统怎么复制文件到移动硬盘?在苹

    2023年04月22日
    浏览(53)
  • 「NTFS:让你的硬盘更安全、更高效!」NTFS文件系统详解,

    NTFS(New Technology File System)是一种现代的文件系统,是Windows操作系统中最常用的文件系统之一。它是一种高效、可靠、安全的文件系统,支持大容量存储、文件加密、压缩、权限控制等功能。本文将详细介绍NTFS文件系统的结构、$Boot文件、$MFT元文件、文件记录、属性的属性

    2024年02月08日
    浏览(47)
  • Linux文件系统概述

    本文已收录至《Linux知识与编程》专栏! 作者:ARMCSKGT 演示环境:CentOS 7 我们知道文件的存储一般在磁盘上,操作系统需要管理这些文件就需要通过其文件系统进行管理,高效的管理机制有利于提高我们IO的速度,本节我们将对Linux系统的文件系统进行概述! 本节理论较多,

    2024年02月12日
    浏览(22)
  • 【服务器数据恢复】ext3文件系统下硬盘坏道掉线的数据恢复案例

    服务器数据恢复环境: 一台IBM某型号服务器上有16块FC硬盘组建RAID阵列。上层linux操作系统,ext3文件系统,部署有oracle数据库。 服务器故障检测: 服务器上跑的业务突然崩溃,管理员发现服务器上有2块磁盘的指示灯显示黄色。 通过IBM storage manager查询服务器状态,发现服务

    2024年03月15日
    浏览(46)
  • HDFS Hadoop分布式文件存储系统整体概述

    整体概述举例: 包括机架 rack1、rack2 包括5个Datanode,一个Namenode( 主角色 )带领5个Datanode( 从角色 ),每一个rack中包含不同的block模块文件为 分块存储模式 。块与块之间通过replication进行 副本备份 ,进行冗余存储,Namenode对存储的 元数据进行记录 。该架构可以概括为一个 抽象

    2024年02月16日
    浏览(72)
  • Linux | Ubuntu20.04系统使用命令从移动硬盘/U盘拷贝文件到服务器上

    *确认自己移动硬盘、U盘的格式,本文为exfat格式 查看disk默认位置 查看最后的位置,我的显示为 Device, 位置为 /dev/sdb1 ,2048, (后面省略) *注意:此时无法直接查看硬盘内容 进入Linux系统主界面,如果是user的话,获取管理员权限 挂载移动硬盘/U盘 命令如下,其中/dev/sdb1为disk默

    2024年02月14日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包