exFat文件系统分析
1. exFat文件系统简介
理论上最大文件size为264B(16EB),fat32的最大
文件size为232B(4GB)
簇最大可达32MB
同一目录下最大文件数超过1000个
采用了Allocation Bitmap,剩余空间分配性能
改进 支持TFAT
exFat新特性——Allocation Bitmap
在fat32中,使用fat表来记录cluster chain和 cluster的分配情况
在exfat中,新增加了Allocation Bitmap记录 cluster的分配情况。Allocation Bitmap与fat表 配对使用,简称Fat/Bitmap pair。在每个文件 的Stream Extension Directory Entry中存在 flag指示是否包括cluster chain。如果文件不包 含cluster chain,则为连续存储,在使用过程中 不会读取fat表
exFat新特性——TFAT
TFAT是Transaction Safe FAT的简称,保证写入 操作是原子操作 支持TFAT的exFat中有两个Fat/Bitmap pair。在 写入过程中,对working FAT/Bitmap pair进行 更新。如果写入成功,则对non-working FAT/Bitmap pair进行更新;如果写入失败,对 working FAT/Bitmap pair进行rollback
2. Linux平台中集成exFat
Tuxera 获得Microsoft 的授权,开发基于Linux 平台的exFat。
URL: http://www.tuxera.com/products/exfat-
for-embedded-systems/
URL:http://code.google.com/p/exfat/
(1)Fuse-exFat代码架构
Fuse-exFat
exFat-main:用于mount一个exFat文件系统
exFat-ck:用于文件系统check
exFat-lib:exFat的库函数
Fuse-exfat-ops:提供给FUSE的文件系统操作
FUSE:用于在用户空间集成和开发文件系统
sys-io:最终的读写调用由pread和pwrite完成
(2)Fuse-exFat不足
有些结构体定义中存在未知项。
没有实现格式化。
只是实现了读写操作,读写速度有待提高。
使用fuse方式集成,需要频繁进出内核空间,文 件系统性能比较低。
在项目中我们已经对文件系统进行了部分优化, 可以提升读写效率。
如果采用fuse方式集成则会 导致性能下降,所以我们建议基于现有的user space文件系统架构进行exFat集成。
3. 项目中集成exFat
(1)根据exFat代码,修改原有的FAT FS层
在自定义的fat扩展层(fsDosFsEx)中,将调用 dosFs接口替换为exFat相应接口,如open, read, write, seek, rename……
将exFat的open,read,write等接口注册到FS Encapsulation中
将exFat中使用的块设备接口替换为Block Device Wrapper提供的接口
(2)项目中集成exFat——Allocation Bitmap
方案A:在自定义的fat扩展层(fsDosFsEx)中添加 对Allocation Bitmap的支持 方案A:增加ramAllocBitmap与ramFat配合使用
方案B:采用不增加ramAllocBitmap的方式,根据 Fat/Bitmap pair来修改ramFat相关代码
根据Allocation Bitmap来优化BuWrite使用的 Bitmap
(3)项目中集成exFat——TFAT
目前暂时不考虑对TFAT的支持
如果支持TFAT,写入时会对两个FAT/Bitmap pair进行操作,写速度降低
在某些异常情况下(比如录画中掉电),TFAT有可能会影响salvage数据的生成
exFat V1.0中也没有支持TFAT
(4)项目中集成exFat
FS Encapsulation模拟了原有的IO系统 ,以确保上层调用正确的下层函数。FS Encapsulation不会影响文件系统模块的性能, 所以不需要做修改 。
Block Device Wrapper是块设备驱动的封装层,可以为exFat提供访问块设备的接口,需要做部分适配。
1. exFat文件系统简介
理论上最大文件size为264B(16EB),fat32的最大
文件size为232B(4GB)
簇最大可达32MB
同一目录下最大文件数超过1000个
采用了Allocation Bitmap,剩余空间分配性能
改进 支持TFAT
exFat新特性——Allocation Bitmap
在fat32中,使用fat表来记录cluster chain和 cluster的分配情况
在exfat中,新增加了Allocation Bitmap记录 cluster的分配情况。Allocation Bitmap与fat表 配对使用,简称Fat/Bitmap pair。在每个文件 的Stream Extension Directory Entry中存在 flag指示是否包括cluster chain。如果文件不包 含cluster chain,则为连续存储,在使用过程中 不会读取fat表
exFat新特性——TFAT
TFAT是Transaction Safe FAT的简称,保证写入 操作是原子操作 支持TFAT的exFat中有两个Fat/Bitmap pair。在 写入过程中,对working FAT/Bitmap pair进行 更新。如果写入成功,则对non-working FAT/Bitmap pair进行更新;如果写入失败,对 working FAT/Bitmap pair进行rollback
2. Linux平台中集成exFat
Tuxera 获得Microsoft 的授权,开发基于Linux 平台的exFat。
URL: http://www.tuxera.com/products/exfat-
for-embedded-systems/
URL:http://code.google.com/p/exfat/
(1)Fuse-exFat代码架构
Fuse-exFat
exFat-main:用于mount一个exFat文件系统
exFat-ck:用于文件系统check
exFat-lib:exFat的库函数
Fuse-exfat-ops:提供给FUSE的文件系统操作
FUSE:用于在用户空间集成和开发文件系统
sys-io:最终的读写调用由pread和pwrite完成
(2)Fuse-exFat不足
有些结构体定义中存在未知项。
没有实现格式化。
只是实现了读写操作,读写速度有待提高。
使用fuse方式集成,需要频繁进出内核空间,文 件系统性能比较低。
在项目中我们已经对文件系统进行了部分优化, 可以提升读写效率。
如果采用fuse方式集成则会 导致性能下降,所以我们建议基于现有的user space文件系统架构进行exFat集成。
3. 项目中集成exFat
(1)根据exFat代码,修改原有的FAT FS层
在自定义的fat扩展层(fsDosFsEx)中,将调用 dosFs接口替换为exFat相应接口,如open, read, write, seek, rename……
将exFat的open,read,write等接口注册到FS Encapsulation中
将exFat中使用的块设备接口替换为Block Device Wrapper提供的接口
(2)项目中集成exFat——Allocation Bitmap
方案A:在自定义的fat扩展层(fsDosFsEx)中添加 对Allocation Bitmap的支持 方案A:增加ramAllocBitmap与ramFat配合使用
方案B:采用不增加ramAllocBitmap的方式,根据 Fat/Bitmap pair来修改ramFat相关代码
根据Allocation Bitmap来优化BuWrite使用的 Bitmap
(3)项目中集成exFat——TFAT
目前暂时不考虑对TFAT的支持
如果支持TFAT,写入时会对两个FAT/Bitmap pair进行操作,写速度降低
在某些异常情况下(比如录画中掉电),TFAT有可能会影响salvage数据的生成
exFat V1.0中也没有支持TFAT
(4)项目中集成exFat
FS Encapsulation模拟了原有的IO系统 ,以确保上层调用正确的下层函数。FS Encapsulation不会影响文件系统模块的性能, 所以不需要做修改 。
Block Device Wrapper是块设备驱动的封装层,可以为exFat提供访问块设备的接口,需要做部分适配。
本文详细介绍了exFat文件系统,包括其新特性如Allocation Bitmap和TFAT,以及在Linux平台上的集成,特别是Tuxera的实现。同时讨论了在项目中集成exFat的挑战与优化策略,如修改FAT FS层,处理Allocation Bitmap,以及对TFAT的支持考虑。
7868

被折叠的 条评论
为什么被折叠?



