FAT文件系统原理详细介绍

合集下载

FAT文件结构讲解

FAT文件结构讲解

FAT文件结构讲解FAT(File Allocation Table)是一个用于存储和管理文件在磁盘上的文件系统。

FAT文件系统最初是由Microsoft开发的,适用于DOS和Windows操作系统。

它采用了一种简单的文件结构,使用了FAT表来记录文件在磁盘上的分配情况。

在这篇文章中,我们将详细介绍FAT文件结构的内部工作原理。

引导记录是FAT文件系统的第一个扇区,它包含了文件系统的基本信息和启动引导程序。

引导记录的前11个字节称为“引导码”,用于识别文件系统类型。

接下来的53个字节包含了文件系统的信息,如磁盘大小、簇(Cluster)大小和FAT表的位置。

在FAT12和FAT16文件系统中,引导记录总共占据了62个字节。

FAT表的值表示了簇的状态。

常见的值有以下几种:-0x000:表示簇空闲,没有被分配给任何文件。

-0xFF0-0xFF6(或0xFFF0-0xFFF6):这些值表示保留的簇,用于存储文件系统的元数据。

-0xFF7(或0xFFF7):表示簇坏掉,无法使用。

-0x002-0xFEF(或0x002-0xFEFF):这些值表示簇已被文件分配,并且是有效的。

-0x001-0xFF8(或0x001-0xFFF8):这些值表示簇已被文件分配,但是是最后一个簇,文件结束。

FAT表将所有的簇连接到一起,形成一个链表。

为了遍历这个链表,我们从文件的开始簇(即文件的第一个簇)开始,查找下一个簇的位置,然后再查找下一个簇的位置,直到文件结束。

文件系统使用这个链表来查找文件的数据,因为文件的数据可能分布在磁盘的不同位置。

数据区是存储文件的实际数据的地方。

每个簇都有固定的大小,通常是512字节或4096字节。

文件系统将数据区划分为多个簇,每个簇可以存储一个文件或部分文件的数据。

当文件的大小超过一个簇的大小时,文件系统会从FAT表中查找下一个簇的位置,然后写入文件的下一个簇的数据。

为了提高磁盘访问的效率,FAT文件系统还引入了目录项(Directory Entry)来存储文件和文件夹的相关信息。

FAT文件系统

FAT文件系统

如需购买,请联系销售:sales@
更多信息请访问专题网站:/fat-file-system/
1
©2011 Zeeis 版权所有
FAT 文件系统 - 嵌入式 FAT12, FAT16 & FAT32 文件系统
PCMCIA NAND Flash NOR Flash DataFlash
FATDriver_deinit
FS_STATUS FATDriver_deinit(void) 释放 FAT 文件系统的存储设备驱动程序占用的资源。
返回值
当返回 FS_SUCCESS 表示成功。否则则表示失败。
FATDriver_getStatus
FS_STATUS FATDriver_getStatus(void) 检查可移动存储卡 FAT 文件系统当前状态。
date_time 授权
存储当前日期和时间信息。
有任何技术问题或需要帮助,请联系技术支持:support@ 如需购买,请联系销售:sales@ 更多信息请访问专题网站:/fat-file-system/ ©2011 Zeeis 版权所有
有任何技术问题或需要帮助,请联系技术支持:support@ 如需购买,请联系销售:sales@ 更多信息请访问专题网站:/fat-file-system/ ©2011 Zeeis 版权所有
之士

2
FAT 文件系统 - 嵌入式 FAT12, FAT16 & FAT32 文件系统
FAT 文件系统 - 嵌入式 FAT12, FAT16 & FAT32 文件系统 FAT 文件系统 - 嵌入式 FAT12, FAT16 & FAT32 文件系统
之士

FAT 文件系统概述

FAT文件系统原理

FAT文件系统原理

FAT文件系统原理FAT(File Allocation Table)文件系统是一种用于管理磁盘空间和存储文件的文件系统。

它最初由微软公司于1977年开发,广泛应用于早期的个人电脑和移动设备中。

