背景

FAT32作为一个文件系统,有着广泛的应用。在安装操作系统时,许多个人用户默认都选择FAT32文件系统,因此,了解FAT32文件系统下的文件、目录的管理方式就显得非常必要了。

FAT32文件系统与FAT16文件系统有着较大的区别。其中,FAT32采用4字节共32位来表示文件的FAT项,因此,一个FAT32文件系统管理的分区最多可管理的簇数目为:2^32= 4294967296,若选择4K大小的簇,则该分区的最大容量可达:16384G。

             FAT32文件系统分布图

DBR及保留扇区:DBR的含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往会有一些保留扇区。
FAT1:FAT的含义是文件分配表,FAT32一般有两份FAT,FAT1是第一份,也是主FAT。
FAT2:FAT2是FAT32的第二份文件分配表,也是FAT1的备份。
DATA:DATA也就是数据区,是FAT32文件系统的主要区域,其中包含目录区域。

FAT表项

FAT表即文件分配表(File Allocation Table)。FAT32文件表是由一个个表项组成的一张表,其中每一个表项由一个32位的二进制组成,其值对应了相应簇的使用情况,如2号表项对应了2号簇的使用情况,3号表项对应了3号簇的使用情况。

表项数值 对应含义
0x00000000  空闲簇,即表示可用
0x00000001 保留簇
0x00000002 - 0x0FFFFFEF 被占用的簇,其值指向下一个簇号
0x0FFFFFF0 - 0x0FFFFFF6 保留值
0x0FFFFFF7  坏簇
0x0FFFFFF8 - 0x0FFFFFFF  文件最后一个簇

如果某簇是文件的最后一簇,填入的值为0x0FFFFFFF;如果该簇不是文件的最后一簇,则填入的值为该文件占用的下一簇号

任务

1)新建目录、文件,观察硬盘分区的变化,比较新建项目前与新建项目后分区的变化,掌握FAT32文件系统下目录、文件的管理方式。

2)理解FAT32下长文件名的处理方式

3)了解FAT32下子目录的管理

4)理解FAT32下目录、文件删除的实质

操作步骤及工作要点

1.  文件的管理

1)  打开一个FAT32分区,拷贝一个大于20K的文件到根目录下,更名为”shun.txt”

2)  打开WINHEX,打开文件所在的分区。

FAT表第0项 : 0x0FFFFFF8

FAT表第1项 : 0xFFFFFFFF

这两项不代表任何簇的使用情况,而是FAT表的表头,表征了介质描述,是固定值,所以0x00和0x01这两个簇号是不用的

3)  查找文件目录。抓图

4)  计算出起始簇的FAT表项在FAT表中的偏移量

表1 FAT32短文件名目录项参数表                                 

由此表知,0x0005为其簇号,查看FAT表,其内容为“06 00 00 00”

5)  查找FAT表中该文件的相应纪录项,抓图

6)  记录文件的所有簇号。

文件大小为34KB,一个簇8个扇区,合计4KB,所以需要9个簇,如下所示,最后的为0x0FFFFFFF,为文件最后一个簇

记录文件的所有簇号

2.    长文件名的处理

1)  新建一个文本文件,文件名称超过8个字符。

建立文件"cptbtptpbcptdtptp.txt",内容为Hello pt!

2)  在WINHEX中,查找该文件的各种目录项(短文件目录项和长文件目录项)。抓图

了解到:

当创建一个长文件名文件时,系统会自动加上对应的短文件名,其原则如下:

(1)、取长文件名的前6个字符加上"~1"形成短文件名,扩展名不变。

(2)、如果已存在这个文件名,则符号"~"后的数字递增,直到5。
那么系统是如何判断当前目录项是短文件名目录项呢还是长文件名目录项,这里关键是看目录项的第12个字节的值,如果为0x0F时则系统认为是长目录项。

故对应的短文件名为cptbtp~1

3)  在图形中间标出相应的短文件目录项,和长文件目录项。

长目录项:

表2 FAT32长文件名目录项参数表

参考上表,

第一部分

第1目录项unicode为tptp

第2目录项unicode为cptbtptpbcptd

由于逆序,合起来就是我们的文件名

短目录项:长文件名目录项后面还会跟一个短文件名目录项,这个目录项记录了除文件名以外的这个文件的信息,而文件名部分则用上面提到的短文件名目录项替换。

4)  分析数据:比较长目录项和短文件名目录项的差别

3.  子目录的管理

1)  新建一个文件夹,更名成“qwer”

2)  在WINHEX中间查找该子目录的目录项。抓图

3)  计算该目录项中起始簇在fat表中的纪录项偏移量,使用WINHEX跳到相应的位置。抓图

由上图,记录项偏移量为0010,为16号簇,FAT对应值为0x0FFFFFFF

4)  分析数据:比较文件和子目录的目录项的区别和相同的地方。

4.  文件和目录的删除

1)  新建一个文本文件。

2)  使用两种方法删除文件:delete和shift+delete,对比两种方法的区别。

delete只是普通删除文件,可以从回收站之中找回来,而shift+delete是彻底删除文件,不经过回收站,类似于linux的rm指令

3)  彻底删除第1部分和第2部分中的文件,然后查找相应的文件目录和FAT表中的表项,抓图对比删除前后的区别。

可以看到文件目录已经不存在了.

原来的5号簇也全部变成0,表示未占用

4)  彻底删除第3部分中新建的文件夹,然后查找该目录的目录项和FAT表项。抓图,对比删除前后的区别。

文件夹的目录表也被删去

