FAT和EXFAT文件系统

文件系统

文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法.在移动存储设备上比较常用的有FAT文件系统和ExFAT文件系统。

FAT分区依据FAT表中每个簇链的所占位数分为fat12、fat16、fat32三种格式;

exFAT是为了解决FAT32等不支持4G及其更大的文件而推出的文件系统。

知识点

bios

bios(basic input output system),他是一组固化在计算机主板上ROM芯片上的程序,保存着计算机最重要的基本输入输出程序,开关机自荐程序和系统自启动程序.他可以从CMOS上读写系统设置的具体信息,主要为计算机提供最底层,最直接的硬件设置和控制.

MBR扇区

MBR(master boot record)即主引导扇区(或记录),位于整个硬盘的0柱面0磁头1扇区(即硬盘的第一个扇区),bios在执行完自己固有的程序后会jump到MBR的第一条指令,并将系统的控制权交由MBR,总共1个扇区的主引导记录,MBR引导程序战前446字节(0h~1bdh),随后的64字节(1beh~1fdh)为DPT(disk partitiontable),最后为"55 aa"结束符.
MBR具有公共引导的特性,与具体的操作系统无关,具有唯一性.

名词解释

FAT :   File Allocation Table.文件分配表
EXFAT:  Extended File Allocation Table .扩展文件分配表
BPB:   BIOS Parameter block.BIOS参数块
BS:     Boot Sector.启动扇区
LSN:   Logical Sector Number.逻辑扇区号
PSN:   Physical Sector Number.物理扇区号
LBA:   Logical Block Address.逻辑块地址

FAT12

采用12位文件分配表
最大簇总数4085(2的12次方)
最大分区容量8M (4096clusters × 4sectors/clusters × 512bytes/sectors)
只能是8.3格式的文件名(短名)

FAT16

采用16位的文件分配表
最大簇总数65524(2的16次方)
最大分区容量2G
严重缺陷:大容量磁盘利用效率低

FAT32

采用32位的文件分配表
最大簇总数(2的32次方)
单个文件不能大于4G
当分区小于512M时,Fat32不会发生作用
不超过8GB的分区中,FAT32分区格式的每个簇都固定为4KB
Fat32不能保持向下兼容

注:可以通过WinHex查看磁盘分区信息

FAT表数据结构

FAT表是一一对应于数据区簇号的列表,文件系统分配磁盘空间是按簇来分配,因此,文件占用磁盘空间时,基本单位是簇。

FAT表是根据簇数来和文件对应的。第一个存放数据的簇是簇2。

FAT表项的大小与FAT类型有关,FAT12的表项为12-bit,FAT16为16-bit,FAT32则为32-bit.

FAT32的FAT表项只有28-bit可以使用,所以他的高4位保留。FAT32在扇区号为6的地方完整地拷贝了一份启动扇区的备份,包括BPB的内容。

FATType的判定条件

FAT类型(FATType)的检测(是FAT12,或是FAT16,还是FAT32)只能通过计算FAT卷中数据区所占的簇数(CountofClusters)来判定,没有其他办法。

FAT目录结构

对于FAT12/FAT16,根目录存储在磁盘中固定的地方,它紧跟在最后一个FAT表后。根目录的扇区数也是固定的,可以根据**BPB_RootEntCn**t计算得出。

FAT32的根目录由簇链组成,其扇区数不确定,根目录的第一个扇区号存储在BPB_RootClus中,根目录不同于其他的目录,没有日期和时间戳,也没有目录名,同时根目录里没有“.”和“..”这两个目录项。根目录另一个特殊的地方在于,根目录中有一个设置 ATTR_VOLUME_ID 位的文件,这个文件在整个FAT卷中是唯一的。

DIR_NTRes

当文件只有短名时,该短名的大小写规则如下:

1. 此值为18H时,文件名和扩展名都小写。
2. 此值为10H时,文件名大写而扩展名小写。
3. 此值为08H时,文件名小写而扩展名大写。
4. 此值为00H时,文件名和扩展名都大写。

DIR_Attr

长名与短名规则

短文件名(8+3name)是FAT16遗留下来的,为了兼容windows以后的版本文件和目录都有长名和短名。

长名目录项和对应的别名(短名)目录项的存储有以下6个处理原则:

1.取长文件名的前6个字符加上“~1”形成长文件名的别名(即短文件名),并将长文件名中最后一部分(最后一个间隔符“.”后面字符)的前3个字符作为其扩展名。
2.如果已存在这个名字的文件,则符号“~”后的数字会自动增加
3.任何包括小写字母的文件名都被看作是长文件名,而不管其长度是多少。
4.长文件名存储在属性标志为OFH的32字节目录登记项中(这是与短文件名目录项的区别)。用Unicode格式编码,每个字符(无论是英文或是汉字)均占2字节。
6.每个目录登记项用26个字节存储13个字符(序号由第1字节指定)。位置多余时,先用00h表示结束,再用FFH填充。
7.长文件名用若干个长名目录项保存,长文件名目录项倒序排在文件短目录项前面。