FAT文件系统具有简单、可靠和高兼容性的特点,因此仍被用于许多现代操作系统中。

FAT文件系统的核心原理是使用文件分配表(File Allocation Table)来跟踪文件在存储媒体中的分配情况。

文件分配表是一个表格,用于记录存储媒体上每个存储块(cluster)的分配情况。

存储媒体(如硬盘、闪存等)被划分为一个个固定大小的存储块,文件分配表将这些存储块连接起来以形成文件。

FAT文件系统使用一个文件目录来记录所有文件和目录的相关信息。

每个文件和目录占据一个固定大小(通常为32字节)的目录条目。

每个目录条目包含了文件的名称、大小、起始簇号等信息。

目录条目中有一个特殊的标记,用于表示该条目是否已被删除或者未被使用。

当用户创建一个新文件时,FAT文件系统首先会找到一个未被使用的目录条目来保存文件的信息。

然后,它会从文件分配表中寻找连续的空闲存储块以存储文件的内容,并将这些存储块的索引记录到文件分配表中。

当用户删除一个文件时,FAT文件系统会将对应的目录条目标记为未使用,并将文件分配表中对应的存储块标记为可用。

FAT文件系统的文件访问速度较慢,主要是因为文件分配表的顺序访问会带来一定的开销。

为了加速文件访问,FAT文件系统采用了簇的概念。

一个簇由多个连续的存储块组成,文件的内容被分配到一个或多个簇上。

这样,文件系统可以根据文件的簇号从文件分配表中快速定位到文件的实际存储位置,减少顺序查找的时间。

此外,FAT文件系统还具有很好的兼容性。

它可以在不同的操作系统和硬件平台上使用,并且可以与其他文件系统(如NTFS、EXT等)共存。

这使得FAT文件系统成为许多移动设备、U盘、闪存卡等存储介质的常用文件系统。

总的来说,FAT文件系统通过使用文件分配表来管理存储媒体的空间,并使用目录条目来记录文件和目录的相关信息,实现了简单、可靠和高兼容性的文件管理。

几种文件系统的原理与对比

几种文件系统的原理与对比

几种文件系统的原理与对比文件系统是计算机存储管理的一种重要方式,它负责组织和管理计算机文件的存储、命名、访问和保护等操作。

不同的文件系统采用了不同的策略和原理来管理文件的组织和存储,下面将对几种常见的文件系统原理与对比进行详细介绍。

1. FAT文件系统(File Allocation Table)FAT文件系统是最早使用的文件系统之一,它采用了FAT表的概念来管理磁盘上的文件。

在FAT表中,每个文件都分配了一个表项来记录其存储位置信息。

FAT文件系统的优点是简单易用,对于小型存储介质和嵌入式设备较为合适;缺点是文件系统效率低下,不适用于大容量存储设备。

2. NTFS文件系统(New Technology File System)NTFS文件系统是微软开发的,用于Windows操作系统的文件系统,它采用了B+树的索引方式来管理文件。

NTFS的优点在于支持大容量存储设备,具有更高的效率和更好的稳定性,同时支持文件加密、压缩和访问控制等高级功能。

3. EXT文件系统(Extended File System)EXT文件系统是Unix和Linux操作系统常用的文件系统,目前已经发展到EXT4版本。

EXT文件系统使用了索引节点(Inode)的概念来管理文件,每个文件都有一个索引节点,记录了文件的属性和数据块的地址信息。

EXT4文件系统在性能、兼容性和可靠性方面有了很大的改进,支持更大的文件和更高的性能。

4. HFS+文件系统(Hierarchical File System Plus)HFS+文件系统是苹果公司开发的文件系统,用于Macintosh电脑的操作系统。

HFS+文件系统支持大文件和Unicode编码,并且具有日志功能来提高文件系统的可靠性。

HFS+文件系统是一种面向大容量存储的文件系统,适用于苹果设备的特定要求。

