1. 主页
  2. 文档
  3. exFAT文件系统结构
  4. Transactional FAT

Transactional FAT

exFAT文件系统在这一版本中不支持Transactional FAT或者Transactional safe FAT,也叫做TexFAT,现在有很少的有关TexFAT的资料。这限制了对它的研究,因为现在没有平台可以验证。这里的内容是基于微软可能在Windows CE版本的exFAT所实现的功能。

微软有个文档(Microsoft Patent 7613738(November 3,2009))叫做“FAT Directory Structrue for use in Transaction Safe File System”提供了它如何工作的一些信息。

如图24是一个使用140个簇(文件系统的簇大小128KB),大小为18M的文件。也就是说一个簇有256个扇区,如要要写这个文件时,要一下写入35,840个扇区。假如根据文件系统原理,把文件做成全碎片的,当写或是删除文件时将访问140个FAT表项并修改位图分配表中的140个位。现在假设在同样的簇大小的文件系统中写入一个8.5GB的视频文件,将有64850个簇,超过1660万个扇区要写入。即使是非常快的设备,也不是马上能写完这个特大的文件,系统还需要一系列的操作来完成这个写操作例如需要更新目录,位图分配表和FAT表。如果在中途出了故障会出现什么问题呢?Transaction Safe FAT可以客观地使这些操作自动更新。

Transaction Safe FAT工作原理是支持2份FAT表和2份位图分配表,传输结束后FAT表和位图分配表会检验是否一致。更新FAT表/位图分配表时元数据将会冻结,文件系统更新时会孤立元数据,FAT /位图会一边变化一边验证。如果因突然拔出存储卡或者电源突然没电了等原因引起的传输失败,文件系统的状态和连续性将不一致。一旦文件传输成功了,FAT/位图的配对验证会转向下一个文件。

文档也提到了如何使用占位符。假如一个子目录需要更新。子目录的位置由父目录指定,父目录的文件项集中的扩展目录流项的第一簇就指向子目录。系统临时分配一个占位符簇,将子目录的元数据复制到这个簇,更新这个占位符的数据,这个占位符的数据更新完成后,在父目录中的扩展目录流项的簇地址指针指向这个占位符,释放原来的簇到簇集中。

微软MSDN CC907928也讨论了Windows CE版本的TexFAT的限制。不知道这个限制在桌面版本中是否存在。在Windows CE版本中,因为要更新根目录,文件名限制到247个字符。为了安全传输,根目录在更新时会有一个副本。在Windows CE中根目录的位置是特定的,不能更改。

我们要如何帮助您?

评论 抢沙发

评论前必须登录!