exFat文件系统分析

本文详细介绍了exFat文件系统,包括其新特性如Allocation Bitmap和TFAT,以及在Linux平台上的集成,特别是Tuxera的实现。同时讨论了在项目中集成exFat的挑战与优化策略,如修改FAT FS层,处理Allocation Bitmap,以及对TFAT的支持考虑。
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提供访问块设备的接口,需要做部分适配。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值