在对比几种文件系统时,可以从以下几个方面进行比较:1.空间管理:文件系统应能有效地管理存储设备的空间,提供高效的存储分配和回收策略。

透彻分析FAT文件系统(二)

透彻分析FAT文件系统(二)

透彻分析FAT文件系统!(二)四、FAT分区原理。

先来一幅结构图:现在我们着重研究FAT格式分区内数据是如何存储的。

FAT分区格式是MICROSOFT最早支持的分区格式,依据FAT表中每个簇链的所占位数(有关概念,后面会讲到)分为fat12、fat16、fat32三种格式"变种",但其基本存储方式是相似的。

仔细研究图7中的fat16和fat32分区的组成结构。

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

提到的地址如无特别提示均为分区内部偏移。

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

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

以用的最多的FAT32为例说明分区DBR各字节的含义。

见图8。

图8的对应解释见表3图9给出了winhex对图8 DBR的相关参数解释:根据上边图例,我们来讨论DBR各字节的参数意义。

MBR将CPU执行转移给引导扇区,因此,引导扇区的前三个字节必须是合法的可执行的基于x86的CPU指令。

这通常是一条跳转指令,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分。

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

为了保留与MS-DOS的兼容性,通常Windows 2000格式化该盘是在FAT16和FAT32磁盘上的该字段中记录了“MSDOS 5.0”,在NTFS磁盘上(关于ntfs,另述),Windows 2000记录的是“NTFS”。

通常在被Windows 95格式化的磁盘上OEM ID字段出现“MSWIN4.0”,在被Windows 95 OSR2和Windows 98格式化的磁盘上OEM ID字段出现“MSWIN4.1”。

FAT文件系统分析

FAT文件系统分析

FAT文件系统分析FAT文件系统的数据结构中有两个重要的结构:文件分配表和目录项:文件和文件夹内容储存在簇中,如果一个文件或文件夹需要多余1个簇的空间,则用FAT表来秒速如何找到另外的簇。

FAT结构用于指出文件的下一个簇,同时也说明了簇的分配状态。

FAT12、FAT16、FAT32这三种文件系统的主要区别在于FAT项的大小不同。

FAT文件系统的每一个文件和文件夹都被分配到一个目录项,目录项中记录着文件名、大小、文件内容起始地址以及其他一些元数据。

在FAT文件系统中,文件系统的数据记录在“引导扇区DBR”中。

引导扇区位于整个文件系统的0扇区,是文件系统隐藏区域的一部分,我们称其为DBR(DOS Boot Recorder ——DOS引导记录)扇区,DBR中记录着文件系统的起始位置、大小、FAT表个数及大小等相关信息。

在FAT文件系统中,同时使用“扇区地址”和“簇地址”两种地址管理方式。

这是因为只有存储用户数据的数据区使用簇进行管理(FAT12和FAT16的根目录除外),所有簇都位于数据区。

其他文件系统管理数据区域是不以簇进行管理的,这部分区域使用扇区地址进行管理。

文件系统的起始扇区为0号扇区。

FAT32的保留区FAT32文件系统的开始部分有一个由若干扇区组成的保留区,保留区的信息会记录在DBR扇区中,比较常见的为32、34或38个扇区。

引导扇区:引导扇区是FAT32文件系统的第一个扇区,也称DBR扇区。

包含以下基本信息:·每扇区字节数·每簇扇区数·保留扇区数·FAT表个数·文件系统大小(扇区数)·每个FAT表大小(扇区数)·根目录起始簇号·其他附加信息说明:我们可以通过每个FAT表的大小扇区数乘以FAT的个数得到FAT区域的大小;通过保留扇区数和FAT区域的大小就可以得知数据区的起始位置,也即文件系统第一簇的位置。

由根目录的簇号和第一簇的位置就可以得到根目录的位置。

fat方案

fat方案

fat方案FAT方案简介FAT(File Allocation Table)是一种常见的文件系统,最早由微软公司在DOS操作系统中引入。

该文件系统在早期广泛应用于各种操作系统和存储介质,如硬盘、软盘和闪存卡等。

