CN108984422B - 一种基于ntfs和fat32文件系统簇管理节省内存的方法 - Google Patents
一种基于ntfs和fat32文件系统簇管理节省内存的方法 Download PDFInfo
- Publication number
- CN108984422B CN108984422B CN201810858044.6A CN201810858044A CN108984422B CN 108984422 B CN108984422 B CN 108984422B CN 201810858044 A CN201810858044 A CN 201810858044A CN 108984422 B CN108984422 B CN 108984422B
- Authority
- CN
- China
- Prior art keywords
- file system
- cluster
- equal
- bitmap
- ntfs
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:包括如下步骤:步骤1,从文件系统中获取到位图总大小,然后将文件系统的位图按照固定大小分块读取到内存中;步骤2,读取成功后,将位图转换成数组,并逐个判断这个数组里面的元素的值;如果是NTFS文件系统则将位图转换成UINT64类型的数组,如果是FAT32文件系统则将位图转换成INT32的数组;步骤3,按照文件系统的类型作相应处理。本发明能够使得文件系统占用内存空间大大缩小,完全克服了采用传统方式直接在内存中创建一个内存位图表示,增大内存使用的开销的缺陷。
Description
技术领域
本发明属于计算机磁盘分区领域,尤其涉及节省NTFS和FAT32文件系统簇管理占用内存的方法。
背景技术
随着计算机磁盘越来越大,文件系统的大小也随之变得更大,甚至有超过2TB的分区,那么此时文件系统的位图也会变得更大,如果使用传统方式直接在内存中创建一个内存位图表示,那么将会增大内存使用的开销,如果在计算机内存不充足时,那么将会导致操作失败甚至程序崩溃。
发明内容
鉴于上述缺陷,本发明提供了一种基于NTFS和FAT32文件系统簇管理节省内存的方法,通过该方法对NTFS和FAT32文件系统簇处理后,占用内存空间大大缩小,完全克服了采用传统方式直接在内存中创建一个内存位图表示,增大内存使用的开销的缺陷。
为解决上述技术问题,本发明所采用的技术方案是:
一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:包括如下步骤:
步骤1,从文件系统中获取到位图总大小,然后将文件系统的位图按照固定大小分块读取到内存中;
步骤2,读取成功后,将位图转换成数组,并逐个判断这个数组里面的元素的值;如果是NTFS文件系统则将位图转换成UINT64类型的数组,如果是FAT32文件系统则将位图转换成INT32的数组;
步骤3,按照文件系统的类型作如下处理:
文件系统为NTFS文件系统时分三种情况:
a、元素的值=(UINT64)-1,则连续的簇数进行累加;
b、元素的值=0,如果此元素之前存在连续的簇,则生成一条记录,如果次元素之前不存在连续的簇,则直接跳过,不作处理;
c、元素的值不等于0,且不等于(UINT64)-1,则对这个元素进行逐位判断并进行记录;
文件系统为FAT32文件系统时分两种情况:
Ⅰ、元素的值不等于0则将计数器加1;
Ⅱ、元素的值等于0,如果此元素之前存在使用的簇,则生成一条记录,如果此元素之前不存在使用的簇,则直接跳过,不作处理。
a中,连续的簇数进行累加的方法具体为:连续的簇数加上这个块的簇数,记着:dwClusCount += BitSize;BitSize指的是该元素所表示的簇数:BitSize = sizeof(UINT64) * 8,表示64个簇。
b中,元素的值=0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于0以确保此元素之前是否存在连续的簇,如果dwClusCount等于0则表示该元素之前也没有连续的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有连续的簇,需要将其记录成一条CLUSINFO记录。
b中,CLUSINFO记录的具体记录方法如下:
ClusInfo.Lcn = 起始簇号;
ClusInfo.Count = dwClusCount; // 连续的簇数
ClusList.push_back(ClusInfo); // 将该条记录存储在向量中
记录完成后dwClusCount清0,起始簇号进行累加。
c中,元素的值不等于0,且不等于(UINT64)-1则表示该元素所表示的64个簇存在不连续性,此时需要对这个元素进行逐位判断并进行记录,具体方法如下:1、将此UINT64类型的元素转换成BYTE类型的数组;2、逐一检查该数组元素的每一位是否为1,如果为1则表示该簇被占用。
c中,具体算法如下:
INT64 ByteOffset = BitIndex / 8; // 定位BitIndex这个簇在数组中位于哪个元素
INT64 BitOffset = BitIndex % 8; // 定位BitIndex这个簇在数组中所在的偏移
BYTE Mask=(BYTE)(1 << BitOffset);
if (!(m_pBuffer[ByteOffset] & Mask)) // m_pBuffer指的是不等于0且不等于-1的(UINT64)这个元素,此时已经被转换成BYTE类型的数组;
{
return FALSE;
}
return TRUE;
如果返回TRUE则表示这位已经被占用,此时需要将dwClusCount加1,如果返回FALSE则表示到这位已经使用的簇已经不再连续,需要将之前连续的簇记录并形成一条记录,然后继续判断该UINT64的每一位,直致64位全部检查完毕,凡是遇到连续的就需要将dwClusCount加1,凡是遇到某位为0的情况就需要判断并形成一条记录。
Ⅱ中,元素的值等于0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于0以确保此元素之前是否存在使用的簇,如果dwClusCount等于0则表示该元素之前也没有使用的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有使用的簇,需要将其记录成一条CLUSINFO记录。
Ⅱ中,具体记录方法如下:
ClusInfo.Lcn = 起始簇号;
ClusInfo.Count = dwClusCount; // 连续的元素个数
ClusList.push_back(ClusInfo); // 将该条记录存储在向量中
记录完成后dwClusCount清0,起始簇号进行累加。
本发明相对于现有技术具有如下优点:
本发明对NTFS和FAT32文件系统进行了处理,将位图中连续簇和起始簇转换成记录,并且跳过没有被使用的簇,将位图转换成了记录,一条记录仅仅需要12个字节大大缩小了内存占用量,相对于传统方式直接在内存中创建一个内存位图表示来讲,大大降低了内存使用的开销,在计算机内存不充足时,也不会会导致操作失败甚至程序崩溃。
附图说明
图1为NTFS文件系统的位图处理流程图;
图2为FAT32文件系统位图处理流程图。
具体实施方式
下面结合实施例对本发明作进一步的描述,所描述的实施例仅仅是本发明一部分实施例,并不是全部的实施例。基于本发明中的实施例,本领域的普通技术人员在没有做出创造性劳动前提下所获得的其他所用实施例,都属于本发明的保护范围。
一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:
a、从文件系统中获取文件系统的位图总大小,将文件系统的位图按固定大小分块读取到内存中;
b、完成a步骤之后,区分文件系统进行处理,文件系统为NTFS按照如下方式进行处理:
将位图转换成UINT64类型的数组,逐个判断这个数组里面的元素;
当元素的值等于(UINT64)-1,对连续的簇数进行累加,记着:dwClusCount +=BitSize;BitSize指的是该元素所表示的簇数:BitSize = sizeof(UINT64) * 8,通常是表示64个簇;
当该元素的值等于0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于0以确保此元素之前是否存在连续的簇,如果dwClusCount等于0则表示该元素之前也没有连续的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有连续的簇,需要将其记录成一条CLUSINFO记录,具体记录方法如下:
ClusInfo.Lcn = 起始簇号;
ClusInfo.Count = dwClusCount; // 连续的簇数
ClusList.push_back(ClusInfo); // 将该条记录存储在向量中
记录完成后dwClusCount清0,起始簇号进行累加;
当元素的值既不等于0又不等于(UINT64)-1则表示该元素所表示的64个簇存在不连续性,那么此时我们需要对这个元素进行逐位判断并进行记录,具体方法如下:1、将此UINT64类型的元素转换成BYTE类型的数组;2、逐一检查该数组元素的每一位是否为1,如果为1则表示该簇被占用,具体算法如下:
INT64 ByteOffset = BitIndex / 8; // 定位BitIndex这个簇在数组中位于哪个元素
INT64 BitOffset = BitIndex % 8; // 定位BitIndex这个簇在数组中所在的偏移
BYTE Mask=(BYTE)(1 << BitOffset);
if (!(m_pBuffer[ByteOffset] & Mask)) // m_pBuffer指的是不等于0且不等于-1的(UINT64)这个元素,此时已经被转换成BYTE类型的数组;
{
return FALSE;
}
return TRUE;
如果返回TRUE则表示这位已经被占用,此时需要将dwClusCount加1,如果返回FALSE则表示到这位已经使用的簇已经不再连续,需要将之前连续的簇记录并形成一条记录,然后继续判断该UINT64类型的元素的每一位,直致64位全部检查完毕,凡是遇到连续的就需要将dwClusCount加1,凡是遇到某位为0的情况就需要判断并形成一条记录;
文件系统为FAT32按照如下方式进行处理:
将位图转换成INT32的数组,并逐个判断这个数组里面的元素;
当该元素的值不等于0则将计数器加1(dwClusCount += 1),以表示该元素中存在已使用的簇;
当元素的值等于0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于0以确保此元素之前是否存在使用的簇,如果dwClusCount等于0则表示该元素之前也没有使用的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有使用的簇,需要将其记录成一条CLUSINFO记录,具体记录方法如下:
ClusInfo.Lcn = 起始簇号;
ClusInfo.Count = dwClusCount; // 连续的元素个数
ClusList.push_back(ClusInfo); // 将该条记录存储在向量中
记录完成后dwClusCount清0,起始簇号进行累加。
新型位图记录法的数据结构定义如下:
typedef struct tagCLUSINFO
{
INT64 Lcn; //起始逻辑簇号
DWORD Count; //连续的簇的数目
}CLUSINFO;
举例说明:
分析一个小于200兆的NTFS空分区,该分区每个簇占有用8个扇区的情况,使用新型存储方式与传统存储方式所占用的内存对比:
如果使用传统位图方式记录NTFS的各个簇的占用情况则需要将该NTFS文件系统占用的55个扇区的位图保存在内存中,需要使用512*55= 28160个字节,而使用新型的记录方式则仅需要5条记录60个字节的内存即可,相比传统方法节省内存开销469倍,5条记录分别是:
[0] {Lcn=0 Count=35 }
[1] {Lcn=44 Count=1537 }
[2] {Lcn=7506 Count=980 }
[3] {Lcn=8530 Count=1 }
[4] {Lcn=8532 Count=65 }
注:以上是举例说明,实际情况可能有所偏差。
Claims (5)
1.一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:包括如下步骤:
步骤1,从文件系统中获取到位图总大小,然后将文件系统的位图按照固定大小分块读取到内存中;
步骤2,读取成功后,将位图转换成数组,并逐个判断这个数组里面的元素的值;如果是NTFS文件系统则将位图转换成UINT64类型的数组,如果是FAT32文件系统则将位图转换成INT32的数组;
步骤3,按照文件系统的类型作如下处理:
文件系统为NTFS文件系统时分三种情况:
a、元素的值=(UINT64)-1,则连续的簇数进行累加;
b、元素的值=0,如果此元素之前存在连续的簇,则生成一条记录,如果此元素之前不存在连续的簇,则直接跳过,不作处理;
c、元素的值不等于0,且不等于(UINT64)-1,则对这个元素进行逐位判断并进行记录;
文件系统为FAT32文件系统时分两种情况:
Ⅰ、元素的值不等于0则将计数器加1;
Ⅱ、元素的值等于0,如果此元素之前存在使用的簇,则生成一条记录,如果此元素之前不存在使用的簇,则直接跳过,不作处理。
2.根据权利要求1所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:a中,连续的簇数进行累加的方法具体为:连续的簇数加上这个块的簇数,记着:dwClusCount += BitSize;BitSize指的是该元素所表示的簇数:BitSize = sizeof(UINT64) * 8,表示64个簇。
3.根据权利要求2所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:b中,元素的值=0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于0以确保此元素之前是否存在连续的簇,如果dwClusCount等于0则表示该元素之前也没有连续的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有连续的簇,需要将其记录成一条记录。
4.根据权利要求1所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:c中,元素的值不等于0,且不等于(UINT64)-1则表示该元素所表示的64个簇存在不连续性,此时需要对这个元素进行逐位判断并进行记录,具体方法如下:1、将此UINT64类型的元素转换成BYTE类型的数组;2、逐一检查该数组元素的每一位是否为1,如果为1则表示该簇被占用。
5.根据权利要求2所述的一种基于NTFS和FAT32文件系统簇管理节省内存的方法,其特征在于:Ⅱ中,元素的值等于0则表示该元素中不包含任何簇,需要先判断dwClusCount是否等于0以确保此元素之前是否存在使用的簇,如果dwClusCount等于0则表示该元素之前也没有使用的簇,则可以直接跳过不作处理,如果dwClusCount不等于0则表示该元素之前有使用的簇,需要将其记录成一条记录。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810858044.6A CN108984422B (zh) | 2018-07-31 | 2018-07-31 | 一种基于ntfs和fat32文件系统簇管理节省内存的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810858044.6A CN108984422B (zh) | 2018-07-31 | 2018-07-31 | 一种基于ntfs和fat32文件系统簇管理节省内存的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108984422A CN108984422A (zh) | 2018-12-11 |
CN108984422B true CN108984422B (zh) | 2023-04-14 |
Family
ID=64550695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810858044.6A Active CN108984422B (zh) | 2018-07-31 | 2018-07-31 | 一种基于ntfs和fat32文件系统簇管理节省内存的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108984422B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111078920B (zh) * | 2019-11-22 | 2021-09-03 | 北京云宽志业网络技术有限公司 | 数据处理方法、装置、设备和计算机可读存储介质 |
CN114168558B (zh) * | 2021-12-06 | 2024-06-11 | 成都傲梅科技有限公司 | 一种通过重构文件记录优化ntfs文件系统速度的方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100597411B1 (ko) * | 2004-08-04 | 2006-07-05 | 삼성전자주식회사 | 파일의 효율적인 데이터 관리를 위한 방법 및 장치 |
US20100030994A1 (en) * | 2008-08-01 | 2010-02-04 | Guzman Luis F | Methods, systems, and computer readable media for memory allocation and deallocation |
US9305115B1 (en) * | 2010-10-04 | 2016-04-05 | Broadcom Corporation | Method and apparatus for reducing power consumption during rule searches in a content search system |
CN104572242A (zh) * | 2013-10-24 | 2015-04-29 | 华为技术有限公司 | 一种扩展虚拟机磁盘空间的方法、装置及虚拟机系统 |
KR101769778B1 (ko) * | 2016-05-04 | 2017-08-21 | 아주대학교산학협력단 | 파일 시스템의 데이터 관리 방법 및 이를 이용하는 컴퓨팅 시스템 |
CN106021000B (zh) * | 2016-06-02 | 2018-06-01 | 北京百度网讯科技有限公司 | 用于机器人操作系统的共享内存管理方法和装置 |
-
2018
- 2018-07-31 CN CN201810858044.6A patent/CN108984422B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108984422A (zh) | 2018-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109164980B (zh) | 一种时序数据的聚合优化处理方法 | |
CN109802684B (zh) | 进行数据压缩的方法和装置 | |
CN111324303B (zh) | Ssd垃圾回收方法、装置、计算机设备及存储介质 | |
CN108984422B (zh) | 一种基于ntfs和fat32文件系统簇管理节省内存的方法 | |
CN111857592A (zh) | 基于对象存储系统的数据存储方法及装置、电子设备 | |
CN115292266A (zh) | 一种基于存储器的高可靠日志存储方法 | |
CN107870739B (zh) | 磁盘文件存储方法和系统 | |
US10585592B2 (en) | Disk area isolation method and device | |
CN111966531B (zh) | 数据快照方法、装置、计算机设备及存储介质 | |
CN112579483B (zh) | 一种叠瓦式磁记录磁盘的数据恢复方法、装置 | |
CN113468124A (zh) | 一种快速全量解析stdf文件的方法和设备 | |
CN109658985B (zh) | 一种基因参考序列的去冗余优化方法及系统 | |
CN113778964A (zh) | 用于储存多个暂存档案的记录装置及暂存档案的管理方法 | |
CN114816322B (zh) | Ssd的外部排序方法、装置和ssd存储器 | |
CN110647498A (zh) | 一种文件存储方法、装置、设备及计算机可读存储介质 | |
CN115865097A (zh) | 一种数据压缩方法、系统、设备及计算机可读存储介质 | |
CN100520728C (zh) | 采用位映像表算法处理存储设备快照的方法 | |
CN113467724B (zh) | 一种crc校验码存储方法、装置、设备及介质 | |
CN112783689B (zh) | 一种基于lrc编码的部分条带写优化方法及装置 | |
CN115509799A (zh) | 一种基于副本和ldpc混合解码结合的存储器读取优化方法 | |
CN113986604A (zh) | 数据存储方法和数据存储装置 | |
CN111880735A (zh) | 一种存储系统中数据迁移方法、装置、设备及存储介质 | |
CN110531937B (zh) | 一种针对主控芯片的数据重组方法 | |
CN116383290B (zh) | 一种数据泛化解析方法 | |
CN116501266B (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 |