CN111143284A - 文件系统动态索引方法及装置 - Google Patents
文件系统动态索引方法及装置 Download PDFInfo
- Publication number
- CN111143284A CN111143284A CN201811302971.6A CN201811302971A CN111143284A CN 111143284 A CN111143284 A CN 111143284A CN 201811302971 A CN201811302971 A CN 201811302971A CN 111143284 A CN111143284 A CN 111143284A
- Authority
- CN
- China
- Prior art keywords
- index
- area
- file
- group
- log
- 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
Images
Classifications
-
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及存储技术领域,提供一种文件系统动态索引方法及装置,所述方法包括:当已创建文件的索引组的使用状态均为已满状态、且索引头区中所有索引组的使用状态均为已满状态时,在索引头区中增加预设长度的第一扩展区,并将第一扩展区中每个索引组的使用状态均设置为空闲状态;按照预设规则从第一扩展区中确定出使用状态为空闲状态的索引组的序号作为第一目标序号;创建与第一目标序号对应的第一目标索引组并对第一目标索引组进行第一格式化,将待创建文件的索引信息存储至第一目标索引组。本发明基于对象存储空间,提供索引区可动态扩展、非块格式的文件系统,根据需求动态增大或缩小索引区,提高文件系统的可扩展性及空间利用率。
Description
技术领域
本发明涉及存储技术领域,具体而言,涉及一种文件系统动态索引方法及装置。
背景技术
目前云存储技术快速发展,诸如CEPH(一种开源分布式存储系统)、hadoop分布式文件系统(Hadoop Distributed File System,HDFS)等存储架构提供了可靠的底层对象存储空间。当前常用的文件系统以索引块为单位进行格式化,格式化后索引块的个数固定,不能根据需求动态增大或缩小,导致扩展性差且空间利用率低,因而不能满足对象云存储的高可扩展性。
发明内容
本发明实施例基于对象存储空间,提供一种索引区可动态扩展、非块格式的文件系统,可以根据需求动态增大或缩小索引区,提高文件系统的可扩展性及空间利用率。
为了实现上述目的,本发明实施例采用的技术方案如下:
第一方面,本发明实施例提供了一种文件系统动态索引方法,应用于对象存储设备,对象存储设备与客户端通信连接,文件系统包括索引区,索引区包括索引头区及包括多个索引组的索引组区,索引头区按照索引组的序号依次存储每个索引组的使用状态,每个索引组的使用状态均包括已满状态和空闲状态,每个索引组包括索引组头及多个索引块,所述方法包括:基于客户端发送的文件创建请求确定出待创建文件所属的父目录中已创建文件的索引组;当已创建文件的索引组的使用状态均为已满状态、且索引头区中所有索引组的使用状态均为已满状态时,在索引头区中增加预设长度的第一扩展区,并将第一扩展区中每个索引组的使用状态均设置为空闲状态;按照预设规则从第一扩展区中确定出使用状态为空闲状态的索引组的序号作为第一目标序号;创建与第一目标序号对应的第一目标索引组并对第一目标索引组进行第一格式化,将待创建文件的索引信息存储至第一目标索引组。
第二方面,本发明实施例还提供了一种文件系统动态索引装置,应用于对象存储设备,对象存储设备与客户端通信连接,文件系统包括索引区,索引区包括索引头区及包括多个索引组的索引组区,索引头区按照索引组的序号依次存储每个索引组的使用状态,每个索引组的使用状态均包括已满状态和空闲状态,每个索引组包括索引组头及多个索引块,所述装置包括第一确定模块、第一增加模块、第二确定模块和创建模块。其中,第一确定模块用于基于客户端发送的文件创建请求确定出待创建文件所属的父目录中已创建文件的索引组;第一增加模块用于当已创建文件的索引组的使用状态均为已满状态、且索引头区中所有索引组的使用状态均为已满状态时,在索引头区中增加预设长度的第一扩展区,并将第一扩展区中每个索引组的使用状态均设置为空闲状态,第二确定模块用于按照预设规则从第一扩展区中确定出使用状态为空闲状态的索引组的序号作为第一目标序号,创建模块用于创建与第一目标序号对应的第一目标索引组并对第一目标索引组进行第一格式化,将待创建文件的索引信息存储至第一目标索引组。
相对现有技术,本发明实施例提供的一种文件系统动态索引方法及装置,首先,客户端发送文件创建请求至对象存储设备;然后,对象存储设备基于该文件创建请求确定出待创建文件所属的父目录中已创建文件的索引组;接下来,当已创建文件的索引组的使用状态均为已满状态、且索引头区中所有索引组的使用状态均为已满状态时,在索引头区中增加预设长度的第一扩展区,并将第一扩展区中每个索引组的使用状态均设置为空闲状态,并按照预设规则从所述第一扩展区中确定出使用状态为空闲状态的索引组的序号作为第一目标序号;最后,创建与第一目标序号对应的第一目标索引组并对所述第一目标索引组进行第一格式化,将待创建文件的索引信息存储至第一目标索引组。与现有技术相比,本发明实施例基于对象存储空间,提供一种索引区可动态扩展、非块格式的文件系统,可以根据需求动态增大或缩小索引区,提高文件系统的可扩展性及空间利用率。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例提供的对象存储设备的方框示意图。
图2示出了本发明实施例提供的索引头区的结构示例图。
图3示出了本发明实施例提供的索引组的结构示例图。
图4示出了本发明实施例提供的日志头区的结构示例图。
图5示出了本发明实施例提供的日志组的结构示例图。
图6示出了本发明实施例提供的文件系统动态索引方法之一流程图。
图7为图6示出的步骤S104的子步骤流程图。
图8示出了本发明实施例提供的文件系统动态索引方法之二流程图。
图9示出了本发明实施例提供的文件写入流程图。
图10示出了示出了图9中步骤S301的获取空闲索引项的示例流程图。
图11示出了本发明实施例提供的更新初始化后的索引项的示例流程图。
图12为图9示出的步骤S304的子步骤流程图。
图13示出了本发明实施例提供的写入文件中的数据的示例流程图。
图14示出了本发明实施例提供的文件删除流程图。
图15为图14示出的步骤S403的子步骤流程图。
图16示出了本发明实施例提供的文件系统动态索引装置。
图标:100-对象存储设备;101-存储器;102-通信接口;103-处理器;104-总线;200-文件系统动态索引装置;201-第一确定模块;202-第一增加模块;203-第二确定模块;204-创建模块;205-第三确定模块;206-第四确定模块;207-第二增加模块;208-第一获取模块;209-初始化模块;210-第五确定模块;211-第一写入模块;212-第二写入模块;213-第六确定模块;214-第三写入模块;215-更新模块;216-第二获取模块;217-第四写入模块;218-删除模块。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
请参照图1,图1示出了本发明实施例提供的对象存储设备100的方框示意图。对象存储设备100可以是,但不限于,主机、虚拟机、实体服务器、实体服务器上的虚拟机等能提供与所述服务器或者虚拟机有相同功能的实体或者虚拟的服务端。对象存储设备100的操作系统可以是,但不限于,Windows系统、Linux系统等。所述对象存储设备100包括存储器101、通信接口102、处理器103和总线104,所述存储器101、通信接口102和处理器103通过总线104连接,处理器103用于执行存储器101中存储的可执行模块,例如计算机程序。
其中,存储器101可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口102(可以是有线或者无线)实现该对象存储设备100与至少一个其他对象存储设备100、以及外部存储设备之间的通信连接。
总线104可以是ISA总线、PCI总线或EISA总线等。图1中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
其中,存储器101用于存储程序,例如图16所示的文件系统动态索引装置200。该文件系统动态索引装置200包括至少一个可以软件或固件(firmware)的形式存储于所述存储器101中或固化在所述对象存储设备100的操作系统(operating system,OS)中的软件功能模块。所述处理器103在接收到执行指令后,执行所述程序以实现本发明上述实施例揭示的文件系统动态索引方法。
为了便于描述本发明实施例中的文件系统动态索引方法,首先对该文件系统的组织结构做总体描述,后续的本发明实施例均是基于该文件系统的组织结构的。
在本发明实施例中,文件系统分为两部分:索引区和日志区,其中,索引区主要用于存储文件或者目录的索引信息,日志区主要用于保证索引区中数据更新的一致性,索引区和日志区的长度的基本单位均为block,block的大小可在文件系统格式化时配置,但不能小于2KB、且必须是2的整幂次数。因此,索引区和日志区是以block为单位增加的,也可以动态减少,block的大小可以根据配置文件配置,实现文件系统的灵活配置。索引区和日志区均不直接对实际存放文件数据的数据区进行管理,即索引区和日志区与数据区相互独立,一方面使得索引区和日志区与数据区可以采用不同的冗余策略或者使用不同的存储介质,提高了文件系统的灵活性,另一方面降低了文件系统的扩容、缩容的操作开销。
索引区包括索引头区和索引组区,其中,索引头区中主要存储索引资源的总体信息以及索引组长度和使用情况等信息,索引组区中主要存储具体的文件索引或目录索引信息。
索引头区包括索引头和索引组状态区,索引头中存储了2份索引资源的总体信息,分别是当前最新的索引资源的总体信息和上一次索引资源的总体信息,其目的是为了使得非原子操作导致的索引区数据不一致后能够恢复到之前有效状态,索引头中存储的信息包括:checksum校验值、魔术签名、版本号、特征码、数据区总容量、数据区剩余容量、索引区总容量、索引区剩余容量、索引组状态区中block的个数、最后一次创建的文件id、最后一次创建的目录id、更新次数times、配置信息,其中,特征码用于唯一标识一个文件系统;更新次数times每次更新都会加1,其初始化值为1。索引组状态区中每4个bit表征一个索引组的状态信息,从低字节到高字节分别为已用状态(bit位为0代表空闲状态、为1代表已用状态)、已满状态(bit位为0代表未满状态、为1代表已满状态)、类型(占2个bit位,当2个bit位为01时,代表该索引组的类型为文件,为10时,代表该索引组的类型为目录);索引组状态区的初始长度为1个block。
请参照图2,图2示出了索引头区的结构示例图。索引头区中的索引组状态区按照索引组的序号依次存储每个索引组的使用状态,图中第1-4个bit位1001代表1号索引组的状态信息,第1个bit位为1,代表1号索引组的状态为已用状态,第2个bit位为0代表1号索引组的状态为未满状态,第3、4个bit位为01,代表1号索引组的类型为文件,图中第5-8个bit位1110代表2号索引组的状态信息,第1个bit位为1,代表2号索引组的状态为已用状态,第2个bit位为1代表2号索引组的状态为已满状态,第3、4个bit位为10,代表2号索引组的类型为目录。
索引组区包括索引组头和索引块区。索引组头中存储有索引组类型(表征索引组是文件索引组或者是目录索引组)、索引组ID(即表征索引组的状态信息的4个bit位在索引组状态区中的序号)、父目录ID(只对文件索引组有效,一个文件索引组只能属于一个目录)、索引块个数、索引块状态位图,其中,索引块状态位图中每2个bit位表征一个索引块的使用状态,从低字节到高字节分别为是否为已用状态(bit位为0代表空闲状态、为1代表已用状态)、是否为写满状态(bit位为0代表未满状态、为1代表已满状态)。索引块区可以以block为单位动态增加,索引块区包括多个索引块,每个索引块包括索引块头和索引项区,索引块头中存储有索引项个数、有效索引项个数、索引项状态位图和补齐字节,其中,索引项状态位图的长度16个字节,从低字节到高字节,每个bit位标识对应序号的索引项的使用状态(bit位为0代表空闲状态、为1代表已用状态)。索引项区包括多个索引项,目录索引组中索引块中的索引项均为目录索引项,文件索引组中索引块中的索引项均为文件索引项,文件索引项和目录索引项中存储的信息是不相同的,文件索引项中存储文件名称、文件创建时间、文件最后更新时间、文件大小、文件ID、父目录ID、文件锁定次数、文件所占用的存储对象索引标识;目录索引项中存储目录名称、目录ID、父目录ID、目录层次、创建时间、最后修改时间、目录大小、访问权限、锁定次数、目录更新次数times、文件索引组ID列表。目录索引项的长度可动态配置,目的是根据实际需求使得一个目录下支撑的文件个数是可以动态配置的。
请参照图3,图3示出了索引组的结构示例图。图3中,索引组头表明了该索引组的类型为目录,其中,在具体实现时,索引组的类型可以、但不限于用一个或者多个bit位表示的,例如,索引组的类型用一个bit位表示,当该bit位为0时,表示对应索引组的类型为文件,当该bit位为1时,表示对应索引组的类型为目录,又例如,索引组的类型用两个bit为表示,当这两个bit位为01时,表示对应索引组的类型为文件,当这两个bit位为10时,表示对应索引组的类型为目录,其后的bit位为1,代表该索引组是索引头的索引状态区中第1个索引组,若索引组的ID从0开始,索引头的索引状态区中的第5-8个bit位代表的是该索引组的状态,其后依次存储父目录ID、索引块个数、索引块状态位图等其他信息,索引块状态位图与前述索引组状态区中索引组的状态表示类似,具体不再赘述。图3中,索引块ID从0开始,ID为0的索引块包括索引块头和N个索引项,ID为1的索引块包括索引块头和N个索引项,其中,索引块头中存储有索引项状态位图,索引项状态位图与索引块状态位图表示类似,具体不再赘述。
日志区包括日志头区和日志组区,日志头区主要存储日志的整体信息、索引操作相关的日志信息及日志组的状态位图信息等。日志组区主要存储数据操作日志信息。
日志头区包括日志头、common日志区及node区,其中,日志头和common日志区的长度是固定的,node区的长度可以动态增加或者减少。日志头存储有2份日志头信息,日志头信息包括checksum、node区的长度(单位为block)、最后一次的操作日志ID、times、补齐字段。保存2份日志头信息可以使非原子操作导致数据不一致后能够恢复至之前的有效状态,checksum的作用是判断对日志头的操作是否是原子操作,从而判断该操作的有效性。common日志区保持着索引操作的相关日志,包括checksum、操作类型、有效位图、索引头信息、文件索引信息、目录索引信息、node使能信息、索引组头信息,其中,有效位图依次标识索引头信息、文件索引信息、目录索引信息、node使能信息、索引组头信息是否有效(bit位为0代表对应的信息有效、为1代表对应的信息无效),为了保证索引区修改的一致性,同一个时刻只允许对索引区进行一次操作的修改,比如说,不能同一个时刻同时修改两个不同目录对应的索引区,因此,common日志区中只存储一次索引区修改操作对应的日志信息,例如,有效位图的第一个bit位为1,代表对应的索引头信息是有效的,且索引头信息是本次对索引区的操作后更新后的最新信息。node区存储日志组的状态位图,其表示方法与索引项状态位图、索引块状态位图类似,具体不再赘述。
请参照图4,图4示出了日志头区的结构示例图。需要说明的是,图4只示出了日志头区存储的主要信息,其他信息如补齐字段、另一份日志头信息在图4中并未标识出,但不代表没有这些信息。图4示出了日志头存储的checksum、node区长度(即前文所述node区的长度)、最后操作日志ID(即前文所述最后一次的操作日志ID)、times,common日志区存储的checksum、操作类型、有效位图、索引头信息、文件索引信息、目录索引信息、node使能信息、索引组头信息,其中,有效位图为10111,第1个bit位为1,代表索引头信息有效,第2个bit位为0,代表文件索引信息无效,第3个bit位为1,代表目标索引信息有效,第4个bit位为1,代表node使能信息有效,第5个bit位为1,代表索引组头信息有效,即当前日志对应的索引操作对索引头信息、目录索引信息、node使能信息、索引组头信息进行了更新,common区中对应的字段存储了更新后的信息。node区第1个bit位为1,代表第1个日志组的状态为已用状态,第2个bit位为0,代表第1个日志组的状态为未满状态,第3个bit位为1,代表第2个日志组的状态为已用状态,第4个bit位为1,代表第2个日志组的状态为已满状态。
日志组包括日志组头和多个日志项,日志组的长度以block为单位动态增加。日志组头存储2份日志组头信息,日志组头信息包括checksum、日志项总数、日志项使用个数、日志项位图、times,其中,日志项位图中每2个bit位标识一个日志项的使用状态,从低字节到高字节分别为是否为已用状态(bit位为0代表空闲状态、为1代表已用状态)、是否为写满状态(bit位为0代表未满状态、为1代表已满状态),每个日志项包括操作日志位图和多个操作日志区,其中,日志位图中的每个bit位标识一个数据操作日志区的使用状态(bit位为0代表空闲状态、为1代表已用状态),每个数据操作日志区存储2份数据操作日志,后一份数据操作日志是前一份数据操作日志的反码,数据操作日志包括父日志ID、数据操作类型、文件索引ID,存储文件数据的存储对象的ID列表,其中,当父日志ID为非0时,该数据操作日志为数据删除时的第二级日志。
请参照图5,图5示出了日志组的结构示例图。需要说明的是,图5只示出了日志组中存储的主要信息,其他信息如另一份日志组头信息在图5中并未标识出,但不代表没有这些信息。图5中示出了日志组头存储的checksum、日志项总数、日志项使用个数、日志项位图、times,其中,日志项位图第1个bit位为1,代表第1个日志项的使用状态为已用状态,第2个bit位为0,代表第1个日志项的使用状态为未满状态,第3个bit位为0,代表第2个日志项的使用状态为未用状态,第2个bit位为0,代表第2个日志项的使用状态为未满状态。图5中只示出了第1个日志项的结构,该日志项包括操作日志位图和N个数据操作日志区,其中,操作日志位图中的第1个bit位为1,代表存储数据操作日志1的第1个数据操作日志区的使用状态为已用状态,且第1个数据操作日志区中存储了2份数据操作日志1的信息,后一份是前一份的反码,第2个bit位为0,代表第2个数据操作日志区的使用状态为未用状态。
需要说明的是,前文只描述了索引区和日志区中存储的主要信息、图2-图5也只是示例出索引区和日志区中相关的主要结构,并不代表索引区和日志区就只存储文中提及的信息,也不代表索引区和日志区就完全如图2-图5所示的结构,在实际应用中,除了文中提及的信息和图2-图5所示的结构之外,还可以包括与具体的实施方式相关的其他信息,例如,为了使每个区可以按照预设的字节数对齐而增加的补齐字段,为了便于实现增加的其他标识性的字段等等。
作为一种实施方式,文件系统在格式化时可以配置的结构相关参数如下表所示:
为了方便寻址,索引区中索引头和索引组及日志区中日志头和日志组按照存储对象大小进行划分为多个存储对象,对象名按照预设的格式进行命名,其中,对象名中包括对象编号即对象ID,以索引头为例,存储索引头的存储对象的对象名中对象ID的计算方法为:ID=x/objSize,其中,x为数据在索引头中的相对位置,objSize为存储对象的大小,数据在存储对象中的相对位置=x%objSize,例如,block的大小为64KB,objSize为3个block大小即64KB*3=192KB,索引区的大小为300KB,则索引区可以划分为2个存储对象,其中,由于(192KB-1)/192KB=0,因此,索引区中区域[0,192KB-1]对应的ID为0,由于(10KB)%(192KB)=10,索引区第10KB位置开始、长度为50KB的数据存储在ID为0的对象中的50KB的位置。
作为一种实施方式,索引头、索引组、日志头、日志组的对象名的格式生成规则可以如下表所示:
名称 | 存储对象名字的格式 |
索引头 | <i>prefix</i><b>-idxhead-</b><i>id</i> |
索引组 | <i>prefix</i><b>-idxgroup-</b><i>groupid</i><i>id</i> |
日志头 | <i>prefix</i><b>-loghead-</b><i>id</i> |
日志组 | <i>prefix</i><b>-loggroup-</b><i>groupid</i><i>id</i> |
其中,prefix为文件系统的特征码,-idxhead-、-idxgroup-、-loghead-、-loggroup-为预设的静态字符串,id为按照上述规则计算得到的对象ID,groupid为索引组的状态在索引头区中的序号或者日志组的状态在日志组头区node区中的序号。通过这种命名格式,使得对象名和文件系统相关结构绑定,即使文件系统损坏也可以部分修复。
第一实施例
请参照图6,图6示出了本发明实施例提供的文件系统动态索引方法之一流程图。处理方法包括以下步骤:
步骤S101,基于客户端发送的文件创建请求确定出待创建文件所属的父目录中已创建文件的索引组。
在本发明实施例中,文件创建请求中包括待创建文件所属的父目录的目录ID,目录ID是由该目录所属的索引组ID、该目录所属的索引块在索引块区中的位置、该目录所属的索引项在对应索引块中索引项区的位置,通过待创建文件所属的父目录的目录ID可以确定该父目录所属的索引组、该索引组中的索引块及该索引块中的索引项。
在本发明实施例中,创建文件时,首先要找到一个空闲的索引项用于存储待创建的文件的索引信息,寻找空闲的索引项的过程可以是:由于待创建的文件的父目录的目录索引项中存储有该父目录下已创建文件的文件索引组ID列表,首先从文件索引组ID列表中找到使用状态为未满状态或空闲状态的文件索引组,从该使用状态为未满状态或空闲的文件索引组中找到使用状态为空闲的索引项。当文件索引组ID列表中的索引组的使用状态均为已满状态、且索引头区中所有索引组的使用状态均为已满状态时,需要先对索引区进行动态扩展,然后从扩展后的索引区找到使用状态为空闲的索引项,步骤S102-步骤S104即为索引区动态扩展的过程。
步骤S102,当已创建文件的索引组的使用状态均为已满状态、且索引头区中所有索引组的使用状态均为已满状态时,在索引头区中增加预设长度的第一扩展区,并将第一扩展区中每个索引组的使用状态均设置为空闲状态。
在本发明实施例中,已创建文件的索引组的使用状态均为已满状态,表明已创建文件的索引组中没有使用状态为空闲的索引项,索引头区中所有索引组的使用状态均为已满状态,表明当前索引区中的索引组中没有使用状态为空闲状态的索引项,此时,需要首先对索引头区进行扩展,在索引头区中增加预设长度的第一扩展区,其中,预设长度可以为一个block。作为一种实施方式,第一扩展区中每4个bit表征一个索引组的状态信息,且对应的索引组ID在原有最大的索引组ID上递增,例如,原有最大的索引组ID为12345,第一扩展区中第1-4个bit位表征的是索引ID为12346的索引组的状态信息。
步骤S103,按照预设规则从第一扩展区中确定出使用状态为空闲状态的索引组的序号作为第一目标序号。
在本发明实施例中,由于第一扩展区中所有的索引组的使用状态均为空闲状态,预设规则可以是从第一扩展区中第1个索引组开始的第1个使用状态为空闲状态的索引组,索引组的序号可以是原索引ID的最大值+1。
步骤S104,创建与第一目标序号对应的第一目标索引组并对第一目标索引组进行第一格式化,将待创建文件的索引信息存储至第一目标索引组。
在本发明实施例中,由于当前所有的索引组均为已满状态,因此,需要首先创建一个新的索引组,然后对该新的索引组进行第一格式化,最后将待创建文件的索引信息存储至第一格式化后的目标索引组。
请参照图7,步骤S104还可以包括以下子步骤:
子步骤S1041,将第一目标索引组划分为索引组头及包括多个索引块的索引块区,并将索引组头中、按照索引块的序号依次存储的每个索引块的使用状态设置为空闲状态。
在本发明实施例中,索引组头中包括该索引组中所有索引块的使用状态,每个索引块的使用状态在第一格式化的时候设置为空闲状态。
子步骤S1042,将每个索引块划分为索引块头及包括多个索引项的索引项区,并将索引块头中、按照索引项的序号依次存储的每个索引项的使用状态设置为空闲状态。
在本发明实施例中,索引块头中包括该索引块中所有索引项的使用状态,每个索引项的使用状态在第一格式化的时候设置为空闲状态。
需要说明的是,在进行第一格式化时,除了将第一扩展区中索引组的使用状态、索引组中索引块的使用状态、索引块中索引项的使用状态设置为空闲状态之外,还需要更新索引区中相关信息,例如,索引区总容量、索引组状态区中block的个数等信息。
在本发明实施例中,第一格式化后的目标索引组中存在空闲状态的索引项,由于目标索引组中存在多个空闲状态的索引块,每个索引块中存在多个空闲状态的索引项,为了存储待创建文件的索引信息,首先要从多个空闲状态的索引项中确定出一个目标索引项,因此,子步骤S1043-子步骤S1045即为确定目标索引项的过程。
子步骤S1043,按照预设规则将第一目标索引组的索引组头中空闲状态的索引块确定为第一目标索引块。
在本发明实施例中,预设规则可以是步骤S103中所述的预设规则,即从索引组头中第1个索引块开始的第1个使用状态为空闲状态的索引块,该索引块的在该索引组中的序号即为第二目标序号。
子步骤S1044,将第一目标索引块中空闲状态的索引项确定为第一目标索引项。
在本发明实施例中,第一目标索引项与第一目标索引块的确定方式可以相同。
子步骤S1045,将待创建文件的索引信息存储至第一目标索引项,并将第一目标索引块头中第一目标索引项的使用状态设置为已用状态、将第一目标索引组的索引组头中第一目标索引块的使用状态设置为已用状态、以及将索引头中第一目标索引组的使用状态设置为已用状态。
在本发明实施例中,第三目标序号对应的索引项为目标索引项,将待创建文件的索引信息存储至目标索引项,并将该目标索引项的使用状态、该目标索引项对应的目标索引块的使用状态及该目标索引块对应的目标索引组的使用状态均设置为已用状态。
需要说明的是,将待创建文件的索引信息存储至与第三目标序号对应的目标索引项,除了更新相关的使用状态,还需要适应性地更新索引区中的相关信息,例如,索引区剩余容量、该待创建文件的父目录的目录索引项中相关信息等。
在本发明实施例中,当已创建文件的索引组中存在未满状态的索引组时,不需要对索引头区进行扩展,可以从未满状态的索引组中找到空闲索引项,因此,本发明实施还包括步骤S201-步骤S203。
请参照图8,图8示出了本发明实施例提供的文件系统动态索引方法之二流程图。处理方法包括以下步骤:
步骤S201,当已创建文件的索引组中存在未满状态的索引组时,从未满状态的索引组中确定出第二目标索引组,其中,未满状态包括已用状态和空闲状态。
在本发明实施例中,未满状态的可用索引组包括两种情况:(1)索引组的使用状态为空闲状态;(2)索引组的使用状态为已用状态且非已满状态。已创建文件的索引组可以是多个,当有多个已创建的索引组时,将找到的第一个未满状态的索引组确定为可用索引组。未满状态的可用索引块包括两种情况:(1)索引块的使用状态为空闲状态;(2)索引块的使用状态为已用状态且非已满状态。
步骤S202,当第二目标索引块中存在未满状态的第二目标索引块时,从第二目标索引块中确定出空闲状态的第二目标索引项,并将待创建文件的索引信息存储至第二目标索引项。
步骤S203,当第二目标索引组中不存在未满状态的第二目标索引块时,在第二目标索引组中增加预设长度的第二扩展区,并将待创建文件的索引信息存储至第二格式化后的第二扩展区。
在本发明实施例中,可用索引组未满,但是又不存在空闲状态或者非已满状态的索引块可以是索引组进行过动态减小,索引组的一部分区域被释放了,也可以是索引组当前的区域已经用完,此时需要对索引组进行动态扩展。
作为一种实施方式,在未满状态的索引组中增加预设长度的第二扩展区,并对第二扩展区进行第二格式化的方法可以是:
将第二扩展区划分为多个索引块,并将每个所述索引块划分为索引块头及包括多个索引项的索引项区,并将所述索引块头中按照所述索引项的序号依次存储的每个索引项的使用状态设置为空闲状态。
在本发明实施例中,第二格式化与第一格式化的方法类似,此处不再赘述。
在本发明实施例中,文件系统提供的功能还包括写入文件、删除文件等,为了保证创建文件、写文件、删除文件等对文件修改操作中数据的一致性,本发明实施例还包括日志区,任何涉及对文件索引或者文件数据的修改操作,都先将该修改操作记录至日志区,然后在进行相应的修改操作,目的是在修改的过程中设备出现异常导致修改过程异常中断,在设备恢复至正常后,可以根据日志区中记录的修改操作将索引区和数据区恢复到数据一致的正常状态。因此,本发明实施例以步骤S301-步骤S305的文件写入流程及步骤S401-步骤S406的文件删除流程为例,描述索引操作和数据操作的分离的实现流程及先写日志再进行更新操作的处理流程。
请参照图9,图9示出了本发明实施例提供的文件写入流程图。
步骤S301,基于客户端发送的写入文件的写入请求,从索引区获取待写入文件的索引信息。
在本发明实施例中,从索引区获取待写入文件的索引信息的过程实际上是从索引区获取空闲索引项的过程,根据空闲索引项在索引块中的序号、索引块在索引组中的序号及索引组的ID,可以生成待写入文件的文件ID。获取空闲索引项的过程对在步骤S102-步骤S104及步骤S201-步骤S203中已有详细说明。
需要指出的是,在获取空闲索引项的过程中如果涉及到索引头区或者索引组的扩展,索引头区或者索引组的扩展操作会更新索引区,这种情况下更新索引区是先将更新索引区的操作记录至日志区,然后再进行更新索引区的操作。
请参照图10,图10示出了步骤S301的获取空闲索引项的示例流程图。
步骤S302,初始化待写入文件的索引信息并将初始化后的索引信息写入至日志头区后更新至索引区。
在本发明实施例中,得到空闲索引项后,在将待写入文件的索引信息存储至空闲索引项之前,首先,初始化待写入文件的索引项中的各项信息,由于此时还未真正写入数据,故将索引项中文件的大小初始化为0;然后,将初始化后的文件的索引信息写入日志区中日志头区中的common区,同时,判断文件索引信息写入后,对应的索引块是否已满,是否需要修改索引块头中对应的索引块的使用状态为已满状态,如果索引块已满,还需要继续判断对应的索引组是否已满,是否需要修改索引头区中对应的索引组的使用状态为已满状态,需要更新的相关信息还包括索引区剩余容量等信息,因此,需要在common区记录需要更新的索引头信息、文件索引信息、目录索引信息、node使能信息、索引组头信息及对应的有效位图。
请参照图11,图11示出了更新初始化后的索引项的示例流程图。
需要说明的是,在整个更新初始化后的索引项的过程没有被异常终止的情况下,索引区更新成功后,会将本次操作在common区记录的日志设置为无效,表征本次索引区更新成功,且索引区中更新后的数据是一致的。
步骤S303,依据待写入文件的大小确定存储待写入文件的待写入数据的数据对象的ID列表、并生成写入操作数据日志。
在本发明实施例中,根据待写入文件的大小及数据对象的大小计算并分配存储待写入文件的数据需要的数据对象,其对象名的格式可以为:
<i>perfix</i><b>data</b><i>fileid</i><i>idx</i>
其中,perfix为预设的对象名的前缀,可以是文件系统的标识,data是预设的静态字符串,fileid为根据文件索引信息生成的文件ID,idx为数据对象的ID,即数据对象的编号。
首先,将待写入文件按照objmax的大小按顺序分隔,生成数据对象列表并将该数据对象列表保存在内存中,先对数据对象进行预写入操作,判断数据对象是否可用,如果不可用,序号异常向后增大,最终获取可用的数据对象列表。数据对象列表中的idx的最大值受文件索引项中的数据对象索引标识位限制,其每一位唯一标识一个数据对象是否被使用,该标识的位数即idx的最大值-1。
步骤S304,将写入操作数据日志写入至日志组后,再依次将待写入数据写入至数据对象的ID列表对应的数据对象。
在本发明实施例中,由于日志组可以有多个,每个日志组中的日志项也可以有多个,每个日志项中的数据操作日志区也可以有多个,因此,在写入操作日志之前,首先获取使用状态空闲的操作日志区,然后将写入操作日志写入空闲的操作日志区,最后再将待写入数据写入至数据对象中。
请参照图12,步骤S304还包括以下子步骤:
子步骤S3041,获取空闲状态的目标数据操作区。
作为一种实施方式,获取空闲状态的目标数据操作区的方法可以是:
首先,当日志头区存在未满状态的日志组的第二目标序号时,将与第二目标序号对应的日志组确定为目标日志组,其中,未满状态包括空闲状态和已用状态;
其次,将目标日志组中未满状态的日志项作为目标日志项;
在本发明实施例中,未满状态包括空闲状态和已用状态。
最后,将目标日志项中空闲状态的数据操作区确定为目标数据操作区。
在本发明实施例中,获取空闲状态的目标数据操作区的方法与前文所述的获取空闲状态的索引项的方法类似。
子步骤S3042,依据待写入文件的索引信息生成待写入文件的ID。
在本发明实施例中,待写入文件的索引信息包括:待写入文件的索引项在所属的索引块中的序号、该索引块在所属的索引组中的序号及索引组的使用状态信息在索引头区中的序号。
子步骤S3043,将写入数据操作日志写入目标数据操作区,其中,写入数据操作日志包括数据操作日志类型、待写入文件的ID及数据对象的ID列表。
在本发明实施例中,将写入数据操作日志写入目标数据操作区后,再将待写入文件中的数据按照数据对象的ID列表依次写入至对应的数据对象。如果写入过程没有被异常终止的情况下,所有数据均成功写入数据对象的ID列表中对应的数据对象中后,会将本次数据写入操作在目标数据操作区记录的日志设置为无效,即将该目标数据操作区的使用状态设置为空闲状态,表征本次待写入文件中的数据写入更新成功。
请参照图13,图13示出了写入文件中的数据的示例流程图。
步骤S305,将待写入文件的大小及待写入数据的数据对象的ID列表写入至日志头区后再更新至索引区。
在本发明实施例中,按照索引区的先写日志再更新索引的更新原则,首先,将待写入文件的大小及待写入数据的数据对象的ID列表写入日志头区中的common区,然后,再将待写入文件的大小及待写入数据的数据对象的ID列表更新至索引区。
作为一种实施方式,将待写入文件的大小及待写入数据的数据对象的ID列表更新至索引区的实现方法可以是:
首先,获取待写入文件的父目录的ID及待写入文件的文件索引组ID。
在本发明实施例中,待写入文件的父目录的ID可以从写入文件的写入请求中获取,待写入文件的文件索引组ID即是在步骤S301中获取到的空闲的索引组的索引组ID。
其次,将待写入文件的父目录的ID、待写入文件的大小及待写入数据的数据对象的ID列表更新至待写入文件的文件索引组。
在本发明实施例中,索引组包括文件索引组和目录索引组,写入文件时,待写入文件的索引信息存储在文件索引组中,该文件索引组在步骤S401中已经获取到。
第三,依据待写入文件的父目录的ID得到与父目录的ID对应的目录索引组,并将待写入文件的文件索引组ID更新至父目录的ID对应的目录索引组。
在本发明实施例中,父目录的ID中包括了对应的目录索引组的ID,根据该目录索引组的ID得到目录索引组,然后将待写入文件的文件索引组ID更新至该目录索引组,待写入文件的父目录的目录索引组中需要更新的信息可以是:父目录的大小、父目录的最后修改时间等。当保存待写入文件的索引信息的文件索引组是本次写入文件操作新创建的,还需要将该文件索引组的ID更新至待写入文件的父目录的目录索引组。
最后,依据待写入文件的大小更新索引头中的数据区总容量、数据区剩余容量、索引区总容量及索引区剩余容量。
在本发明实施例中,文件删除时索引区的删除和文件中数据的删除是分离的,收到客户端发送的文件删除请求后,首先删除索引区,然后返回客户端文件删除成功,数据的删除在独立的线程中进行,因此,本发明实施例还包括步骤S401-步骤S406。
请参照图14,图14示出了本发明实施例提供的文件删除流程图。
步骤S401,基于客户端发送的文件删除请求确定出待删除文件的索引项。
在本发明实施例中,文件删除请求中包括待删除文件的文件ID,文件ID是由该文件所属的索引组ID、该文件所属的索引块在索引块区中的位置、该文件所属的索引项在对应索引块中索引项区的位置,通过待删除文件的文件ID可以确定该文件所属的索引组、该索引组中的索引块及该索引块中的索引项。
步骤S402,将待删除文件的索引项中待删除文件的数据对象的列表作为第一数据操作日志写入至日志组区,其中,第一数据操作日志的类型为数据删除。
在本发明实施例中,第一数据操作日志主要包括待删除文件的数据对象列表及数据操作日志的类型,写入第一数据操作日志时,首先找到使用状态空闲的数据操作日志区,然后将第一数据操作日志写入对应的数据操作日志区,当第一数据操作日志写入成功后,将对应的数据操作日志区的状态更新为空闲状态,以及时释放日志区的资源。
步骤S403,将待删除文件的索引项的使用状态设置为空闲状态并更新对应的索引块头、索引组头及索引头后返回客户端。
在本发明实施例中,删除文件时首先将存储待删除文件的索引信息的索引项的使用状态置空闲状态,然后更新对应的索引块头中有效索引项的个数,依据更新后的索引项的使用状态更新对应的索引块的使用状态,依据更新后的索引块的使用状态更新索引头区中索引组的状态,同时判断索引组是否满足动态缩小的条件,若满足就对索引组进行动态缩小,依据更新后的索引组的使用状态判断索引头区是否满足动态缩小的条件,若满足就对索引头区进行动态缩小。
当文件或者目录被删除时,该待删除的文件或者目录对应的索引项的使用状态被设置为空闲状态,当同一个存储对象上的索引信息均不再使用时,可以将该存储对象删除,此时,索引区就实现了动态减小,因此,本发明实施例还包括步骤S4031-步骤S4035。
请参照图15,步骤S403还包括以下子步骤:
子步骤S4031,将待删除文件的目标索引项对应的目标索引块的索引块头中、待删除文件的目标索引项的使用状态更新至空闲状态。
子步骤S4032,当待删除文件的目标索引块的索引块头中所有索引项的使用状态均为空闲状态时,将待删除文件的目标索引块对应的目标索引组的索引组头中、待删除文件的目标索引块的使用状态更新至空闲状态。
子步骤S4033,当处于同一个第一对象上的索引块的使用状态均更新为空闲状态时,删除第一对象。
在本发明实施例中,第一对象是向底层对象云存储申请的、用于存储索引块的存储对象,第一对象存储多个索引块,当第一对象存储的多个索引块的使用状态均更新为空闲状态时,即多个索引块均不再使用时,可以将该第一对象删除,由此,实现了索引组区的动态减小。
子步骤S4034,当待删除文件的目标索引组的索引组头区中所有索引块的使用状态均为空闲状态时,将待删除文件的目标索引组的索引头区中、与待删除文件的目标索引组对应的使用状态更新至空闲状态。
子步骤S4035,当索引头区中同一个第二对象上的索引组的使用状态均更新为空闲状态时,删除所述第二对象。
在本发明实施例中,第二对象是向底层对象云存储申请的、用于存储索引组的使用状态的存储对象,第二对象存储多个索引组的使用状态,当第二对象存储的多个索引组的使用状态均更新为空闲状态时,即多个索引组的使用状态均不再使用时,可以将该第二对象删除,由此,实现了索引头区的动态减小。
需要说明的是,在本发明实施例中,除了将索引组的使用状态、索引组中索引块的使用状态、索引块中索引项的使用状态更新为空闲状态之外,还需要更新索引区中相关信息,例如,索引区总容量、索引组状态区中block的个数等信息。
在本发明实施例中,删除待删除文件中的数据可以由独立的线程完成,因此,本发明实施例还包括步骤S404-步骤S406。
步骤S404,从数据对象ID列表中获取当前待删除的数据对象的ID。
在本发明实施例中,数据对象的删除是逐个进行的,可以依次从数据对象列表中取出对应的数据对象的ID,并对该数据对象存储的数据进行删除。
步骤S405,将当前待删除的数据对象的ID作为第二数据操作日志写入至日志组区。
在本发明实施例中,第二数据操作日志主要包括当前待删除的数据对象的ID,由于本发明实施例中删除文件存储的数据采用的日志方式是记录两级日志的方式,首先,将数据对象ID列表记录至第一级日志中,其次,将当前正在删除的数据对象的ID记录至第二级日志中,当当前删除的数据对象中的数据删除完毕后将该第二级日志置无效,同时将当前删除的数据对象ID从第一级日志中删除。
步骤S406,删除当前待删除的数据对象后将待删除的数据对象的ID从第一数据操作日志中删除。
在本发明实施例中,除了文件的创建、删除、写入之外,文件系统还可以提供文件改名、目录的创建、删除、改名、移动、文件系统格式化、加载、扩容、修复等功能,其中,文件或者目录的改名主要更新对应的文件索引项或者目录索引项中的名称;目录的创建与文件的创建类似;目录的删除与文件的删除类似,删除目录时先删除该目录下的文件,再删除该目录;目录移动时更改目录索引项中的父目录ID;文件系统格式化时主要根据配置信息格式化索引头区和日志头区,索引头区中索引组状态区和日志头区中的node区长度初始都为1个block;文件系统扩容时,由于本发明实施例中,文件系统没有对数据区直接进行分配管理,所以对文件系统的扩容相对比较简单,只需更改索引区和日志区中的数据区总容量和索引区总容量。这些功能均可以依据在本文件公开的方案的基础上,不付出创造性的劳动即可得到,以下以文件系统加载及文件恢复流程为例进行说明,其他操作不再赘述。
文件系统加载时,采取多线程同时处理,线程分隔的依据是处理要素在底层存储中物理上独立,业务上隔离。文件系统加载时除了将索引头和日志头加载至内存区之外,涉及到的主要线程包括数据删除处理线程、目录加载线程及数据操作日志处理线程,其中,数据删除处理线程是文件系统加载时,根据记录的数据删除操作日志将之前没有处理完的数据删除操作继续处理完毕,从而保证文件系统加载后索引区、日志区、数据区中信息的一致性,数据删除处理线程的处理过程同前文所述的数据删除流程,此处不再赘述;目录加载线程是文件系统加载时,根据索引信息将目录结构以红黑树的形式在内存中进行组织;数据操作日志处理线程,是对日志区中所有的数据操作日志进行统一处理的主线程,首先读取日志区中所有数据操作日志,数据操作日志的类型包括删除数据操作日志和写入数据操作日志,然后判断数据操作日志的类型,若为删除数据操作日志就将该删除数据操作日志放入删除处理链表中,由数据删除处理线程对该删除处理链表中的删除数据操作日志进行单独处理,若为写入数据操作日志,就按照写入数据操作的流程进行处理,写入数据操作的流程在前文所述的文件写入流程,此处不再赘述,通过多线程同时处理可以在单设备多存储单元的情况下实现高效的加载。
当文件删除或者文件写入操作在写入完成前由于设备异常重启、被异常中断后,设备在重新启动后需要对文件系统进行恢复处理,处理过程是:首先读取日志区中common区的日志并检查日志的有效性,根据common区中的有效日志将异常中断前未完成的相应操作继续进行,当相应的操作完成后,再将有效日志置失效,即将保存有效日志的日志区的使用状态更新至空闲状态。其中,如果被异常中断的是文件删除操作,根据文件索引项中记录的存储数据对象的数据对象列表进行继续删除,文件删除的具体流程在前文已有描述,如果被异常中断的是文件写入操作,首先读取操作类型、对应的文件ID及存储该文件数据的数据对象列表,然后根据前述为该文件数据分配对象的原则检查最后一个对象写入的大小,计算文件实际写入的大小,然后更新索引区中文件大小,使得索引区中记录的文件大小和实际写入的大小一致。
需要说明的是,本实施例中的所有流程都只涉及到对应流程中主要的索引区信息的更新及主要的流程步骤,实际实现时,可以根据具体的使用场景和易实现性增加其他相关的信息,流程中只要涉及到索引区或者数据区的信息的更新都需要首先记录相应的操作到日志区,再进行相应的操作,操作完成后,再将对应的日志区的使用状态置为空闲状态。本实施例中虽然没有在本实施例中的每一个流程中均进行提及,但是根据整个文件公开的所有信息,本领域技术人员完全可以不付出创造性的劳动即可实现相应的功能。
还需要说明的是,在实现文件系统时建议:
(1)文件系统中的数据区和索引区可以采取不同的冗余策略,甚至存储介质。
(2)单个文件系统可以看作一个存储单元,单设备可以采用多存储单元的形式进行存储。
(3)写入模型上建议采取小文件合并写入的模式,最大的发挥存储的读写性能。写入小文件后返回的文件名后增加objname-offset-size标识小文件的位置。
(4)业务上读取建议采取客户端直读底层存储的模式。
在本发明实施例中,基于对象存储空间,采用索引区可动态扩展、非块格式的文件系统,可以根据需求动态增加或缩小索引区,与现有技术相比,具有以下有益效果:
第一,索引区和日志区可以根据需求动态增加或缩小,提高文件系统的可扩展性及存储空间利用率。
第二,索引区和日志区与数据区相互独立,使得索引区和日志区与数据区可以采用不同的冗余策略或者存储介质,增加了文件系统配置的灵活性。
第三,索引区不直接管理数据区,降低了文件系统的格式化、扩容、缩容操作带来的开销。
第四,日志区通过存储的checksum、日志头及日志组头保存2份数据等手段实现了日志区中存储的数据的高一致性检查、日志原子操作的有效性检查增加了文件系统的健壮性,使得文件操作在异常中断后可以依据日志区记录的日志进行恢复。
第五,通过建立索引头、索引组、日志头、日志组、文件ID等与存储对象之间的映射关系,方便通过文件的对象名找到对应的元数据,从而增强了元数据的寻址效率。
第二实施例
请参照图16,图16示出了本发明实施例提供的文件系统动态索引装置200的方框示意图。文件系统动态索引装置200应用于对象存储设备100,其包括第一确定模块201;第一增加模块202;第二确定模块203;创建模块204;第三确定模块205;第四确定模块206;第二增加模块207;第一获取模块208;初始化模块209;第五确定模块210;第一写入模块211;第二写入模块212;第六确定模块213;第三写入模块214;更新模块215;第二获取模块216;第四写入模块217;删除模块218。
第一确定模块201,用于基于客户端发送的文件创建请求确定出待创建文件所属的父目录中已创建文件的索引组。
在本发明实施例中,第一确定模块201用于执行步骤S101。
第一增加模块202,用于当已创建文件的索引组的使用状态均为已满状态、且索引头区中所有索引组的使用状态均为已满状态时,在索引头区中增加预设长度的第一扩展区,并将第一扩展区中每个索引组的使用状态均设置为空闲状态。
在本发明实施例中,第一增加模块202用于执行步骤S102。
第二确定模块203,用于按照预设规则从第一扩展区中确定出使用状态为空闲状态的索引组的序号作为第一目标序号。
在本发明实施例中,第二确定模块203用于执行步骤S103。
创建模块204,用于创建与第一目标序号对应的第一目标索引组并对第一目标索引组进行第一格式化,将待创建文件的索引信息存储至第一目标索引组。
在本发明实施例中,创建模块204用于执行步骤S104及其子步骤S1041-S1045。
第三确定模块205,用于当已创建文件的索引组中存在未满状态的索引组时,从未满状态的索引组中确定出第二目标索引组,其中,未满状态包括已用状态和空闲状态。
在本发明实施例中,第三确定模块205用于执行步骤S201。
第四确定模块206,用于当第二目标索引块中存在未满状态的第二目标索引块时,从第二目标索引块中确定出空闲状态的第二目标索引项,并将待创建文件的索引信息存储至第二目标索引项。
在本发明实施例中,第四确定模块206用于执行步骤S202。
第二增加模块207,用于当第二目标索引组中不存在未满状态的第二目标索引块时,在第二目标索引组中增加预设长度的第二扩展区,并将待创建文件的索引信息存储至第二格式化后的第二扩展区。
在本发明实施例中,第二增加模块207用于执行步骤S203。
第一获取模块208,用于基于客户端发送的写入文件的写入请求,从索引区获取待写入文件的索引信息。
在本发明实施例中,第一获取模块208用于执行步骤S301。
初始化模块209,用于初始化待写入文件的索引信息并将初始化后的索引信息写入至日志头区后更新至索引区。
在本发明实施例中,初始化模块209用于执行步骤S302。
第五确定模块210,用于依据待写入文件的大小确定存储待写入文件的待写入数据的数据对象的ID列表、并生成写入操作数据日志。
在本发明实施例中,第五确定模块210用于执行步骤S303。
第一写入模块211,用于将写入操作数据日志写入至日志组后,再依次将待写入数据写入至数据对象的ID列表对应的数据对象。
在本发明实施例中,第一写入模块211用于执行步骤S304及其子步骤S3041-S3043。
第二写入模块212,用于将待写入文件的大小及待写入数据的数据对象的ID列表写入至日志头区后再更新至索引区。
在本发明实施例中,第二写入模块212用于执行步骤S305。
在本发明实施例中,第二写入模块212具体用于:
获取待写入文件的父目录的ID及待写入文件的文件索引组ID;
将待写入文件的父目录的ID、待写入文件的大小及待写入数据的数据对象的ID列表更新至待写入文件的文件索引组;
依据待写入文件的父目录的ID得到与父目录的ID对应的目录索引组,并将待写入文件的文件索引组ID更新至父目录的ID对应的目录索引组;
依据待写入文件的大小更新索引头中的数据区总容量、数据区剩余容量、索引区总容量及索引区剩余容量。
第六确定模块213,用于基于客户端发送的文件删除请求确定出待删除文件的索引项。
在本发明实施例中,第六确定模块213用于执行步骤S401。
第三写入模块214,用于将待删除文件的索引项中待删除文件的数据对象的列表作为第一数据操作日志写入至日志组区,其中,第一数据操作日志的类型为数据删除。
在本发明实施例中,第三写入模块214用于执行步骤S402。
更新模块215,用于将待删除文件的索引项的使用状态设置为空闲状态并更新对应的索引块头、索引组头及索引头后返回客户端。
在本发明实施例中,更新模块215用于执行步骤S403及其子步骤S4031-S4035。
第二获取模块216,用于从数据对象ID列表中获取当前待删除的数据对象的ID。
在本发明实施例中,第二获取模块216用于执行步骤S404。
第四写入模块217,用于将当前待删除的数据对象的ID作为第二数据操作日志写入至日志组区。
在本发明实施例中,第四写入模块217用于执行步骤S405。
删除模块218,用于删除当前待删除的数据对象后将待删除的数据对象的ID从第一数据操作日志中删除。
在本发明实施例中,删除模块218用于执行步骤S406。
综上所述,本发明提供的一种文件系统动态索引方法及装置,应用于对象存储设备,对象存储设备与客户端通信连接,文件系统包括索引区,索引区包括索引头区及包括多个索引组的索引组区,索引头区按照索引组的序号依次存储每个索引组的使用状态,每个索引组的使用状态均包括已满状态和空闲状态,每个索引组包括索引组头及多个索引块,所述方法包括:基于客户端发送的文件创建请求确定出待创建文件所属的父目录中已创建文件的索引组;当已创建文件的索引组的使用状态均为已满状态时,在索引头区中增加预设长度的第一扩展区,并将第一扩展区中每个索引组的使用状态均设置为空闲状态;按照预设规则从第一扩展区中确定出使用状态为空闲状态的索引组的序号作为第一目标序号;创建与第一目标序号对应的目标索引组并对目标索引组进行第一格式化,将待创建文件的索引信息存储至目标索引组。与现有技术相比,本发明实施例基于对象存储空间,提供一种索引区可动态扩展、非块格式的文件系统,可以根据需求动态增大或缩小索引区,提高文件系统的可扩展性及空间利用率。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
Claims (13)
1.一种文件系统动态索引方法,其特征在于,应用于对象存储设备,所述对象存储设备与客户端通信连接,所述文件系统包括索引区,所述索引区包括索引头区及包括多个索引组的索引组区,所述索引头区按照索引组的序号依次存储每个索引组的使用状态,所述每个索引组的使用状态均包括已满状态和空闲状态,所述每个索引组包括索引组头及多个索引块;
所述方法包括:
基于所述客户端发送的文件创建请求确定出待创建文件所属的父目录中已创建文件的索引组;
当所述已创建文件的索引组的使用状态均为已满状态、且所述索引头区中所有索引组的使用状态均为已满状态时,在所述索引头区中增加预设长度的第一扩展区,并将所述第一扩展区中每个索引组的使用状态均设置为空闲状态;
按照预设规则从所述第一扩展区中确定出使用状态为空闲状态的索引组的序号作为第一目标序号;
创建与所述第一目标序号对应的第一目标索引组并对所述第一目标索引组进行第一格式化,将所述待创建文件的索引信息存储至所述第一目标索引组。
2.如权利要求1所述的文件系统动态索引方法,其特征在于,所述对所述第一目标索引组进行第一格式化的步骤,包括:
将所述第一目标索引组划分为索引组头及包括多个索引块的索引块区,并将所述索引组头中、按照所述索引块的序号依次存储的每个索引块的使用状态设置为空闲状态;
将每个所述索引块划分为索引块头及包括多个索引项的索引项区,并将所述索引块头中、按照所述索引项的序号依次存储的每个索引项的使用状态设置为空闲状态。
3.如权利要求2所述的文件系统动态索引方法,其特征在于,所述第一目标索引组的使用状态还包括已用状态,所述每个索引块的使用状态还包括已用状态,所述每个索引项的使用状态还包括已用状态,所述将所述待创建文件的索引信息存储至所述第一目标索引组的步骤,包括:
按照预设规则将所述第一目标索引组中空闲状态的索引块确定为第一目标索引块;
将所述第一目标索引块中空闲状态的索引项确定为第一目标索引项;
将所述待创建文件的索引信息存储至所述第一目标索引项,并将所述第一目标索引块头中所述第一目标索引项的使用状态设置为已用状态、将所述第一目标索引组的索引组头中所述第一目标索引块的使用状态设置为已用状态、以及将索引头中所述第一目标索引组的使用状态设置为已用状态。
4.如权利要求3所述的文件系统动态索引方法,其特征在于,所述方法还包括:
当所述已创建文件的索引组存在未满状态的索引组时,从所述未满状态的索引组中确定出第二目标索引组,其中,所述未满状态包括已用状态和空闲状态;
当所述第二目标索引组中存在未满状态的第二目标索引块时,从所述第二目标索引块中确定出空闲状态的第二目标索引项,并将所述待创建文件的索引信息存储至所述第二目标索引项,其中,所述未满状态包括已用状态和空闲状态;
当所述第二目标索引组中不存在未满状态的第二目标索引块时,在所述第二目标索引组中增加预设长度的第二扩展区,并将所述待创建文件的索引信息存储至第二格式化后的所述第二扩展区。
5.如权利要求4所述的文件系统动态索引方法,其特征在于,所述将所述待创建文件的索引信息存储至第二格式化后的所述第二扩展区的步骤,包括:
将所述第二扩展区划分为多个索引块,并将每个所述索引块划分为索引块头及包括多个索引项的索引项区,并将所述索引块头中按照所述索引项的序号依次存储的每个索引项的使用状态设置为空闲状态;
将所述空闲状态的索引块作为第二目标索引块;
将所述第二目标索引块中空闲状态的索引项作为第二目标索引项;
将所述待创建文件的索引信息存储至所述第二目标索引项。
6.如权利要求1所述的文件系统动态索引方法,其特征在于,所述文件系统还包括日志区,所述日志区包括日志头区及包括多个日志组的日志组区,所述方法还包括:
基于所述客户端发送的写入文件的写入请求,从所述索引区获取待写入文件的索引信息;
初始化所述待写入文件的索引信息并将初始化后的索引信息写入至所述日志头区后更新至所述索引区;
依据所述待写入文件的大小确定存储待写入文件的待写入数据的数据对象的ID列表、并生成写入操作数据日志;
将所述写入操作数据日志写入至所述日志组后,再依次将待写入数据写入至所述数据对象的ID列表对应的数据对象;
将所述待写入文件的大小及所述数据对象的ID列表写入至所述日志头区后再更新至所述索引区。
7.如权利要求6所述的文件系统动态索引方法,其特征在于,所述日志组包括多个日志项,每个日志项包括多个数据操作区及按照数据操作区的序号依次存储的每个数据操作区的使用状态,所述数据操作区的使用状态包括占用状态和空闲状态,所述将所述写入数据操作日志写入至所述日志组的步骤,包括:
获取空闲状态的目标数据操作区;
依据待写入文件的索引信息生成待写入文件的ID;
将所述写入数据操作日志写入至所述目标数据操作区,其中,所述写入数据操作日志包括数据操作日志类型、所述待写入文件的ID及所述数据对象的ID列表。
8.如权利要求7所述的文件系统动态索引方法,其特征在于,所述日志头区还包括按照日志组的序号依次存储的每个日志组的使用状态的日志组状态区,所述每个日志组的使用状态均包括已满状态、已用状态及空闲状态,所述每个日志组还包括日志组头,所述日志组头包括按照日志项的序号依次存储的每个日志项的使用状态的日志项状态区,所述每个日志项的使用状态均包括已满状态、已用状态及空闲状态,所述获取空闲状态的目标数据操作区的步骤,包括:
当所述日志头区存在未满状态的日志组的第二目标序号时,将所述与所述第二目标序号对应的日志组确定为目标日志组,其中,所述未满状态包括空闲状态和已用状态;
将所述目标日志组中未满状态的日志项作为目标日志项;
将所述目标日志项中空闲状态的数据操作区确定为目标数据操作区。
9.如权利要求7所述的文件系统动态索引方法,其特征在于,所述索引组包括文件索引组和目录索引组,所述索引头包括数据区总容量、数据区剩余容量、索引区总容量、索引区剩余容量,所述将所述待写入文件的大小及待写入数据的数据对象的ID列表写入至所述日志头区后再更新至所述索引区的步骤,包括:
获取待写入文件的父目录的ID及待写入文件的文件索引组ID;
将所述待写入文件的父目录的ID、待写入文件的大小及待写入数据的数据对象的ID列表更新至待写入文件的文件索引组;
依据所述待写入文件的父目录的ID得到与所述父目录的ID对应的目录索引组,并将所述待写入文件的文件索引组ID更新至所述父目录的ID对应的目录索引组;
依据所述待写入文件的大小更新所述索引头中的数据区总容量、数据区剩余容量、索引区总容量及索引区剩余容量。
10.如权利要求6所述的文件系统动态索引方法,其特征在于,所述方法还包括:
基于所述客户端发送的文件删除请求确定出待删除文件的索引项;
将所述待删除文件的索引项中的所述待删除文件的数据对象的ID列表作为第一数据操作日志写入至所述日志组区,其中,所述第一数据操作日志的类型为数据删除;
将所述待删除文件的索引项的使用状态设置为空闲状态并更新对应的索引块头、索引组头及索引头后返回客户端。
11.如权利要求10所述的文件系统动态索引方法,其特征在于,所述索引组包括索引组头及包括多个索引块的索引块区,所述索引组头按照所述索引块的序号依次存储每个索引块的使用状态,所述每个索引块的使用状态包括空闲状态、已用状态及已满状态,索引块区包括索引块头及包括多个索引项的索引项区,所述索引块头按照所述索引项的序号依次存储每个索引项的使用状态,所述每个索引项的使用状态包括空闲状态、已用状态及已满状态;
所述将所述待删除文件的索引项的使用状态设置为空闲状态并更新对应的索引块头、索引组头及索引头的步骤,包括:
将所述待删除文件的目标索引项对应的目标索引块的索引块头中、所述待删除文件的目标索引项的使用状态设置为空闲状态;
当所述待删除文件的目标索引块的索引块头中所有索引项的使用状态均为空闲状态时,将所述待删除文件的目标索引块对应的目标索引组的索引组头中、所述待删除文件的目标索引块的使用状态设置为空闲状态;
当处于同一个第一对象的索引块的使用状态均为空闲状态时,删除所述第一对象;
当所述待删除文件的目标索引组的索引组头中所有索引块的使用状态均为空闲状态时,将所述待删除文件的目标索引组的索引头区中、与所述待删除文件的目标索引组对应的使用状态设置为空闲状态;
当所述索引头区中同一个第二对象的索引组的使用状态均为空闲状态时,删除所述第二对象。
12.如权利要求11所述的文件系统动态索引方法,其特征在于,所述待删除文件的数据对象列表中包括多个待删除文件的数据对象ID,所述方法还包括:
从所述数据对象列表中获取当前待删除的数据对象的ID;
将所述当前待删除的数据对象的ID作为第二数据操作日志写入至所述日志组区;
删除当前待删除的数据对象后将所述待删除的数据对象的ID从所述第一数据操作日志中删除。
13.一种文件系统动态索引装置,其特征在于,应用于对象存储设备,所述对象存储设备与客户端通信连接,所述文件系统包括索引区,所述索引区包括索引头区及包括多个索引组的索引组区,所述索引头区按照索引组的序号依次存储每个索引组的使用状态,所述每个索引组的使用状态均包括已满状态和空闲状态,所述每个索引组包括索引组头及多个索引块;
所述装置包括:
第一确定模块,用于基于所述客户端发送的文件创建请求确定出待创建文件所属的父目录中已创建文件的索引组;
第一增加模块,用于当所述已创建文件的索引组的使用状态均为已满状态、且所述索引头区中所有索引组的使用状态均为已满状态时,在所述索引头区中增加预设长度的第一扩展区,并将所述第一扩展区中每个索引组的使用状态均设置为空闲状态;
第二确定模块,用于按照预设规则从所述第一扩展区中确定出使用状态为空闲状态的索引组的序号作为第一目标序号;
创建模块,用于创建与所述第一目标序号对应的第一目标索引组并对所述第一目标索引组进行第一格式化,将所述待创建文件的索引信息存储至所述第一目标索引组。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811302971.6A CN111143284B (zh) | 2018-11-02 | 2018-11-02 | 文件系统动态索引方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811302971.6A CN111143284B (zh) | 2018-11-02 | 2018-11-02 | 文件系统动态索引方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111143284A true CN111143284A (zh) | 2020-05-12 |
CN111143284B CN111143284B (zh) | 2023-06-20 |
Family
ID=70516135
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811302971.6A Active CN111143284B (zh) | 2018-11-02 | 2018-11-02 | 文件系统动态索引方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111143284B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050086192A1 (en) * | 2003-10-16 | 2005-04-21 | Hitach, Ltd. | Method and apparatus for improving the integration between a search engine and one or more file servers |
CN1632765A (zh) * | 2004-12-31 | 2005-06-29 | 大唐微电子技术有限公司 | 一种闪存文件系统管理方法 |
CN101178693A (zh) * | 2007-12-14 | 2008-05-14 | 沈阳东软软件股份有限公司 | 一种数据缓存方法及系统 |
CN103309890A (zh) * | 2012-03-15 | 2013-09-18 | 华北计算机系统工程研究所 | 一种Linux文件系统与实时数据库索引融合的技术 |
CN104008111A (zh) * | 2013-02-27 | 2014-08-27 | 深圳市腾讯计算机系统有限公司 | 一种数据的存储管理方法及装置 |
CN105468541A (zh) * | 2015-12-11 | 2016-04-06 | 中南大学 | 一种面向透明计算智能终端的缓存管理方法 |
US20160283538A1 (en) * | 2015-03-27 | 2016-09-29 | International Business Machines Corporation | Fast multi-tier indexing supporting dynamic update |
CN107544873A (zh) * | 2017-08-28 | 2018-01-05 | 郑州云海信息技术有限公司 | 一种存放备份数据的备份系统和方法 |
-
2018
- 2018-11-02 CN CN201811302971.6A patent/CN111143284B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050086192A1 (en) * | 2003-10-16 | 2005-04-21 | Hitach, Ltd. | Method and apparatus for improving the integration between a search engine and one or more file servers |
CN1632765A (zh) * | 2004-12-31 | 2005-06-29 | 大唐微电子技术有限公司 | 一种闪存文件系统管理方法 |
CN101178693A (zh) * | 2007-12-14 | 2008-05-14 | 沈阳东软软件股份有限公司 | 一种数据缓存方法及系统 |
CN103309890A (zh) * | 2012-03-15 | 2013-09-18 | 华北计算机系统工程研究所 | 一种Linux文件系统与实时数据库索引融合的技术 |
CN104008111A (zh) * | 2013-02-27 | 2014-08-27 | 深圳市腾讯计算机系统有限公司 | 一种数据的存储管理方法及装置 |
US20160283538A1 (en) * | 2015-03-27 | 2016-09-29 | International Business Machines Corporation | Fast multi-tier indexing supporting dynamic update |
CN105468541A (zh) * | 2015-12-11 | 2016-04-06 | 中南大学 | 一种面向透明计算智能终端的缓存管理方法 |
CN107544873A (zh) * | 2017-08-28 | 2018-01-05 | 郑州云海信息技术有限公司 | 一种存放备份数据的备份系统和方法 |
Non-Patent Citations (3)
Title |
---|
S. ANJANADEVI等: "An Efficient Dynamic Indexing and Metadata Based Storage in Cloud Environment" * |
屈磊: "动态全文索引系统关键技术研究" * |
马乐等: "一种海量文本的动态索引方法" * |
Also Published As
Publication number | Publication date |
---|---|
CN111143284B (zh) | 2023-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10795788B2 (en) | Remote data replication method and system | |
US10983955B2 (en) | Data unit cloning in memory-based file systems | |
US11301379B2 (en) | Access request processing method and apparatus, and computer device | |
US7814149B1 (en) | Client side data deduplication | |
US10599337B2 (en) | Method and device for writing data and acquiring data in a distributed storage system | |
CN106547859B (zh) | 一种多租户数据存储系统下的数据文件的存储方法及装置 | |
CN108319602B (zh) | 数据库管理方法及数据库系统 | |
CN106951375B (zh) | 在存储系统中删除快照卷的方法及装置 | |
JP6264666B2 (ja) | データ格納方法、データストレージ装置、及びストレージデバイス | |
CN107111460B (zh) | 使用块文件的重复数据删除 | |
CN110998537B (zh) | 一种过期备份处理方法及备份服务器 | |
US10628298B1 (en) | Resumable garbage collection | |
US10977143B2 (en) | Mirrored write ahead logs for data storage system | |
CN110147203B (zh) | 一种文件管理方法、装置、电子设备及存储介质 | |
CN106709014B (zh) | 一种文件系统转换方法及装置 | |
CN115840731A (zh) | 文件处理方法、计算设备及计算机存储介质 | |
US10452496B2 (en) | System and method for managing storage transaction requests | |
JP6376626B2 (ja) | データ格納方法、データストレージ装置、及びストレージデバイス | |
CN108271420B (zh) | 管理文件的方法、文件系统和服务器系统 | |
CN107145501B (zh) | 文件更新方法、文件复制方法以及相应的系统 | |
CN111143284B (zh) | 文件系统动态索引方法及装置 | |
CN105573862B (zh) | 一种恢复文件系统的方法和设备 | |
CN108984343B (zh) | 一种基于内容分析的虚拟机备份及存储管理方法 | |
CN112965939A (zh) | 一种文件合并方法、装置和设备 | |
US10860533B1 (en) | File size as an indicator of file properties |
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 |