FAT文件系统具有简单、可靠和跨平台的特性,适用于许多嵌入式设备和个人电脑。

FAT文件系统结构FAT文件系统的基本结构由三个主要组件组成:文件分配表(File Allocation Table)、根目录和数据区。

文件分配表(FAT)文件分配表是FAT文件系统的核心组件之一,用于跟踪存储在存储介质上的文件和文件夹的位置。

它由一个或多个FAT表组成,在FAT12、FAT16和FAT32版本中,每个表占用的字节数不同。

根目录根目录是FAT文件系统的顶层目录,用于存储存储介质的根目录下的文件和文件夹的信息。

在FAT12和FAT16版本中,根目录的大小是固定的,而在FAT32版本中,根目录以一个特殊的簇链表的形式存储。

数据区数据区是FAT文件系统中存储所有文件和文件夹的地方。

在数据区中,使用簇作为最小的存储单元。

每个文件和文件夹都被分配一系列簇来存储其数据。

FAT表被用来跟踪这些簇的使用情况。

FAT文件系统的特点简单和可靠FAT文件系统的设计非常简单和可靠。

它不依赖于复杂的数据结构和算法,易于实现和维护。

因此,即使在资源受限的嵌入式系统中,也可以很好地支持FAT文件系统。

跨平台兼容性FAT文件系统具有出色的跨平台兼容性。

由于其简单和广泛的应用,FAT文件系统可以在多个操作系统上进行访问和修改,例如Windows、Mac OS和Linux等。

支持可恢复性FAT文件系统支持可恢复性,即当存储介质发生意外故障或文件被损坏时,可以通过使用FAT文件系统中的备份数据来恢复文件。

此外,FAT文件系统的文件恢复工具也很容易获取和使用。

FAT文件系统的应用FAT文件系统在各种嵌入式设备和个人电脑中广泛应用。

以下是一些典型的应用场景:嵌入式系统由于FAT文件系统的简单和可靠性,它被广泛应用于各种嵌入式设备,如数字相机、移动电话和便携式音乐播放器等。

了解电脑的文件系统FATNTFS和exFAT的区别

了解电脑的文件系统FATNTFS和exFAT的区别

了解电脑的文件系统FATNTFS和exFAT的区别了解电脑的文件系统FAT、NTFS和exFAT的区别在使用电脑的过程中,我们经常会接触到文件系统。

而在Windows操作系统中,最常用的文件系统有FAT、NTFS和exFAT。

这三种文件系统虽然都可以用于存储和管理文件,但在一些关键方面存在着差异。

本文将重点探讨FAT、NTFS和exFAT这三种文件系统的区别,并带你更深入了解它们的应用和特点。

一、FAT文件系统FAT(File Allocation Table,文件分配表)是一种比较早期的文件系统,最早出现在DOS操作系统中。

FAT文件系统的特点是简单、通用,可以在多个操作系统之间共享文件。

它的文件命名规则是8.3规则,即文件名最多只能有8个字符,扩展名最多只能有3个字符。

FAT文件系统适用于较小的存储设备,如闪存卡和早期的硬盘。

然而,FAT文件系统也有一些明显的不足之处。

首先,FAT文件系统不支持权限控制和加密功能,这使得文件容易受到未授权的访问。

其次,FAT文件系统对于大容量存储设备的支持不是很好,因为它在处理大文件时会出现性能下降的问题。

二、NTFS文件系统NTFS(New Technology File System,新技术文件系统)是微软公司在Windows NT操作系统中引入的一种先进的文件系统。

相比于FAT文件系统,NTFS具有更多的功能和高级特性。

首先,NTFS文件系统支持较长的文件名,可以使用大约255个字符的文件名和路径名。

其次,NTFS文件系统具备更强的安全性和权限控制能力,可以为文件和文件夹设置详细的权限和加密方式,保护用户数据的安全。

此外,NTFS文件系统还支持磁盘配额、数据压缩和分区大小灵活调整等特性。