Windows9x会根据应用程序的性质分别给予不同的文件名,16位应用程序得到8.3格式的文件名,而32位应用程序得到长文件名。

注:尽量不要在根目录下创建长文件名!

FAT计算公式

根目录所占的扇区数(RootDirSectors):

RootDirSectors = ((BPB_RootEntCnt * 32) + (BPB_BytePerSec - 1)) / BPB_BytePerSec;

数据区的起始地址(FirstDataSector) :

FirstDataSector = BPB_RsvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors;

其中,FATSz可以由下面条件获取:
If(BPB_FATSz16 != 0)
    FATSz = BPB_FATSz16;
Else
    FATSz = BPB_FATSz32;

由于每一个存放数据的簇是簇2,所以数据区的起始地址也相当于簇2 的起始地址,由此可以得到下面的一个计算公式。

给一个合法的簇号N(N>=2),可以由该簇号计算得出该簇的每一个扇区号:

FirstSectorofCluster =((N - 2)* BPB_SecPerClus + FirstDataSector)

数据区中的扇区数(DataSec):

DataSec=TotSec - FirstDataSector;

其中,TotSec可以由下面条件获取:
If(BPB_TotSec16 != 0)
    TotSec = BPB_TotSec16;
Else
    TotSec = BPB_TotSec32;

数据区中的总簇数(CountofClusters):

CountofClusters = DataSec / BPB_SecPeClus;

某个簇号在FAT表中的位置:

A)簇N在第一个FAT表中的扇区数(ThisFATSecNum):

ThisFATSecNum = BPB_RsvdSecCnt + (FATOffset / BPB_BytePerSec);

其中FATOffset可以由下面条件获取:
If(FATType == FAT16)
{
    FATOffset = N*2;
}
Else If(FATType == FAT32)
{
    FATOffset = N*4;
}

B)簇N在第一个FAT表中所在扇区的偏移(ThisFATEntOffset):

ThisFATEntOffset = FATOffset % BPB_BytePerSec;

*注:以上的计算结果都是四舍五入的。

EXFAT

单个文件大小突破4GB的限制,最大可达到32GB、
分区大小突破之前32GB的限制,最大可达到2TB。
内部结构调整,实现同样功能的操作,相比较之前的FAT系统,减少读写设备的次数。
对DBR表,文件名,文件目录项等,增加校验字段,提高数据安全性。
簇大小可高达32MB。
采用了剩余空间分配表,剩余空间分配性能改进。
同一目录下最大文件数可达65535个。

exfat文件系统内部结构分配如下:

Exfat的Boot区最少为24个扇区,分成BOOT区和备份BOOT区,两个区各12个扇区。

跳转指令 EB 76 90 也是EXFAT的type识别码

EXFAT目录

根目录比较特殊,下面有三个特殊的目录项。具体如下:

其中第一个目录项不知道有何具体用意。
第二个目录项0x81,表示簇堆分配表文件。
第三个目录项0x82,表示大写表文件。
EXFAT普通目录下没有“.”和“..”目录项。
特殊目录项只存在根目录下,有卷标目录项、位映射目录项和大写表目录项,分别记录分区卷标,簇堆分配表文件和大写表文件。

EXFAT簇堆分配表

簇堆分配表,记录分区上所有簇的使用情况。每一个bit代表一个簇,0表示空簇,1表示该簇已被占用。起始簇号从2开始,也就是BIT0对应簇号2,BIT1对应簇号3。簇堆分配表以文件存储的方式存在,一般对应根目录下第一个文件,也就是第二个目录项。他的大小由总簇数决定,占用N个簇的空间。

EXFAT大写转换表

大写表是一张Unicode字符映射图,每一个字符占用2个字节。文件名比较时,先把文件名格式转换成Unicode,再通过该表把文件名转成大写Unicode,转换完成后才进行文件名比较。大写表中的数据进行了部分压缩,压缩起始标志码FFFFh,随后跟一个压缩长度。

注:硬盘的物理结构

时间: 2024-11-08 20:08:56

FAT和EXFAT文件系统的相关文章

linux 挂载exfat文件系统

一个exfat文件系统的U盘,插在Ubuntu上无法挂载 [email protected]~$ sudo apt-get install exfat-fuse [email protected]~$ sudo apt-get install exfat-utils 再把U盘插到Ubuntu就可以自动挂载了

Ubuntu---不能打开 exfat 文件系统格式的 U盘解决方法

