CN107943415B - 基于fat文件系统的查找空闲簇的方法和系统 - Google Patents
基于fat文件系统的查找空闲簇的方法和系统 Download PDFInfo
- Publication number
- CN107943415B CN107943415B CN201711106824.7A CN201711106824A CN107943415B CN 107943415 B CN107943415 B CN 107943415B CN 201711106824 A CN201711106824 A CN 201711106824A CN 107943415 B CN107943415 B CN 107943415B
- Authority
- CN
- China
- Prior art keywords
- sector
- mapping table
- fat file
- cluster
- occupied
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
- G06F3/0631—Configuration or reconfiguration of storage systems by allocating resources to storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0643—Management of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于FAT文件系统的查找空闲簇的方法和系统,通过获取FAT文件分配表的映射表;根据所述映射表获取所述FAT文件分配表所占用的存在空闲簇记录的扇区;在所述存在空闲簇记录的扇区中查找空闲簇项,根据所述空闲簇项计算所述空闲簇的位置。在本方案中,通过映射表可以直接找到FAT文件分配表中存在空闲簇记录的扇区,避免从FAT文件分配表的起始扇区开始逐一查找,节省空闲簇的查找时间,提高了空闲簇的查找效率。
Description
技术领域
本发明涉及数据存储领域,特别涉及一种基于FAT文件系统的查找空闲簇的方法和系统。
背景技术
FAT(File Allocation Table)文件分配表是微软公司在FAT文件系统中为磁盘数据文件索引和定位而引进的一种链式结构,FAT文件系统因其读写速度较高,在许多嵌入式系统中得到广泛的应用。嵌入式系统针对各种应用及其需要实现的功能,对硬件和软件进行了严格的裁剪。目前随着应用的日益复杂,对嵌入式系统的实时性需求越来越高,需要快速及时地访问存储单元,其中涉及到查找空闲簇的步骤。
传统技术中查找空闲簇时,一般需要读取FAT文件分配表,从起始扇区开始逐一读取扇区,进行空闲簇的查找,耗费大量时间。当磁盘中存在大量碎片时,查找空闲簇耗费的时间将更加多,因此目前在FAT文件系统中查找空闲簇的效率低下。
发明内容
基于此,有必要针对目前在FAT文件系统中查找空闲簇的效率低下的问题,提供一种基于FAT文件系统的查找空闲簇的方法和系统。
一种基于FAT文件系统的查找空闲簇的方法,包括以下步骤:
获取FAT文件分配表的映射表;其中,映射表存储FAT文件分配表所占用的各个扇区的空闲簇记录状态数据;
根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区;
在存在空闲簇记录的扇区中查找空闲簇项,根据空闲簇项计算空闲簇的位置。
一种基于FAT文件系统的查找空闲簇的系统,包括以下模块:
映射表获取模块,用于获取FAT文件分配表的映射表;其中,映射表存储FAT文件分配表所占用的各个扇区的空闲簇记录状态数据;
扇区获取模块,用于根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区;
空闲簇计算模块,用于在存在空闲簇记录的扇区中查找空闲簇项,根据空闲簇项计算空闲簇的位置。
根据上述的基于FAT文件系统的查找空闲簇的方法和系统,通过获取FAT文件分配表的映射表;根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区;在存在空闲簇记录的扇区中查找空闲簇项,根据空闲簇项计算空闲簇的位置。在本方案中,通过映射表可以直接找到FAT文件分配表中存在空闲簇记录的扇区,避免从FAT文件分配表的起始扇区开始逐一查找,节省空闲簇的查找时间,提高了空闲簇的查找效率。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述基于FAT文件系统的查找空闲簇的方法的步骤。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现上述基于FAT文件系统的查找空闲簇的方法的步骤。
根据上述本发明基于FAT文件系统的查找空闲簇的方法,本发明还提供一种可读存储介质和计算机设备,用于通过程序实现上述基于FAT文件系统的查找空闲簇的方法。
附图说明
图1为本发明一个实施例中的基于FAT文件系统的查找空闲簇的方法的流程示意图;
图2为本发明一个实施例中的基于FAT文件系统的查找空闲簇的系统的结构示意图;
图3为本发明一个实施例中的基于FAT文件系统的查找空闲簇的系统的结构示意图;
图4为本发明一个实施例中的基于FAT文件系统的查找空闲簇的系统的结构示意图;
图5为本发明一个具体实施例中的基于FAT文件系统的查找空闲簇的方法的流程示意图;
图6为本发明一个具体实施例中的空闲簇项为FAT文件分配表所占用的扇区的最后一簇的示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不限定本发明的保护范围。
参见图1所示,为本发明一个实施例的基于FAT文件系统的查找空闲簇的方法的流程示意图。该实施例中的基于FAT文件系统的查找空闲簇的方法包括以下步骤:
步骤S110:获取FAT文件分配表的映射表;其中,映射表存储FAT文件分配表所占用的各个扇区的空闲簇记录状态数据;
FAT文件分配表是FAT文件系统用来给每个文件分配磁盘物理空间的表格,记录有每个文件在磁盘物理空间中的地址。FAT文件系统的存储空间以簇划分,每个簇可包括多个扇区,FAT文件分配表和映射表本身也占用一定扇区,FAT文件分配表所占用的扇区中每项对应FAT文件系统存储空间的一个簇,FAT文件分配表的每项记录了对应的簇是否为被占用、空闲或者已损坏,而映射表则存储FAT文件分配表各个扇区是否有空闲簇项;
步骤S120:根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区;
步骤S130:在存在空闲簇记录的扇区中查找空闲簇项,根据空闲簇项计算空闲簇的位置。
在本实施例中,通过映射表可以直接找到FAT文件分配表中存在空闲簇记录的扇区,避免从FAT文件分配表的起始扇区开始逐一查找,节省空闲簇的查找时间,提高了空闲簇的查找效率。
在其中一个实施例中,获取FAT文件分配表的映射表的步骤包括以下步骤:
创建空白映射表;
依次读取FAT文件分配表所占用的所有扇区;
每读取一个扇区,在当前读取扇区中查找空闲簇记录;在查找到空闲簇记录时,在空白映射表中对应当前读取扇区的比特位置为第一数值;
在读取完FAT文件分配表所占用的所有扇区后,获得FAT文件分配表的映射表。
在本实施例中,通过创建空白映射表,根据FAT文件分配表所占用的各个扇区的空闲簇记录情况,可以获得FAT文件分配表的映射表,下次需要查找空闲簇时,可以根据FAT文件分配表的映射,直接找到FAT文件分配表中存在空闲簇记录的扇区,无需对FAT的各个扇区逐一进行空闲簇的查找,提高了空闲簇的查找效率。
可选的,在查找到空闲簇记录时,在空白映射表中对应当前读取扇区的比特位置为“1”,以表示当前读取的扇区存在空闲簇记录。
在其中一个实施例中,在当前读取扇区中查找空闲簇记录的步骤之后还包括以下步骤:
在未查找到空闲簇记录时,对创建的空白映射表中对应当前读取扇区的比特位置为第二数值。
在本实施例中,若当前读取的FAT文件分配表的扇区中未查找到空闲簇记录时,将空白映射表中的对应的比特位置为第二数值,因此可以在根据映射表查找FAT文件分配表时,无需读取映射表中被置为第二数值的比特位所对应的FAT文件分配表的扇区,节省空闲簇的查找时间,提高空闲簇的查找效率。
可选的,在未查找到空闲簇记录时,对创建的空白映射表中对应当前读取扇区的比特位置为“0”,以表示当前读取的扇区不存在空闲簇记录。
在其中一个实施例中,在存在空闲簇记录的扇区中查找空闲簇项的步骤之后还包括以下步骤:
在查找到空闲簇记录并且空闲簇项为当前读取扇区的最后一簇时,将映射表中对应的比特位置为第二数值。
在本实施例中,若空闲簇为FAT文件分配表的当前读取扇区的最后一簇,由于对找到的空闲簇需要进行数据写入操作,此时FAT文件分配表的当前读取扇区不再存在空闲簇记录,因此将映射表中对应的比特位置为第二数值,可以提高映射表的准确性,提高查找空闲簇的效率。
可选的,在查找到空闲簇记录并且空闲簇为当前读取扇区的最后一簇时,将映射表中对应的比特位置为“0”,以表示当前读取的扇区不存在空闲簇记录。
在其中一个实施例中,根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区的步骤包括以下步骤:
确定映射表中被置为第一数值的比特位所在的当前字节;
获取当前字节所处扇区的偏移值、当前字节在映射表中的偏移值、当前字节中第一个被置为第一数值的比特位的偏移值和单位扇区的字节数;
根据当前字节所处扇区的偏移值、当前字节在映射表中的偏移值、当前字节中第一个被置为第一数值的比特位的偏移值和单位扇区的字节数,计算FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值;
根据FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值读取FAT文件分配表所占用的存在空闲簇记录的扇区。
在本实施例中,提供了一种根据映射表中的特定数据计算FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值的方法,通过计算可以快速获取扇区的具体位置。
可选的,根据表达式n=i*sector_size*8+j*8+x计算FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值;式中,n为FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值,i为当前字节所处扇区的偏移值,j为当前字节在映射表中的偏移值,x为当前字节中第一个被置为第一数值的比特位的偏移值,sector_size为单位扇区的字节数。
在其中一个实施例中,根据存在空闲簇记录的扇区中空闲簇的簇项计算空闲簇的位置的步骤包括以下步骤:
获取FAT文件分配表所占用的存在空闲簇记录的扇区中空闲簇项的偏移值;
根据空闲簇项的偏移值、存在空闲簇记录的扇区的偏移值、单位扇区的字节数和单位簇的字节数,计算出空闲簇的地址。
在本实施例中,提供了一种根据FAT文件分配表所占用的存在空闲簇记录的扇区中的特定数据计算空闲簇地址的方法,通过计算可以快速获取空闲簇的具体位置。
可选的,根据表达式计算空闲簇的地址;式中,cluster_addr为空闲簇的地址,n为存在空闲簇记录的扇区的偏移值,m为空闲簇项的偏移值,sector_size为单位扇区的字节数,cluster_len为单位簇字节数。
在其中一个实施例中,在当前读取扇区中查找空闲簇记录的步骤之后还包括以下步骤:
当被置为第一数值的比特位与被置为第二数值的比特位的位数之和达到写入阈值时,将已置位的比特位写入存储单元。
在本实施例中,在创建空白映射表后,涉及到对空白映射表的比特位进行置位的操作,当被置为第一数值的比特位与被置为第二数值的比特位的位数之和达到写入阈值时,将已置位的比特位写入存储单元,可以在创建映射表过程中减少内存空间的占用。
可选的,映射表的每一个比特位对应FAT文件分配表所占用的一个扇区,FAT文件分配表所占用的每八个扇区对应映射表的一个字节;映射表中被置为第一数值的比特位与被置为第二数值的比特位构成映射表的被标记字节,当被标记字节的数量达到单位扇区字节数时,将被标记字节写入存储单元。
可选的,可以在被标记字节的数量达到单位扇区字节数的多倍时,再将被标记字节写入存储单元,具体为多少倍可根据实际运用环境中内存空间大小而定,以提高映射表的创建速度,同时减少内存空间的占用。
在其中一个实施例中,将已置位的比特位写入存储单元的步骤包括以下步骤:
计算已置位的比特位的CRC值;
将已置位的比特位的CRC值以及已置位的比特位写入存储单元。
在本实施例中,将空白映射表中的已被置位的比特位写入存储单元时,同时计算已置位的比特位的CRC值,将CRC值与已置位的比特位同时写入存储单元,可以在后续读取映射表的过程中,提供映射表有效性检验的判断依据,提高查找空闲簇的准确率。
可选的,可将已置位的比特位的CRC值以及比特位写入存储单元的保留区。
在其中一个实施例中,获取FAT文件分配表的映射表的步骤包括以下步骤:
分别读取映射表包括的多个映射表块;
根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区的步骤包括以下步骤:
根据各映射表块分别获取FAT文件分配表所占用的存在空闲簇记录的扇区。
在本实施例中,通过分块多次读取映射表的方式,可以在读取映射表的过程中减少内存空间的占用。
在其中一个实施例中,分别读取映射表包括的多个映射表块的步骤包括以下步骤:
当获取到FAT文件分配表所占用的存在空闲簇记录的扇区时,记录映射表块的已读位置;
在获取FAT文件分配表所占用的下一个存在空闲簇记录的扇区时,从已读位置开始读取。
在本实施例中,由于映射表块被读取过后,映射表块之前的已读映射表块对应的FAT文件分配表的扇区不再存在空闲簇记录,通过记录映射表块的已读位置,可以在下次读取映射表块时从已读位置开始读取,无需从映射表块的起始位置重新开始读取,可以节省空闲簇的查找时间,提高空闲簇的查找效率。
在其中一个实施例中,分别读取映射表包括的多个映射表块的步骤之前还包括以下步骤:
获取映射表占用的扇区数量;
根据映射表占用的扇区数量,对映射表进行分块。
在本实施例中,一个映射表块可以包括多个扇区,可以根据映射表占用的扇区数量对映射表进行分块,一个映射表块具体包括的扇区数量,可以根据实际计算机设备的内存空间大小以及数据读取速率进行设置。
在其中一个实施例中,获取映射表占用的扇区数量的步骤包括以下步骤:
获取FAT文件分配表所占用的扇区数量和单位扇区的字节数;
根据FAT文件分配表所占用的扇区数量和单位扇区的字节数,计算映射表占用的扇区数量。
在本实施例中,提供了一种计算映射表占用扇区数量的计算方法,可以快速得到映射表占用的扇区数量。
可选的,根据以下表达式计算映射表占用的扇区数量:
式中,fat_table_sector_number为FAT文件分配表所占用的扇区数量,sector_size为单位扇区字节数,fat_cluster_number为存储单元中簇的数量,cluster_len为单位簇所占用的字节数,bitmap_sector_number为映射表占用的扇区数量,“[]”为向上取整运算。
在其中一个实施例中,获取FAT文件分配表的映射表的步骤后还包括以下步骤:
对映射表进行有效性检验;
当映射表的有效性检验结果为有效时,执行根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区的步骤。
在本实施例中,获取到映射表后,需要对映射表进行有效性检验,确保映射表存储的FAT文件分配表所占用的各个扇区的空闲簇记录状态数据无误,可以提高查找空闲簇的准确性,提高查找空闲簇的效率。
在其中一个实施例中,根据存在空闲簇记录的扇区中空闲簇的簇项计算空闲簇的位置的步骤之后还包括以下步骤:
对映射表进行有效性检验;
当映射表的有效性检验结果为无效时,删除映射表,创建空白映射表;
依次读取FAT文件分配表所占用的所有扇区;
每读取一个扇区,在当前读取扇区中查找空闲簇记录;在查找到空闲簇记录时,在空白映射表中对应当前读取扇区的比特位置为第一数值;
在读取完FAT文件分配表所占用的所有扇区后,获得FAT文件分配表的映射表。
在本实施例中,计算得到空闲簇的位置后,空闲簇将被使用,可能使对应的FAT文件分配表的扇区中空闲簇记录发生改变,如果对映射表的更新发生错误,则导致映射表存储的数据不准确,因此在计算空闲簇的位置之后,对映射表进行有效性检验,如无效,则重新建立映射表,可以在下次根据映射表查找空闲簇时,提高查找过程的准确性,从而提高查找空闲簇的效率。
可选的,有效性检验的方式可以为奇偶校验、BCC异或校验、LRC纵向冗余校验或CRC循环冗余校验。
在其中一个实施例中,对映射表进行有效性检验的步骤包括以下步骤:
设置CRC寄存器初值;
依次读取映射表的所有扇区,每读取一个扇区,根据CRC寄存器初值计算当前读取的扇区的CRC值,并将当前读取的扇区计算所得的CRC值作为下一个扇区对应的CRC寄存器初值;
映射表的最后一个扇区的CRC值计算完成后,若对比保留在FAT文件分配表中的CRC值与计算所得的最后一个扇区的CRC值相同,则判定有效性检验结果为有效。
在本实施例中,循环冗余校验(Cyclic Redundancy Check,CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。用于校验的信息字段和校验字段长度可以任意选定,根据应用环境与习惯的不同,CRC循环冗余校验又可分为以下几种标准包括CRC12、CRC16、CRC32等;编码和解码方式简单,检错和纠错能力强,通过CRC循环冗余校验的方法进行有效性检验,可以确保映射表所记录的数据的准确性,提高查找空闲簇的效率。
参见图2所示,为本发明一个具体实施例的基于FAT文件系统的查找空闲簇的系统的结构示意图。该具体实施例中的基于FAT文件系统的查找空闲簇的系统包括以下模块:
映射表获取模块210,用于获取FAT文件分配表的映射表;其中,映射表存储FAT文件分配表所占用的各个扇区的空闲簇记录状态数据;
扇区获取模块220,用于根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区;
空闲簇计算模块230,用于在存在空闲簇记录的扇区中查找空闲簇项,根据空闲簇项计算空闲簇的位置。
在其中一个实施例中,如图3所示,还包括映射表创建模块211,映射表获取模块210获取FAT文件分配表的映射表前,映射表创建模块211创建空白映射表;依次读取FAT文件分配表所占用的所有扇区;每读取一个扇区,在当前读取扇区中查找空闲簇记录;在查找到空闲簇记录时,在空白映射表中对应当前读取扇区的比特位置为第一数值;在读取完FAT文件分配表所占用的所有扇区后,获得FAT文件分配表的映射表。
在其中一个实施例中,映射表创建模块211在未查找到空闲簇记录时,对创建的空白映射表中对应当前读取扇区的比特位置为第二数值。
在其中一个实施例中,映射表创建模块211在查找到空闲簇记录并且空闲簇项为当前读取扇区的最后一簇时,将映射表中对应的比特位置为第二数值。
在其中一个实施例中,映射表创建模块211在被置为第一数值的比特位与被置为第二数值的比特位的位数之和达到写入阈值时,将已置位的比特位写入存储单元。
在其中一个实施例中,映射表创建模块211将已置位的比特位写入存储单元时,计算已置位的比特位的CRC值;将已置位的比特位的CRC值以及已置位的比特位写入存储单元。
在其中一个实施例中,扇区获取模块220确定映射表中被置为第一数值的比特位所在的当前字节;获取当前字节所处扇区的偏移值、当前字节在所处扇区中的偏移值、当前字节中第一个被置为第一数值的比特位的偏移值和单位扇区的字节数;根据当前字节所处扇区的偏移值、当前字节的偏移值、当前字节中第一个被置为第一数值的比特位的偏移值和单位扇区的字节数,计算FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值;根据FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值读取FAT文件分配表所占用的存在空闲簇记录的扇区。
在其中一个实施例中,空闲簇计算模块230获取FAT文件分配表所占用的存在空闲簇记录的扇区中空闲簇项的偏移值;根据空闲簇项的偏移值、存在空闲簇记录的扇区的偏移值、单位扇区的字节数和单位簇的字节数,计算出空闲簇的地址。
在其中一个实施例中,空闲簇计算模块230在查找到空闲簇记录并且空闲簇项为当前读取扇区的最后一簇时,将映射表中对应的比特位置为第二数值。
在其中一个实施例中,映射表获取模块210分别读取映射表包括的多个映射表块;扇区获取模块220根据各映射表块分别获取FAT文件分配表所占用的存在空闲簇记录的扇区。
在其中一个实施例中,映射表获取模块210在获取到FAT文件分配表所占用的存在空闲簇记录的扇区时,记录映射表块的已读位置;在获取FAT文件分配表所占用的下一个存在空闲簇记录的扇区时,映射表获取模块210从已读位置开始读取映射表的下一个映射表块。
在其中一个实施例中,映射表获取模块210获取映射表占用的扇区数量;根据映射表占用的扇区数量,对映射表进行分块。
在其中一个实施例中,映射表获取模块210获取FAT文件分配表所占用的扇区数量和单位扇区的字节数;根据FAT文件分配表所占用的扇区数量和单位扇区的字节数,计算映射表占用的扇区数量。
在其中一个实施例中,如图4所示,基于FAT文件系统的查找空闲簇的系统还包括有效性检验模块212,映射表获取模块210获取FAT文件分配表的映射表后,有效性检验模块212对映射表进行有效性检验;当映射表的有效性检验结果为有效时,扇区获取模块220执行根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区的步骤。
在其中一个实施例中,空闲簇计算模块230根据空闲簇项计算空闲簇的位置后,有效性检验模块212对映射表进行有效性检验;当映射表的有效性检验结果为无效时,删除映射表;
映射表创建模块211创建空白映射表;依次读取FAT文件分配表所占用的所有扇区;每读取一个扇区,在当前读取扇区中查找空闲簇记录;在查找到空闲簇记录时,在空白映射表中对应当前读取扇区的比特位置为第一数值;在读取完FAT文件分配表所占用的所有扇区后,获得FAT文件分配表的映射表。
在其中一个实施例中,有效性检验模块212设置CRC寄存器初值;依次读取映射表的所有扇区,每读取一个扇区,根据CRC寄存器初值计算当前读取的扇区的CRC值,并将当前读取的扇区计算所得的CRC值作为下一个扇区对应的CRC寄存器初值;映射表的最后一个扇区的CRC值计算完成后,若对比保留在FAT文件分配表中的CRC值与计算所得的最后一个扇区的CRC值相同,则判定有效性检验结果为有效。
本发明的基于FAT文件系统的查找空闲簇的系统与本发明的基于FAT文件系统的查找空闲簇的方法一一对应,在上述基于FAT文件系统的查找空闲簇的方法的实施例阐述的技术特征及其有益效果均适用于基于FAT文件系统的查找空闲簇的系统的实施例中
参见图5所示,为本发明一个具体实施例的基于FAT文件系统的查找空闲簇的方法的流程示意图。该具体实施例中的基于FAT文件系统的查找空闲簇的方法包括以下步骤:
步骤S310:启动计算机设备,挂载FAT文件系统,判断是否存在FAT文件分配表的映射表;若否,创建映射表;若是,执行下一步;
其中,创建映射表的步骤包括以下步骤:
创建空白映射表;
依次读取FAT文件分配表所占用的所有扇区;
每读取一个扇区,在当前读取扇区中查找空闲簇记录;在查找到空闲簇记录时,在空白映射表中对应当前读取扇区的比特位置为1;在未查找到空闲簇记录时,对创建的空白映射表中对应当前读取扇区的比特位置为0;每八个FAT文件分配表所占用的扇区对应映射表的一个字节;
在读取完FAT文件分配表所占用的所有扇区后,获得FAT文件分配表的映射表;
可选的,当映射表被置位的字节数达到单位扇区字节数大小时,对被置位的字节进行CRC计算,将被置位的字节以及计算所得CRC值写入存储单元的保留区;
可选的,当FAT文件分配表所占用的所有扇区对应的映射表的比特位均已被置位后,对映射表进行CRC计算,将映射表以及计算所得的CRC值写入存储单元的保留区;
步骤S320:对映射表进行有效性检验;若对映射表的有效性检验结果为无效,创建映射表;若对映射表的有效性检验结果为有效,执行下一步;
其中,对映射表进行有效性检验的步骤包括以下步骤:
设置CRC16寄存器初值;
依次读取映射表的所有扇区,每读取一个扇区,根据CRC16寄存器初值计算当前读取的扇区的CRC16值,并将当前读取的扇区计算所得的CRC16值作为下一个扇区对应的CRC16寄存器初值;
映射表的最后一个扇区的CRC16值计算完成后,若对比保留在FAT文件分配表中的CRC16值与计算所得的最后一个扇区的CRC16值相同,则判定有效性检验结果为有效,否则判定有效性检验结果为无效;
步骤S330:根据映射表获取FAT文件分配表所占用的存在空闲簇记录的扇区,包括以下步骤:
依次读取映射表的多个扇区;
每读取到映射表的一个扇区,确定映射表中被置为第一数值的比特位所在的当前字节;获取当前字节所处扇区的偏移值、当前字节在映射表中的偏移值、当前字节中第一个被置为第一数值的比特位的偏移值和单位扇区的字节数,根据表达式n=i*sector_size*8+j*8+x计算FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值,并根据存在空闲簇记录的扇区的偏移值获取存在空闲簇记录的扇区;式中,n为FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值,i为当前字节所处扇区的偏移值,j为当前字节在映射表中的偏移值,x为当前字节中第一个被置为第一数值的比特位的偏移值,sector_size为单位扇区的字节数;
步骤S340:根据FAT文件分配表所占用的存在空闲簇记录的扇区获取空闲簇的位置,包括以下步骤:
获取FAT文件分配表所占用的存在空闲簇记录的扇区中空闲簇项的偏移值;根据表达式计算空闲簇的地址;式中,cluster_addr为空闲簇的地址,n为存在空闲簇记录的扇区的偏移值,m为空闲簇项的偏移值,sector_size为单位扇区的字节数,cluster_len为单位簇字节数;
其中,如图6所示,获取到的空闲簇项(方框中的簇项)为FAT文件分配表所占用的扇区的最后一簇时,将映射表的对应的比特位置为“0”;获取到的空闲簇项为FAT文件分配表所占用的扇区的最后一簇。
步骤S350:在关闭计算机设备前,对映射表进行有效性检验;若对映射表的有效性检验结果为无效,创建映射表;若对映射表的有效性检验结果为有效,继续执行关闭计算机的步骤。
在本具体实施例中,通过映射表可以快速查找到FAT文件分配表中所占用的存在空闲簇记录的扇区,解决了传统技术中在FAT文件系统查找空闲簇非常耗时的问题,并且避免长时占用内存空间,对于小型嵌入式系统可以节约大量内存空间和查找空闲簇时间,提高了查找空闲簇的效率。
根据上述基于FAT文件系统的查找空闲簇的方法,本发明实施例还提供一种可读存储介质和一种计算机设备。可读存储介质上存储有可执行程序,该程序被处理器执行时实现上述基于FAT文件系统的查找空闲簇的方法的步骤;计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的可执行程序,处理器执行程序时实现上述基于FAT文件系统的查找空闲簇的方法的步骤。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成。所述的程序可以存储于可读取存储介质中。该程序在执行时,包括上述方法所述的步骤。所述的存储介质,包括:ROM/RAM、磁碟、光盘等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (8)
1.一种基于FAT文件系统的查找空闲簇的方法,其特征在于,包括以下步骤:
获取FAT文件分配表的映射表;其中,所述映射表存储所述FAT文件分配表所占用的各个扇区的空闲簇记录状态数据;
根据所述映射表获取所述FAT文件分配表所占用的存在空闲簇记录的扇区;
在所述存在空闲簇记录的扇区中查找空闲簇项,根据所述空闲簇项计算所述空闲簇的位置;
所述获取FAT文件分配表的映射表的步骤包括以下步骤:
创建空白映射表;
依次读取FAT文件分配表所占用的所有扇区;
每读取一个扇区,在当前读取扇区中查找空闲簇记录;在查找到空闲簇记录时,在所述空白映射表中对应当前读取扇区的比特位置为第一数值;
在读取完FAT文件分配表所占用的所有扇区后,获得所述FAT文件分配表的映射表;
所述在当前读取扇区中查找空闲簇记录的步骤之后还包括以下步骤:
在未查找到空闲簇记录时,对创建的空白映射表中对应当前读取扇区的比特位置为第二数值;
所述在当前读取扇区中查找空闲簇记录的步骤之后还包括以下步骤:
当所述被置为第一数值的比特位与被置为第二数值的比特位的位数之和达到写入阈值时,将已置位的比特位写入存储单元的保留区;
所述根据所述映射表获取所述FAT文件分配表所占用的存在空闲簇记录的扇区的步骤包括以下步骤:
确定所述映射表中被置为第一数值的比特位所在的当前字节;
获取当前字节所处扇区的偏移值、当前字节在所处扇区中的偏移值、当前字节中第一个被置为第一数值的比特位的偏移值和单位扇区的字节数;
根据表达式n=i*sector_size*8+j*8+x计算FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值;式中,n为FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值,i为当前字节所处扇区的偏移值,j为当前字节在映射表中的偏移值,x为当前字节中第一个被置为第一数值的比特位的偏移值,sector_size为单位扇区的字节数;
根据所述FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值读取所述FAT文件分配表所占用的存在空闲簇记录的扇区;
所述根据所述空闲簇项计算所述空闲簇的位置的步骤包括以下步骤:
获取所述FAT文件分配表所占用的存在空闲簇记录的扇区中空闲簇项的偏移值;
根据表达式计算空闲簇的地址;式中,cluster_addr为空闲簇的地址,n为存在空闲簇记录的扇区的偏移值,m为空闲簇项的偏移值,sector_size为单位扇区的字节数,cluster_len为单位簇字节数;
所述获取FAT文件分配表的映射表的步骤包括以下步骤:
分别读取所述映射表包括的多个映射表块;
所述根据所述映射表获取所述FAT文件分配表所占用的存在空闲簇记录的扇区的步骤包括以下步骤:
根据各所述映射表块分别获取所述FAT文件分配表所占用的存在空闲簇记录的扇区;
所述分别读取所述映射表包括的多个映射表块的步骤之前还包括以下步骤:
获取所述映射表占用的扇区数量;
根据所述映射表占用的扇区数量,对所述映射表进行分块;
所述获取所述映射表占用的扇区数量的步骤包括以下步骤:
获取FAT文件分配表所占用的扇区数量和单位扇区的字节数;
根据所述FAT文件分配表所占用的扇区数量和单位扇区的字节数,计算所述映射表占用的扇区数量;
其中,根据以下表达式计算映射表占用的扇区数量:
式中,fat_table_sector_number为FAT文件分配表所占用的扇区数量,sector_size为单位扇区字节数,fat_cluster_number为存储单元中簇的数量,cluster_len为单位簇所占用的字节数,bitmap_sector_number为映射表占用的扇区数量,“[]”为向上取整运算。
2.根据权利要求1所述的基于FAT文件系统的查找空闲簇的方法,其特征在于,所述将已置位的比特位写入存储单元的保留区的步骤包括以下步骤:
计算所述已置位的比特位的CRC值;
将所述已置位的比特位的CRC值以及所述已置位的比特位写入存储单元的保留区。
3.根据权利要求1所述的基于FAT文件系统的查找空闲簇的方法,其特征在于,所述在所述存在空闲簇记录的扇区中查找空闲簇项的步骤之后还包括以下步骤:
在查找到空闲簇记录并且所述空闲簇项为当前读取扇区的最后一簇时,将所述映射表中对应的比特位置为第二数值。
4.根据权利要求1所述的基于FAT文件系统的查找空闲簇的方法,其特征在于,所述分别读取所述映射表包括的多个映射表块的步骤包括以下步骤:
当获取到所述FAT文件分配表所占用的存在空闲簇记录的扇区时,记录所述映射表块的已读位置;
在获取所述FAT文件分配表所占用的下一个存在空闲簇记录的扇区时,从所述已读位置开始读取。
5.根据权利要求1所述的基于FAT文件系统的查找空闲簇的方法,其特征在于,所述获取FAT文件分配表的映射表的步骤后还包括以下步骤:
对所述映射表进行有效性检验;
当所述映射表的有效性检验结果为有效时,执行所述根据所述映射表获取所述FAT文件分配表所占用的存在空闲簇记录的扇区的步骤。
6.根据权利要求1所述的基于FAT文件系统的查找空闲簇的方法,其特征在于,所述根据所述存在空闲簇记录的扇区中空闲簇的簇项计算所述空闲簇的位置的步骤之后还包括以下步骤:
对所述映射表进行有效性检验;
当所述映射表的有效性检验结果为无效时,删除所述映射表,创建空白映射表;
依次读取FAT文件分配表所占用的所有扇区;
每读取一个扇区,在当前读取扇区中查找空闲簇记录;在查找到空闲簇记录时,在所述空白映射表中对应当前读取扇区的比特位置为第一数值;
在读取完FAT文件分配表所占用的所有扇区后,获得所述FAT文件分配表的映射表。
7.根据权利要求5或6所述的基于FAT文件系统的查找空闲簇的方法,其特征在于,所述对映射表进行有效性检验的步骤包括以下步骤:
设置CRC寄存器初值;
依次读取所述映射表的所有扇区,每读取一个扇区,根据所述CRC寄存器初值计算当前读取的扇区的CRC值,并将所述当前读取的扇区计算所得的CRC值作为下一个扇区对应的CRC寄存器初值;
所述映射表的最后一个扇区的CRC值计算完成后,若对比保留在FAT文件分配表中的CRC值与计算所得的最后一个扇区的CRC值相同,则判定所述有效性检验结果为有效。
8.一种基于FAT文件系统的查找空闲簇的系统,其特征在于,包括以下模块:
映射表获取模块,用于获取FAT文件分配表的映射表;其中,所述映射表存储所述FAT文件分配表所占用的各个扇区的空闲簇记录状态数据;
扇区获取模块,用于根据所述映射表获取所述FAT文件分配表所占用的存在空闲簇记录的扇区;
空闲簇计算模块,用于在所述存在空闲簇记录的扇区中查找空闲簇项,根据所述空闲簇项计算所述空闲簇的位置;
映射表创建模块,用于创建空白映射表;依次读取FAT文件分配表所占用的所有扇区;每读取一个扇区,在当前读取扇区中查找空闲簇记录;在查找到空闲簇记录时,在空白映射表中对应当前读取扇区的比特位置为第一数值;在读取完FAT文件分配表所占用的所有扇区后,获得FAT文件分配表的映射表;
所述映射表创建模块还用于在未查找到空闲簇记录时,对创建的空白映射表中对应当前读取扇区的比特位置为第二数值;
所述映射表创建模块还用于在被置为第一数值的比特位与被置为第二数值的比特位的位数之和达到写入阈值时,将已置位的比特位写入存储单元的保留区;
所述扇区获取模块还用于确定映射表中被置为第一数值的比特位所在的当前字节;获取当前字节所处扇区的偏移值、当前字节在所处扇区中的偏移值、当前字节中第一个被置为第一数值的比特位的偏移值和单位扇区的字节数;根据表达式n=i*sector_size*8+j*8+x计算FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值;式中,n为FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值,i为当前字节所处扇区的偏移值,j为当前字节在映射表中的偏移值,x为当前字节中第一个被置为第一数值的比特位的偏移值,sector_size为单位扇区的字节数;根据FAT文件分配表所占用的存在空闲簇记录的扇区的偏移值读取FAT文件分配表所占用的存在空闲簇记录的扇区;
所述空闲簇计算模块还用于获取FAT文件分配表所占用的存在空闲簇记录的扇区中空闲簇项的偏移值;根据表达式计算空闲簇的地址;式中,cluster_addr为空闲簇的地址,n为存在空闲簇记录的扇区的偏移值,m为空闲簇项的偏移值,sector_size为单位扇区的字节数,cluster_len为单位簇字节数;
所述映射表获取模块还用于分别读取映射表包括的多个映射表块;
所述扇区获取模块还用于根据各映射表块分别获取FAT文件分配表所占用的存在空闲簇记录的扇区;
所述映射表获取模块还用于获取映射表占用的扇区数量;根据映射表占用的扇区数量,对映射表进行分块;
所述映射表获取模块还用于获取FAT文件分配表所占用的扇区数量和单位扇区的字节数;根据所述FAT文件分配表所占用的扇区数量和单位扇区的字节数,计算映射表占用的扇区数量;
其中,根据以下表达式计算映射表占用的扇区数量:
式中,fat_table_sector_number为FAT文件分配表所占用的扇区数量,sector_size为单位扇区字节数,fat_cluster_number为存储单元中簇的数量,cluster_len为单位簇所占用的字节数,bitmap_sector_number为映射表占用的扇区数量,“[]”为向上取整运算。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711106824.7A CN107943415B (zh) | 2017-11-10 | 2017-11-10 | 基于fat文件系统的查找空闲簇的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711106824.7A CN107943415B (zh) | 2017-11-10 | 2017-11-10 | 基于fat文件系统的查找空闲簇的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107943415A CN107943415A (zh) | 2018-04-20 |
CN107943415B true CN107943415B (zh) | 2021-04-02 |
Family
ID=61934799
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711106824.7A Active CN107943415B (zh) | 2017-11-10 | 2017-11-10 | 基于fat文件系统的查找空闲簇的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107943415B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111831224B (zh) * | 2020-06-22 | 2024-04-19 | 中孚安全技术有限公司 | 一种擦除exFAT分区文件剩余空间的方法,系统及设备 |
CN112800005B (zh) * | 2021-01-22 | 2023-01-03 | 中孚安全技术有限公司 | 一种文件系统深度检查方法、系统、终端及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008009688A (ja) * | 2006-06-29 | 2008-01-17 | Seiko Epson Corp | データアクセスシステム、データアクセスプログラム及びデータアクセス方法 |
CN101201798A (zh) * | 2007-03-19 | 2008-06-18 | 深圳市同洲电子股份有限公司 | 一种分配空闲簇以及释放簇的方法 |
CN101303667A (zh) * | 2008-06-25 | 2008-11-12 | 炬力集成电路设计有限公司 | 建立磁盘空簇表及查找磁盘空簇的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5515218B2 (ja) * | 2008-01-16 | 2014-06-11 | ティアック株式会社 | データアクセス方法およびデータアクセス装置 |
-
2017
- 2017-11-10 CN CN201711106824.7A patent/CN107943415B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008009688A (ja) * | 2006-06-29 | 2008-01-17 | Seiko Epson Corp | データアクセスシステム、データアクセスプログラム及びデータアクセス方法 |
CN101201798A (zh) * | 2007-03-19 | 2008-06-18 | 深圳市同洲电子股份有限公司 | 一种分配空闲簇以及释放簇的方法 |
CN101303667A (zh) * | 2008-06-25 | 2008-11-12 | 炬力集成电路设计有限公司 | 建立磁盘空簇表及查找磁盘空簇的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107943415A (zh) | 2018-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8949690B2 (en) | Memory controller | |
CN109871333B (zh) | 存取闪存模块的方法及相关的闪存控制器与电子装置 | |
US9395924B2 (en) | Management of and region selection for writes to non-volatile memory | |
US7512864B2 (en) | System and method of accessing non-volatile computer memory | |
CN108563532B (zh) | 数据处理方法及相关装置 | |
CN106910528B (zh) | 一种固态硬盘数据巡检的优化方法及装置 | |
CN110413454B (zh) | 基于存储阵列的数据重建方法、装置及存储介质 | |
CN105917303B (zh) | 一种控制器、识别数据块稳定性的方法和存储系统 | |
CN109976669B (zh) | 一种边缘存储方法、装置和存储介质 | |
CN114356248B (zh) | 一种数据处理方法和装置 | |
US20140351628A1 (en) | Information processing device, control circuit, computer-readable recording medium for control program, and control method | |
CN104299637A (zh) | 快闪存储器装置及其运作方法 | |
KR20090008065A (ko) | 데이터 쓰기 방법 및 장치 | |
CN111966281B (zh) | 数据储存装置与数据处理方法 | |
CN107943415B (zh) | 基于fat文件系统的查找空闲簇的方法和系统 | |
JP2014220021A (ja) | 情報処理装置、制御回路、制御プログラム、および制御方法 | |
US11366608B2 (en) | Method, electronic device and computer readable storage medium for i/o management | |
US9396104B1 (en) | Accessing compressed data of varying-sized quanta in non-volatile memory | |
CN116486890A (zh) | 基于校验复用的固态硬盘ftl方法、系统、设备及介质 | |
CN116382582A (zh) | 一种raid重映射方法、系统、设备以及存储介质 | |
CN103473179A (zh) | 后台系统及其删除固态硬盘重复数据的方法 | |
CN109542359B (zh) | 一种数据重建方法、装置、设备及计算机可读存储介质 | |
CN113703671B (zh) | 一种数据块擦除方法及相关装置 | |
US20230168830A1 (en) | Method and apparatus for data access of nand flash file, and storage medium | |
CN109491620B (zh) | 存储数据重写方法、装置、服务器及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder |
Address after: 519000 No. 333, Kexing Road, Xiangzhou District, Zhuhai City, Guangdong Province Patentee after: ZHUHAI JIELI TECHNOLOGY Co.,Ltd. Address before: Floor 1-107, building 904, ShiJiHua Road, Zhuhai City, Guangdong Province Patentee before: ZHUHAI JIELI TECHNOLOGY Co.,Ltd. |
|
CP02 | Change in the address of a patent holder |