Chinaunix首页 | 论坛 | 博客
  • 博客访问: 278477
  • 博文数量: 61
  • 博客积分: 655
  • 博客等级: 上士
  • 技术积分: 489
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-21 18:21
文章分类

全部博文(61)

文章存档

2014年(9)

2013年(23)

2012年(26)

2011年(3)

我的朋友

分类: LINUX

2013-03-11 16:50:15

最近在解决龙芯pmon 在含有2G以上文件的fat文件系统优盘加载 vmlinux 时出错的问题,上网查到关于 fat 文件系统的结构,转载帖过来
原文地址:http://blog.chinaunix.net/uid-26913704-id-3213951.html

       前面已经基于一个格式化的空U盘分析了一下FAT32文件系统存储的组织结构,下面我们从文件操作的角度来分析一下文件系统的运作机制。由于换了个U盘,所以仍然贴出刚格式化的空U盘的几个重要的数据区如下:

DBR FDT_DN

根目录_DN

我们可以看出,在分区格式化的时候,系统将卷标TEST_FAT32存储在2号簇,即跟目录区,如上面根目录贴图所示。同时,在FDT区2号簇标记位置写入了文件结束符FF FF FF 0F。显然,FAT32文件系统将目录当做普通文件来处理的。

下面我们在根目录下新建一个文件夹TEST1,看会有什么变化:

建立了TEST1文件夹后,FDT变成如下:

FDT_TEST1

根目录变成如下:

根目录2

重新分配了3号簇:

3号簇_NEW

从上面的变化可以直观的看出,系统在新建文件夹时完成了如下动作:

     a.在父目录所在簇上建立新的目录项,存储当前所建文件夹信息。

     b.分配一个新簇,给新建的文件夹建立两个目录项:父目录和当前目录。

     c.在FDT表中新分配的簇对应的位置上写下文件结束符。

     d.建立各部分的链路关系:新建文件夹所对应的目录项的文件起始簇号字段写上新分配簇的簇号,新簇上的两个目录项的文件起始簇号字段分配写上父目录所在簇 号(此处是0,本来我以为是2,即根目录所在簇,不知道为什么,可能特地用0指示根目录吧)和当前簇号(此处是3)。

为了验证我们上面分析的正确性,我们再在TEST1文件夹下建立新文件夹TEST11,看是否做了如下操作:

      a.在父目录(即TEST1)所在簇(即3号簇)上建立新的目录项,存储TEST11文件夹信息。

     b.分配一个新簇(应该是4号簇),给新建的文件夹(即TEST11)建立两个目录项:父目录和当前目录。

     c.在FDT表中新分配的簇(应该是4号簇)对应的位置上写下文件结束符。

     d.建立各部分的链路关系:新建文件夹(即TEST11)所对应的目录项的文件起始簇号字段写上新分配簇的簇号(应该是4号簇),,新簇上的两个目录项的文件起始簇号字段分配写上父目录所在簇号(3号簇)和当前簇号(应该是4号簇)。

新建TEST11文件夹后FDT变成:

FDT_TEST11

根目录没有变化:

根目录2

3号簇变成:

3号簇

新分配4号簇:

4号簇

显然我们的估计没有错的,也进一步证明我们前面的分析是正确的。

下面我们再分析建立文件的情况

我们先建立一个100字节的文件TEST.TXT,然后把这个文件拷贝到U盘的根目录下,FDT变成如下:

FDT

根目录变成:

根目录

新分配5号簇保存文件内容:

5号簇

从上面的变化可以直观的看出,系统新建文件和新建文件夹所完成的操作是一样一样的:

     a.在父目录所在簇上建立新的目录项,存储当前所建文件信息。

     b.分配一个新簇,存储新建的文件的内容。

     c.在FDT表中新分配的簇对应的位置上写下文件结束符。

     d.建立链路关系:新建文件所对应的目录项的文件起始簇号字段写上新分配簇的簇号。

结束总结:

      1.在FAT32文件系统中,目录和文件的存储采用统一的方式。

      2.文件系统的操作的单位是簇,每新建立一个文件或文件夹,至少会重新分配一个簇号。

      3.如果一个文件或目录的内容要多个簇才能存储得下,则系统会分配多个簇来存储文件或目录的内容

      4.当需要多个簇时,这些簇可能连续也可能不连续,但无论是连续或是不连续,系统都是采用FDT链表的形式来组织的。

阅读(876) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

甘霖惠七省2013-03-12 21:01:28