至于FAT表,原始簇号为16,现16簇为0000 0000,未被占用

参考

1.https://www.cnblogs.com/fantacity/p/3897933.html

2.https://www.cnblogs.com/fantacity/p/3900237.html

3.https://blog.csdn.net/yangyang031213/article/details/79030247

FAT32文件系统下的文件、目录管理的更多相关文章

  1. Mac os 下的文件权限管理

    Mac os 下的文件权限管理 命令 ls -l -A 结果 -rw-r--r-- 1 user admin 2326156 4 12 15:24 adb 横线代表空许可.r代表只读,w代表写,x代表 ...

  2. linux下的文件权限管理

    权限管理有两个层面 第一层区分用户:文件属主(u), 组用户(g), 其它(o) 第二层区分权限:读(r),写(w),可执行(x) 这两个层次构成文件权限管理的二维结构 u         g     ...

  3. RAC 环境下参数文件(spfile)管理

    RAC环境下,初始化参数文件与但实例下参数文件有些异同,主要表现在初始化参数可以为多个实例公用,也可以单独设置各个实例的初始化参数.对于那些非共用的初始化参数则必须要单独设置,而共用的则可以单独设置, ...

  4. VS20xx下项目开发目录管理方法

    在VS20XX之后项目管理使用解决方案(solution)管理一个大的开发工程中多个项目(Project). 以下目录配置与工程名称无关,适用于一般的工程组织过程. 对于一般的生成可执行程序的工程,使 ...

  5. [原创]关于在VS解决方案下使用文件夹管理多个项目层次关系的说明

    由于所创建的应用项目或类库项目较多,于是将这些类库放到一个文件夹下.在VS解决方案下确实能看到一个文件夹下多个类库项目这种层次关系.如下图所示: 但打开“我的电脑”,看到的只有类库,并未看到维护层次关 ...

  6. 解决NTFS文件系统下的文件/文件夹属性中没有安全选项卡的问题

    注册表项: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 键:NoSecurityTab ...

  7. SD卡FAT32文件系统格式

    一.声明 1.本文来源和主旨 2.本文测试环境 二.SD卡FAT文件系统 1.SD卡FAT32文件系统的整体布局 2.FAT文件系统简介 ① 文件分配表 ② 目录项 三.DBR(DOS BOOT RE ...

  8. U盘FAT32文件系统

    一.FAT文件系统分为四个部分 参考别人的博客 1.http://blog.163.com/ourhappines@126/blog/static/121363154201311811495492/ ...

  9. 入门级:理解FAT32文件系统(转载翻译)

    FAT(File Allocation Table ) 这个网页的目的是帮助你理解怎么样在微软FAT32文件系统下取得数据,处理的硬盘的大小通常在500M到几百G之间.FAT是一个相对简单和纯净的文件 ...

随机推荐

  1. Scala 面向对象(五):面向对象的特征一:封装性

    1 封装介绍 封装(encapsulation)就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法),才能对数据进行操作. 封装的理解和好处 隐 ...

  2. java 面向对象(四十三):反射(七)反射应用四:动态代理

    1.代理模式的原理:使用一个代理将对象包装起来, 然后用该代理对象取代原始对象.任何对原始对象的调用都要通过代理.代理对象决定是否以及何时将方法调用转到原始对象上. 2.静态代理2.1 举例:实现Ru ...

  3. 05 drf源码剖析之认证

    05 drf源码剖析之认证 目录 05 drf源码剖析之认证 1. 认证简述 2. 认证的使用 3. 源码剖析 4. 总结 1. 认证简述 当我们通过Web浏览器与API进行交互时,我们可以登录,然后 ...

  4. CRM开发系列

    CRM,客户关系管理系统(Customer Relationship Management).企业用CRM技术来管理与客户之间的关系,以求提升企业成功的管理方式,其目的是协助企业管理销售循环:新客户的 ...

  5. ShaderLab-坐标转换

    观察空间就是相机的空间 投影矩阵本质就是对x.y.z分量进行不同程度的缩放(z还做了平移),结果就是视锥体近切面远切面变成正方形.视锥体的中心在(0,0). (对于正交相机,这一步已经得到了立方体) ...

  6. 网络编程-HTTPS

    明文: 对称加密: 非对称:(公钥:pk 私钥:sk) 对称+非对称: 先用非对称方式发送num1给server,server用私钥得出key(由num1算出来),自此,约定C.S以此key(num1 ...

  7. 整理 Linux下列出目录内容的命令

    在 Linux 中,有非常多的命令可以让我们用来执行各种各样的任务.当我们想要像使用文件浏览器一样列出一个目录下的内容时,大家第一时间想到的是 ls 命令.但只有 ls 命令能实现这个目的吗?显然不是 ...

  8. JVM系列-方法调用的原理

    JVM系列-方法调用的原理 最近重新看了一些JVM方面的笔记和资料,收获颇丰,尤其解决了长久以来心中关于JVM方法管理的一些疑问.下面介绍一下JVM中有关方法调用的知识. 目的 方法调用,目的是选择方 ...

  9. Python Ethical Hacking - Basic Concetion

    What is Hacking? Gaining unauthorized access. Hackers? 1.Black-hat Hackers 2.White-hat Hackers 3.Gre ...

  10. 【软件安装】CentOS7安装Tengine_2_3_2(Nginx 1_17_0)

    简单比较一下Tengine 和Nginx 背景 使用最新的软件,可以处理一些bug,文章对CentOS6不做介绍(不会用) 推荐使用Tengine,理由是淘宝再用,兼容 Nginx 可以随时切换 Te ...