NTFS文件系统还具有良好的容错能力和恢复能力。

它使用了冗余磁盘阵列(RAID)和交错冗余校验(CRC)等技术来检测和修复数据错误。

此外,NTFS文件系统还能够记录和恢复由于意外断电或系统崩溃而导致的数据损坏。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FAT文件系统原理详细介绍2012-03-29 23:09 434人阅读评论(0) 收藏举报FAT文件起源于70年代末80年代初,用于微软的MS-DOS操作系统。

它开始被设计成一个简单的文件系统用于小于500K的软件盘。

后来被功能被大大增强用于支持越来越大的媒质。

现在的文件系统有FAT12,FAT16和FAT32三种子类。

FAT12是最早的一版,主要用于软盘,它对簇的编址采用12bit宽度的数,所以称为FAT12。

12bit的地址可以寻址4096个簇,事实上在FAT12中只能寻址4078个簇(在Linux 下可寻址4084个簇),有一些簇号是不能用的,在后面会给出具体的说明。

磁盘的扇区是用16bit的数进行计算的,所以磁盘的容量就被局限在32M空间之内。

在FAT16中,采用了16bit宽的簇地址,32bit宽扇区地址。

虽然32bit的扇区地址可以寻址2^32*512,约2个TB的容量,但于由规定每簇最大的容量不超过1024*32,所以FAT16文件系统的容量也就限制到了2^16*1024*32,大约2.1GB的空量,并且实际还达不到这个值。

FAT32文件系统使用了32bit宽的簇地址,所以称为FAT32。

但在微软件的文件系统中只使用了低28位,最大容量为2^28*1024*32,约8.7TB的空量。

有的人认为32bit全用,最大容量为2^32*1024*32,这种说法是不正确的。

虽然FAT32具有容纳近乎8.7TB的容量,但实际应用中通常不使用超过32GB的FAT32分区。

WIN2000及之上的OS已经不直接支持对超过32GB的分区格式化成FAT32,但WIN98依然可以格式化大到127GB的FAT32分区,但不推荐这样做。

下面是一个FAT分区的构成概况需要说明的是:1.引导扇区和其他保留扇区一起称为保留扇区,而其他保留扇区是可选的,当没有时候,引导扇区后紧跟的就是FAT表12.根目录区是仅FAT12/16才有,FAT32的目录项位于数据区。

由于FAT12/16的根目录区是一个固定的区域,所以它的根目录的项数是有限制的,意即不能在根录建立超过这个定数的目录项数。

(一)引导扇区与BPBBPB(BIOS Parametre Block)是FAT文件系统中第一个重要的数据结构,它位于该FAT分区的第一个扇区,同时也属于FAT文件系统基本区域的保留区,在下面的描述中。

凡名称以BPB_开头的都是BPB的一部分,凡名称与BS_开头的项FAT32的BPB的内容和FAT12/16的内容在地址36以前是完全一样的,从偏移量36开始,他们的内容有所区别,具体的内容要看FAT类型为FAT12/16还是FAT32,这点保证了在启动扇区中包含一个完整的FAT12/16或FAT32的BPB的内容,这么做是为了达到最好的兼容性,同时也为了保证所有的FAT文件系统驱动程序能正确的识别和驱动不同的FAT格式,并让他们良好地工作,因为他们包含了现有的全部内容从offset 36开始FAT12/FAT16的内容开始区别于FAT32,下面分两个表格列出,下表为FAT12/FAT16的内容下表为FAT32的内容关于FAT启动扇区还有一点重要的说明,我们假设里面的内容是按字节排序的,那么扇区[510]的内容一定0x55,扇区[511]的内容一定是0xAA很多FAT资数文档会把0xAA55说成是“启动扇区最后两字节的内容”,这样的陈述是正确的—仅仅是如果—BPB_BytsPerSec的值为512的话。

