CN104657471A - 一种fat文件***的预分配文件建立方法及*** - Google Patents
一种fat文件***的预分配文件建立方法及*** Download PDFInfo
- Publication number
- CN104657471A CN104657471A CN201510077470.2A CN201510077470A CN104657471A CN 104657471 A CN104657471 A CN 104657471A CN 201510077470 A CN201510077470 A CN 201510077470A CN 104657471 A CN104657471 A CN 104657471A
- Authority
- CN
- China
- Prior art keywords
- file
- fat
- directory
- class
- bunch
- 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.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种FAT文件***的预分配文件建立方法,包括如下步骤:获取磁盘分区信息;在FAT表中建立根目录的簇链关系;根据每一类文件中每个文件所占用的簇数,在内存中建立完一类文件中每个文件的簇链关系后将该类文件的簇链关系更新到磁盘的FAT表中;采用短文件名格式组织各文件目录项的字段,在内存建立完一类文件的所有目录项后将该类文件的所有目录项一次性写入磁盘中;将保留区中分区剩余簇数修改为0,同时对FAT表中未使用的簇进行填充,完成文件建立。本发明还提供一种FAT文件***的预分配文件建立***,提高了建立文件的速度以及磁盘读写的速度。
Description
技术领域
本发明涉及文件***领域,尤其涉及一种FAT文件***的预分配文件建立方法及***。
背景技术
文件***是操作***用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构,其作为操作***与驱动器之间的接口,当操作***请求从硬盘里读取一个文件时,会请求相应的文件***打开文件,扇区是磁盘最小的物理存储单元,但由于操作***无法对数目众多的扇区进行寻址,所以操作***就将相邻的扇区组合在一起,形成一个簇,然后再对簇进行管理,每个簇可以包括2、4、8、16、32 或64 个扇区,簇是操作***所使用的逻辑概念。常见的文件***包括FAT、NTFS、EXT2/3等,FAT文件***以其兼容性好、简单易用等优点而得到广泛应用,已经越来越多的嵌入式存储设备以FAT作为其文件***。现有磁盘比较多的是机械硬盘,。当文件是连续的或则连续操作的文件是相邻的,磁头移动的距离短,读写速度快,效率高,当文件不连续时,磁头移动距离较大,读写速度慢且使用效率低下,影响硬盘的使用效率。
为保证磁盘文件***关键信息区的不可变更性,如FAT文件***的引导区、FAT表和目录项,就需要在文件格式化时预先在磁盘上建立起已知文件(预留文件),从而保证文件***关键信息区的稳定可靠,但直接使用FAT文件***提供的文件建立和扩展接口来实现的话,会出现文件目录项的不连续,而不连续的文件目录项会使得文件在读写时磁头的移动距离变大,使得文件读写速度变慢,导致文件建立耗时长,且使用效率低下,影响磁盘的使用寿命。
发明内容
本发明要解决的技术问题之一,在于提供一种FAT文件***的预分配文件建立方法,保证了数据的连续性以及FAT链表的连续性,提高磁盘读写效率。
本发明要解决的技术问题之一是这样实现的:一种FAT文件***的预分配文件建立方法,包括如下步骤:
步骤10、在LINUX***下,以设备文件的形式打开磁盘分区,读取保留区中操作***引导记录区,获取磁盘分区信息;
步骤20、根据待建立文件总个数确定根目录所占用的簇数,并根据根目录所占用的簇数在FAT表中建立根目录的簇链关系;
步骤30、根据每一类文件中每个文件所占用的簇数,在内存中建立完一类文件中每个文件的簇链关系后将该类文件的簇链关系更新到磁盘的FAT表中;
步骤40、采用短文件名格式组织各文件目录项的字段,在内存建立完一类文件的所有目录项后将该类文件的所有目录项一次性写入磁盘中;
步骤50、将保留区中分区剩余簇数修改为0,同时对FAT表中未使用的簇进行填充,完成文件建立。
进一步的,所述步骤10中磁盘分区信息包括扇区字节数、每簇扇区数、总扇区数、FAT表个数、保留扇区数和FAT表大小。
进一步的,每所述文件目录项占用32个字节。
进一步的,所述步骤40进一步包括:
步骤41、采用短文件名格式组织各文件目录项的字段,所述字段包括文件名、本文件的起始簇号、文件生成日期、文件的读写属性和文件长度;
步骤42、根据文件类型在内存中建立同一类文件的所有目录项后,一次性把同一类文件的所有目录项写入磁盘中。
本发明要解决的技术问题之二,在于提供一种FAT文件***的预分配文件建立***,保证了数据的连续性以及FAT链表的连续性,提高磁盘读写效率。
本发明要解决的技术问题之二是这样实现的:一种FAT文件***的预分配文件建立***,包括文件***信息获取模块、根目录簇链建立模块、类文件簇链建立模块、类文件目录组织和建立模块以及空闲扇区数回写模块;
文件***信息获取模块:用于在LINUX***下,以设备文件的形式打开磁盘分区,读取保留区中操作***引导记录区,获取磁盘分区信息;
根目录簇链建立模块:用于根据待建立文件总个数确定根目录所占用的簇数,并根据根目录所占用的簇数在FAT表中建立根目录的簇链关系;
类文件簇链建立模块:用于根据每一类文件中每个文件所占用的簇数,在内存中建立完一类文件中每个文件的簇链关系后将该类文件的簇链关系更新到磁盘的FAT表中;
类文件目录组织和建立模块:用于采用短文件名格式组织各文件目录项的字段,在内存建立完一类文件的所有目录项后将该类文件的所有目录项一次性写入磁盘中;
空闲扇区数回写模块:用于将保留区中分区剩余簇数修改为0,同时对FAT表中未使用的簇进行填充,完成文件建立。
进一步的,所述文件***信息获取模块中磁盘分区信息包括扇区字节数、每簇扇区数、总扇区数、FAT表个数、保留扇区数和FAT表大小。
进一步的,每所述文件目录项占用32个字节。
进一步的,所述类文件目录组织和建立模块进一步包括:文件目录项组织模块和文件目录项建立模块;
文件目录项组织模块:用于采用短文件名格式组织各文件目录项的字段。所述字段包括文件名、本文件的起始簇号、文件生成日期、文件的读写属性和文件长度;
文件目录项建立模块:用于根据文件类型在内存中建立同一类文件的所有目录项后,一次性把同一类文件的所有目录项写入磁盘中。
本发明具有如下优点:本发明通过将FAT表项已经占用的簇指向下一个簇号,即除了文件的尾簇,每一FAT表项中的数据是下一个FAT表项的ID号,既保证了数据的连续性,也保证了FAT链表的连续性,提高了建立文件的速度以及磁盘读写的速度。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明方法执行流程图。
图2为本发明***逻辑结构示意图。
图3为本发明磁盘信息映射示意图。
具体实施方式
请参阅图1,一种FAT文件***的预分配文件建立方法,包括如下步骤:
步骤10、在LINUX***下,以设备文件的形式打开磁盘分区,读取保留区中操作***引导记录区,获取磁盘分区信息,包括扇区字节数、每簇扇区数、总扇区数、FAT表个数、保留扇区数和FAT表大小;
例如,一个磁盘空间为500G的磁盘,预分配4类文件:信息文件2个,每个大小10M;索引文件1833个,每个大小4M;视频文件1833个,每个大小256M;获取磁盘分区信息如下:前后需统一
扇区字节数:512;
每簇扇区数:32;
总扇区数:976773168;
FAT表个数:2;
保留扇区数:6;
FAT表大小:238354字节;
步骤20、根据待建立文件总个数确定根目录所占用的簇数:((2+4+1833+1833)*32+32*512-1)/(32*512)=8;
根据根目录所占用的簇数在FAT表中建立根目录的簇链关系如表1:
表1
簇号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
指向 | 0xfffffff8 | 0xffffffff | 0x00000004 | 0x00000005 | 0x00000006 | 0x00000007 | 0x00000008 | 0x00000009 | 0x0000000A |
簇号 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
指向 | 0xffffffff | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
其中,簇号为1和2的簇为操作***保留簇,由操作***在格式化分区的时候固定写入0xfffffff8和0xffffffff,从第3簇到第10簇共8个簇为目录项所占用的簇,每个簇指向下一个簇的簇号,直到第10个簇,其指向为0xffffffff,表示簇链的结束;
步骤30、根据每一类文件中每个文件所占用的簇数,在内存中建立完一类文件中每个文件的簇链关系后将该类文件的簇链关系更新到磁盘的FAT表中;其中,每类文件的每个文件所占用的簇数如下:
每个信息文件所占用的簇数为:(1*1024*1024 + 32*512 - 1)/ 32*512 = 64;
每个列表文件所占用的簇数为:(10*1024*1024 + 32*512 - 1)/ 32*512 = 640;
每个索引文件所占用的簇数为:(4*1024*1024 + 32*512 - 1)/ 32*512 = 256;
每个数据文件所占用的簇数为:(256*1024*1024 + 32*512 - 1)/ 32*512 = 16384;
步骤40、采用短文件名格式组织各文件目录项的字段,每所述文件目录项占用32个字节,在内存建立完一类文件的所有目录项后将该类文件的所有目录项一次性写入磁盘中;该步骤进一步包括:
步骤41、采用短文件名格式组织各文件目录项的字段,每所述文件目录项占用32个字节,所述字段包括文件名、本文件的起始簇号、文件生成日期、文件的读写属性和文件长度;
步骤42、根据文件类型在内存中建立同一类文件的所有目录项后,一次性把同一类文件的所有目录项写入磁盘中;
步骤50、将保留区中分区剩余簇数修改为0,同时对FAT表中未使用的簇进行填充,完成文件建立;由于文件的建立过程没有经过文件***的通用接口,保留扇区中记录磁盘空闲簇数的信息没有随着文件的建立而更新,因此需要将保留区中分区剩余簇数修改为0,表示磁盘空间被全部占用,从而拒绝在本磁盘上建立非预分配文件之外的文件,同时对FAT表中未使用的簇进行填充,写入坏簇标志(0xFFFFFFF7),防止操作***利用未使用的FAT表写入新的文件,破坏磁盘文件结构。
请参阅图2,一种FAT文件***的预分配文件建立***,包括文件***信息获取模块、根目录簇链建立模块、类文件簇链建立模块、类文件目录组织和建立模块以及空闲扇区数回写模块;
文件***信息获取模块:用于在LINUX***下,以设备文件的形式打开磁盘分区,读取保留区中操作***引导记录区,获取磁盘分区信息,所述磁盘分区信息包括扇区字节数、每簇扇区数、总扇区数、FAT表个数、保留扇区数和FAT表大小;
根目录簇链建立模块:用于根据待建立文件总个数确定根目录所占用的簇数,并根据根目录所占用的簇数在FAT表中建立根目录的簇链关系;
类文件簇链建立模块:用于根据每一类文件中每个文件所占用的簇数,在内存中建立完一类文件中每个文件的簇链关系后将该类文件的簇链关系更新到磁盘的FAT表中;
类文件目录组织和建立模块:用于采用短文件名格式组织各文件目录项的字段,每所述文件目录项占用32个字节,在内存建立完一类文件的所有目录项后将该类文件的所有目录项一次性写入磁盘中;该模块进一步包括:文件目录项组织模块和文件目录项建立模块;
文件目录项组织模块:用于采用短文件名格式组织各文件目录项的字段,每所述文件目录项占用32个字节,所述字段包括文件名、本文件的起始簇号、文件生成日期、文件的读写属性和文件长度;
文件目录项建立模块:用于根据文件类型在内存中建立同一类文件的所有目录项后,一次性把同一类文件的所有目录项写入磁盘中
空闲扇区数回写模块:用于将保留区中分区剩余簇数修改为0,同时对FAT表中未使用的簇进行填充,完成文件建立,得到如图3所示的磁盘信息映射关系;由于文件的建立过程没有经过文件***的通用接口,保留扇区中记录磁盘空闲簇数的信息没有随着文件的建立而更新,因此需要将保留区中分区剩余簇数修改为0,表示磁盘空间被全部占用,从而拒绝在本磁盘上建立非预分配文件之外的文件,同时对FAT表中未使用的簇进行填充,写入坏簇标志(0xFFFFFFF7),防止操作***利用未使用的FAT表写入新的文件,破坏磁盘文件结构。
另外,在计算簇数时,采用向上取整的方式计算,即不足一个簇的部分均以一个簇计算。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (8)
1.一种FAT文件***的预分配文件建立方法,其特征在于:包括如下步骤:
步骤10、在LINUX***下,以设备文件的形式打开磁盘分区,读取保留区中操作***引导记录区,获取磁盘分区信息;
步骤20、根据待建立文件总个数确定根目录所占用的簇数,并根据根目录所占用的簇数在FAT表中建立根目录的簇链关系;
步骤30、根据每一类文件中每个文件所占用的簇数,在内存中建立完一类文件中每个文件的簇链关系后将该类文件的簇链关系更新到磁盘的FAT表中;
步骤40、采用短文件名格式组织各文件目录项的字段,在内存建立完一类文件的所有目录项后将该类文件的所有目录项一次性写入磁盘中;
步骤50、将保留区中分区剩余簇数修改为0,同时对FAT表中未使用的簇进行填充,完成文件建立。
2.根据权利要求1所述的一种FAT文件***的预分配文件建立方法,其特征在于:所述步骤10中磁盘分区信息包括扇区字节数、每簇扇区数、总扇区数、FAT表个数、保留扇区数和FAT表大小。
3.根据权利要求1所述的一种FAT文件***的预分配文件建立方法,其特征在于:每所述文件目录项占用32个字节。
4.根据权利要求1所述的一种FAT文件***的预分配文件建立方法,其特征在于:所述步骤40进一步包括:
步骤41、采用短文件名格式组织各文件目录项的字段,所述字段包括文件名、本文件的起始簇号、文件生成日期、文件的读写属性和文件长度;
步骤42、根据文件类型在内存中建立同一类文件的所有目录项后,一次性把同一类文件的所有目录项写入磁盘中。
5.一种FAT文件***的预分配文件建立***,其特征在于:包括:
文件***信息获取模块:用于在LINUX***下,以设备文件的形式打开磁盘分区,读取保留区中操作***引导记录区,获取磁盘分区信息;
根目录簇链建立模块:用于根据待建立文件总个数确定根目录所占用的簇数,并根据根目录所占用的簇数在FAT表中建立根目录的簇链关系;
类文件簇链建立模块:用于根据每一类文件中每个文件所占用的簇数,在内存中建立完一类文件中每个文件的簇链关系后将该类文件的簇链关系更新到磁盘的FAT表中;
类文件目录组织和建立模块:用于采用短文件名格式组织各文件目录项的字段,在内存建立完一类文件的所有目录项后将该类文件的所有目录项一次性写入磁盘中;以及
空闲扇区数回写模块:用于将保留区中分区剩余簇数修改为0,同时对FAT表中未使用的簇进行填充,完成文件建立。
6.根据权利要求5所述的一种FAT文件***的预分配文件建立***,其特征在于:所述文件***信息获取模块中磁盘分区信息包括扇区字节数、每簇扇区数、总扇区数、FAT表个数、保留扇区数和FAT表大小。
7.根据权利要求5所述的一种FAT文件***的预分配文件建立***,其特征在于:每所述文件目录项占用32个字节。
8.根据权利要求5所述的一种FAT文件***的预分配文件建立***,其特征在于:所述类文件目录组织和建立模块进一步包括:文件目录项组织模块和文件目录项建立模块;
文件目录项组织模块:用于采用短文件名格式组织各文件目录项的字段;所述字段包括文件名、本文件的起始簇号、文件生成日期、文件的读写属性和文件长度;
文件目录项建立模块:用于根据文件类型在内存中建立同一类文件的所有目录项后,一次性把同一类文件的所有目录项写入磁盘中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510077470.2A CN104657471B (zh) | 2015-02-13 | 2015-02-13 | 一种fat文件***的预分配文件建立方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510077470.2A CN104657471B (zh) | 2015-02-13 | 2015-02-13 | 一种fat文件***的预分配文件建立方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104657471A true CN104657471A (zh) | 2015-05-27 |
CN104657471B CN104657471B (zh) | 2020-05-12 |
Family
ID=53248598
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510077470.2A Active CN104657471B (zh) | 2015-02-13 | 2015-02-13 | 一种fat文件***的预分配文件建立方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104657471B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105912267A (zh) * | 2016-04-05 | 2016-08-31 | 深圳市四季宏胜科技有限公司 | 一种文件分配表处理方法和装置 |
CN111190869A (zh) * | 2019-12-27 | 2020-05-22 | 深圳市恒扬数据股份有限公司 | 文件存储方法及终端 |
CN112800007A (zh) * | 2021-01-28 | 2021-05-14 | 上海华元创信软件有限公司 | 适用于fat32文件***的目录项扩展方法和*** |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1508795A (zh) * | 2002-12-13 | 2004-06-30 | 康佳集团股份有限公司 | 摄录设备硬盘的数据存储方法 |
CN102253985A (zh) * | 2011-06-30 | 2011-11-23 | 深圳市江波龙电子有限公司 | 一种文件***数据的管理方法及*** |
CN102426586A (zh) * | 2011-10-25 | 2012-04-25 | 厦门雅迅网络股份有限公司 | 一种嵌入式***中的fat文件存储方法 |
-
2015
- 2015-02-13 CN CN201510077470.2A patent/CN104657471B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1508795A (zh) * | 2002-12-13 | 2004-06-30 | 康佳集团股份有限公司 | 摄录设备硬盘的数据存储方法 |
CN102253985A (zh) * | 2011-06-30 | 2011-11-23 | 深圳市江波龙电子有限公司 | 一种文件***数据的管理方法及*** |
CN102426586A (zh) * | 2011-10-25 | 2012-04-25 | 厦门雅迅网络股份有限公司 | 一种嵌入式***中的fat文件存储方法 |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105912267A (zh) * | 2016-04-05 | 2016-08-31 | 深圳市四季宏胜科技有限公司 | 一种文件分配表处理方法和装置 |
CN105912267B (zh) * | 2016-04-05 | 2019-01-18 | 深圳市四季宏胜科技有限公司 | 一种文件分配表处理方法和装置 |
CN111190869A (zh) * | 2019-12-27 | 2020-05-22 | 深圳市恒扬数据股份有限公司 | 文件存储方法及终端 |
CN112800007A (zh) * | 2021-01-28 | 2021-05-14 | 上海华元创信软件有限公司 | 适用于fat32文件***的目录项扩展方法和*** |
CN112800007B (zh) * | 2021-01-28 | 2022-06-14 | 上海华元创信软件有限公司 | 适用于fat32文件***的目录项扩展方法和*** |
Also Published As
Publication number | Publication date |
---|---|
CN104657471B (zh) | 2020-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11636032B2 (en) | Memory system, data storage device, user device and data management method thereof | |
US7809779B2 (en) | Method of creating symbolic link capable of being compatible with file system, and method and apparatus for accessing file or directory by using symbolic link | |
US7861311B2 (en) | Apparatus and method of managing hidden area | |
CN102779180B (zh) | 数据存储***的操作处理方法,数据存储*** | |
US8312554B2 (en) | Method of hiding file at data protecting mode for non-volatile memory module, memory controller and portable memory storage apparatus | |
US20120265792A1 (en) | Data storage access device | |
US8707007B2 (en) | Memory storage device, memory controller thereof, and method for automatically creating fill-file thereof | |
US10423339B2 (en) | Logical block address mapping for hard disk drives | |
CN101983376B (zh) | 访问装置、信息记录装置、信息记录***、文件管理方法和程序 | |
CN108628542B (zh) | 一种文件合并方法及控制器 | |
US9389998B2 (en) | Memory formatting method, memory controller, and memory storage apparatus | |
CN101853275A (zh) | 一种fat文件***的数据管理方法和*** | |
CN102253985B (zh) | 一种文件***数据的管理方法及*** | |
CN104657471A (zh) | 一种fat文件***的预分配文件建立方法及*** | |
CN106709014B (zh) | 一种文件***转换方法及装置 | |
JP2012113789A (ja) | ハードディスクドライブ装置およびその処理装置 | |
CN102200946B (zh) | 资料存取方法、记忆体控制器与储存*** | |
KR20090042570A (ko) | 파일 관리 장치 및 방법과 기억 장치 | |
CN101246534B (zh) | 一种使U盘具有autorun病毒免疫功能的方法 | |
KR102094786B1 (ko) | 파일 시스템 및 상기 파일 시스템을 이용한 파일 저장 방법 | |
CN103198102A (zh) | 一种Android设备内置硬盘文件***的转换方法和装置 | |
KR20090119481A (ko) | 파일 시스템의 로그 파일 및 상기 파일 시스템의 오류 복구방법 | |
US8200936B2 (en) | Systems and methods for recording information to a memory card | |
CN104391652A (zh) | 一种硬盘的损耗均衡方法及装置 | |
CN105630692A (zh) | 一种利用mram存储文件目录的文件存储*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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 |