出现问题:今天把 U 盘插入 Ubuntu 系统的电脑中,打开 U 盘发现弹出 系统格式不支持 的提醒,无法进入 U 盘进行操作. 环境: Ubuntu18.04 TSL; 格式化为 exfat 文件系统的 U 盘 出错原因:在 Ubuntu 下,据说是版权的原因,默认不支持 exfat 格式的 U 盘,不过我们可以很方便的添加对 exfat 的支持. 解决办法:直接打开终端,输入以下命令即可解决: sudo apt-get install exfat-utils 一般情况下,不用重启即可生效,

FAT、exFat、NTFS三种不同U盘系统格式

FAT32: 它是1997年的Windows 95 OSR2,在第二版系统中首次引入的文件系统格式. 优点:它有很好的兼容性,几乎所有主流系统都能对其格式写入读取. 缺点:这种文件格式安全无保障,对于单个文件体积移动复制,不能超过4GB,文件名长度也不可以超过255个字符. NTFS: 它全称New Technology File System(新技术文件系统). 优点:支持LZ77压缩.文件级加密.访问控制.主文件表(MFT)负责存储稳健的属性.位置.访问信息. 缺点:最大分区,最大文件只支持

磁盘文件系统Fat、Fat32、NTFS、exFAT的优缺点(转)

我们在Windows系统里格式化磁盘的时候,文件系统的选项里可以看到有“FAT”.“FAT32”.“NTFS”等选项,在对U盘或其他移动存储设备 格式化的时候还会出现“exFAT”选项,那么这四种磁盘格式是什么意思,有哪些优缺点呢?我们应该选择那个呢?下面为大家详细介绍. 在介绍这四种磁盘格式的区别之前我们先来了解一下什么是磁盘的文件系统.一块没有被格式化过的硬盘,可以比喻成一间没有摆放商品的超市大卖场,在摆放商品 之前,总要先按商品类别分好区域,并安装好货架吧.磁盘的分区.格式化操作就相当于超

磁盘文件系统Fat、Fat32、NTFS、exFAT的优缺点

我们在Windows系统里格式化磁盘的时候,文件系统的选项里可以看到有“FAT”.“FAT32”.“NTFS”等选项,在对U盘或其他移动存储设备 格式化的时候还会出现“exFAT”选项,那么这四种磁盘格式是什么意思,有哪些优缺点呢?我们应该选择那个呢?下面为大家详细介绍. 在介绍这四种磁盘格式的区别之前我们先来了解一下什么是磁盘的文件系统.一块没有被格式化过的硬盘,可以比喻成一间没有摆放商品的超市大卖场,在摆放商品 之前,总要先按商品类别分好区域,并安装好货架吧.磁盘的分区.格式化操作就相当于超

CentOS系统挂载exFAT和NTFS文件系统

exFAT和NTFS文件系统在默认条件下并不被CentOS系统支持.有时候在用U盘在CentOS和Windows系统之间拷贝文件时较为麻烦,通过在CentOS系统中安装软件,可以挂载exFAT 和 NTFS文件系统的U盘. exFAT文件系统在CentOS系统的挂载: CentOS需要具备的基本工具:GCC,python 第一步:下载fuse-exfat相关软件并安装 对exfat文件系统的识别通过fuse相关软件支持,下载相关软件包地址:http://download1.rpmfusion.o

hisicv200 exfat支持

由于项目中需要128Gsd卡支持.所以内核里面需要支持exfat 1.exfat 由于版权问题,所以linux kernel一直都没法支持,由于某些公司在linux kernel 3.9版本开源exfat 文件系统开源代码.https://www.oschina.net/news/42054/exfat-come-to-linux 代码如下:https://github.com/dorimanx/exfat-nofuse.git 基本支持所有kernel版本. kernel修改修改方法如下:ht

32G sd卡格式化成fat

fat文件系统格式只支持4G及以下的内存空间的存储设备,对于4G及以上的存储设备可以使用fat32或ntfs文件系统,建议使用ntfs文件系统,这样可以最有效地利用存储设备的存储空间,而且可以减少出现数据错误.对于exfat来说,它是fat的扩展文件系统,不建议使用,因为如果把用exfat格式化的存储设备插在windows2000及以下的操作系统上就不能识别,只适合在windowsXP及以上版本的操作系统上使用.

不同文件系统U盘应用区别在哪

U盘对于办公族来说绝对是非常熟悉的办公设备了,它使用方便操作简单,我们传递文件时是必不可少,一个小巧的U盘就可以给我们带来如此大的便利,其实在真正使用过程中U盘也的运作原理并非简单.比如文件系统设置这件事就有很多学问,FAT32.exFAT.NTFS分别是什么.区别在哪你都知道了吗? 一:FAT32.exFAT.NTFS是什么? 1.FAT32文件系统 FAT32使用32位的空间来表示每个扇区配置文件的情形,故称之为FAT32,其分区容量下限是512MB,不同操作系统的上限不同,例如Win200