若BPB_BytsSec的值大于512,该标记的位置并没有改变(虽然在启动扇区的最后两个字节写0xAA55并没有问题)关于BPB_ToSec16/32这里再作一点补充:假设一现在我们有一块磁盘或一个分区,它的扇区数为DskSz,如果BPB_aToSec(BPB_ToSec16或是BPB_ToSec32基中不为0的那个)的值小于或等于DskSz并不会使该FAT卷在使用中出现什么错误,实际上BPB_ToSec16/32的值不要比DskSz小得离谱就不会有什么错误这样做将造成磁盘空间的浪费,程序本身并不会认为该FAT卷存在什么错误,但是,如果BPB_ToSec16/32的值比DskSz大将会使FAT卷遭到严重的损坏,因为它超出了存储介质或是磁盘分区的边界。

当BPB_ToSec16/32的值比DskSz大时,一些数据将不幸地被丢失FAT文件系统数据结构C语言表示FAT文件系统相关数据结构struct fat_boot_sector {uint8_t ignored[3]; /* 0x00 Boot strap short or near jump */int8_t system_id[8]; /* 0x03 Name - can be used to special casepartition manager volumes */uint8_t sector_size[2]; /* 0x0B bytes per logical sector */uint8_t sectors_per_cluster; /* 0x0D sectors/cluster */uint16_t reserved; /* 0x0E reserved sectors */uint8_t fats; /* 0x10 number of FATs */uint8_t dir_entries[2]; /* 0x11 root directory entries */uint8_t sectors[2]; /* 0x13 number of sectors */uint8_t media; /* 0x15 media code (unused) */uint16_t fat_length; /* 0x16 sectors/FAT */uint16_t secs_track; /* 0x18 sectors per track */uint16_t heads; /* 0x1A number of heads */uint32_t hidden; /* 0x1C hidden sectors (unused) */uint32_t total_sect; /* 0x20 number of sectors (if sectors == 0) *//* The following fields are only used by FAT32 */uint32_t fat32_length; /* 0x24=36 sectors/FAT */uint16_t flags; /* 0x28 bit 8: fat mirroring, low 4: active fat */ uint8_t version[2]; /* 0x2A major, minor filesystem version */uint32_t root_cluster; /* 0x2C first cluster in root directory */uint16_t info_sector; /* 0x30 filesystem info sector */uint16_t backup_boot; /* 0x32 backup boot sector */uint8_t BPB_Reserved[12]; /* 0x34 Unused */uint8_t BS_DrvNum; /* 0x40 */uint8_t BS_Reserved1; /* 0x41 */uint8_t BS_BootSig; /* 0x42 */uint8_t BS_VolID[4]; /* 0x43 */uint8_t BS_VolLab[11]; /* 0x47 */uint8_t BS_FilSysType[8]; /* 0x52=82*//* */uint8_t nothing[420]; /* 0x5A */uint16_t marker;} __attribute__ ((__packed__));struct msdos_dir_entry {int8_t name[8],ext[3]; /* 00 name and extension */uint8_t attr; /* 0B attribute bits */uint8_t lcase; /* 0C Case for base and extension */uint8_t ctime_ms; /* 0D Creation time, milliseconds */uint16_t ctime; /* 0E Creation time */uint16_t cdate; /* 10 Creation date */uint16_t adate; /* 12 Last access date */uint16_t starthi; /* 14 High 16 bits of cluster in FAT32 */uint16_t time; /* 16 time, date and first cluster */ uint16_t date; /* 18 */uint16_t start; /* 1A */uint32_t size; /* 1C file size (in bytes) */};/* Up to 13 characters of the name */struct msdos_dir_slot {uint8_t id; /* 00 sequence number for slot */uint8_t name0_4[10]; /* 01 first 5 characters in name */uint8_t attr; /* 0B attribute byte */uint8_t reserved; /* 0C always 0 */uint8_t alias_checksum; /* 0D checksum for 8.3 alias */uint8_t name5_10[12]; /* 0E 6 more characters in name */uint16_t start; /* 1A starting cluster number, 0 in long slots */uint8_t name11_12[4]; /* 1C last 2 characters in name */ };。

相关文档
最新文档