EXFAT文件系统研究

华山剑客
 
 
  2009年1月9日
 
打算在年内这十几天的时间内,把EXFAT文件系统弄明白一个大概,不知是否能实现......网上这方面的资料太少了..........

2009年1月17日
  今天终于把EXFAT文件系统中的DBR搞定!明天开始研究根目录、子目录、文件及删除数据后的数据特征。这次的研究给我的感觉是:E文和计算机语言的基础知识太重要了。

2009年1月18日
    今天基本上把根目录、子目录、文件的数据特征及删除后的变化情况弄明白了一些,但还有几个没弄清楚的问题有待以后再研究:
    1、在做写入和删除的实验时,只有簇的位图数据在变化,而FAT的数据没有任何变化,这是一个百思不解的问题:FAT没有变化,文件的各簇是如何串联在一起?FAT的存在有何意义?(已解决 2009年2月2日)
    2、根目录中有一个type =:82h CharUpperTableFile 它在文件系统中起什么作用?
 (大写字母换算表,主要的作用是用于文件命名。注:网友“北大资源”告诉我的  2009年2月11日)
    3、FAT文件系统中通过2E和2E2E来实现子目录与父目录间的联结,NTFS中通过文件记录中的本文件MFT号和父目录MFT号来联结,但EXFAT中好像看不出是通过什么形式将子目录(或者文件)与父目录联结起来(只能从上到下,不能从下到上)?
 (这个问题至今没有找到答案,但对数据恢复,意义并不重要,所以也不想再研究了  2009年2月11日)
对于EXFAT的研究到此为止,以后有时间再研究,总之,这次对EXFAT文件系统的研究基本上达到我预期的目标!!

2009年1月28日
 今天开始继续研究EXFAT,这次主要是写一些相关的模版:DBR 根目录 子目录 以及其它内容。
2009年2月1日
  DBR 根目录 子目录模版完工(根目录模版还需要改进!)
 
DBR模版
 
 
根目录模版
 
 
文件/文件夹目录项模版
 
 
2009年2月2日
  昨天晚上做了2小时的实验,终于弄清楚了原来三个问题中的第一个问题!当文件存储时没有碎片时,FAT表没有变化(不写入FAT内容),当文件在储存时有碎片产生,才向FAT表中写入数据。这样做可能是为了减小数据写入的量,为提高效率而设计的。编写文件系统的微软工程师颇费了一番心思。
 
 
2009年2月11日
 通过几天的实验(修改文件名、删除文件或者文件夹、删除后手工恢复、改变文件或文件夹路径、向文档中加入新的内容观察是否产生碎片),给我印象最深的有2点:EXFAT尽可能的少的让文件产生碎片,比如:在一个WORD文档是重新编辑,加入新的内容后,它会重新在另一个位置保存这个数据,让文件尽可能少的产生碎片,这样做的目的我想不是为了便于恢复数据。而是想使系统读取数据在速度上有一个大的提升;和FAT相比,EXFAT中加入了保护功能,所以在用WINHEX修复EXFAT分区上的数据时,一定要记住:不要随意修改文件目录项中的文件名,除非你能计算出文件名的hash值!否则,会丢失原来正常的数据!!而且系统一旦发现分区的数据被非法修改(像刚才说的改动文件名),分区会进入写保护状态,只能读取数据,不能写入数据。
  EXFAT的研究,今天真的要停止了,开学了,现在要好好干我的本职工作。
 
 
2009年3月1日
   备忘:今天在学习HFS+文件系统时,联想到EXFAT中要研究的2个问题,现记下,以后有时间做实验验证:
  实验一:当写入文件删除后,会腾出空间,当再次写入数据时,如果写入的数据小于上次删除的那个数据的空间,这时数据是写入原来删除的位置,还是从后面的大可用空间开始写入数据?我的猜想是从原来删除的位置,因为这个空间可以容纳这个数据。以前做过实验,删除后重启,再写入数据,好像是从后面大可用空间开始写入,但当时没注意写入的数据的大小是否比删除的数据是大还是小!
  实验二:在HFS+的DBR中有一个写保护标志,那么EXFAT中估计应该也有一个这样的标志,以后有时间研究一下是在什么位置?