文件系统启动方法及装置与流程

文档序号:16607738发布日期:2019-01-14 21:15阅读:223来源:国知局
文件系统启动方法及装置与流程

本申请涉及分布式系统技术领域,具体而言,涉及一种文件系统启动方法及装置。



背景技术:

在分布式文件系统中,元数据(metadata)信息用于记载该分布式文件系统中文件的分布式位置、文件大小、访问权限等属性信息。需要先加载全部的元数据信息,才能成功启动分布式文件系统,从而对外提供服务。目前,通常会从分布式文件系统的磁盘中加载元数据信息进行系统启动,而磁盘中的元数据信息,通常是根据写入到磁盘中的数据信息进行对应更新的。

然而,现有的分布式文件系统启动过程中,加载元数据信息耗时较长,用户体验差。



技术实现要素:

有鉴于此,本申请的目的在于提供一种文件系统启动方法及装置,以至少部分地改善上述问题。

第一方面,本申请实施例提供一种文件系统启动方法,应用于分布式文件系统,所述方法包括:

在所述分布式文件系统的磁盘中创建用于存储元数据信息的镜像文件;

在所述分布式文件系统的内存中的元数据信息发生变化时,根据该内存中的元数据更新所述镜像文件中存储的元数据信息;

在所述分布式文件启动时,从所述镜像文件加载元数据信息,用于启动所述分布式文件系统。

可选地,根据本申请实施例第一方面提供的文件系统启动方法,所述元数据信息包括版本信息,所述分布式文件系统还包括日志文件,用于缓存针对所述分布式文件系统的写操作数据,每个写操作数据携带有该写操作数据的版本信息;所述方法包括:

在从所述镜像文件加载元数据信息之后,获取所述分布式文件系统的内存中当前的元数据信息所包括的版本信息作为第一版本信息,获取所述日志文件中最新记录的写操作数据中携带的版本信息作为第二版本信息;

判断所述第一版本信息和所述第二版本信息是否相同;

当所述第一版本信息和所述第二版本信息不相同时,将所述日志文件中携带有目标版本信息的写操作数据更新到所述分布式文件系统的磁盘中,再将所述分布式文件系统的磁盘中包括所述目标版本信息的元数据信息加载到所述分布式文件系统的内存中,其中,所述目标版本信息为比所述第一版本信息新的版本信息。

可选地,根据本申请实施例第一方面提供的文件系统启动方法,在所述分布式文件系统启动时,从所述镜像文件加载元数据信息,用于启动所述分布式文件系统的步骤之前,所述方法还包括:

判断所述镜像文件是否可用;

当所述镜像文件可用时,再执行从所述镜像文件中加载元数据信息,用于启动所述分布式文件系统的步骤;

当所述镜像文件不可用时,将所述日志文件中的写操作数据更新到所述分布式文件系统的磁盘中,再从所述分布式文件系统的磁盘加载元数据信息,用于启动所述分布式文件系统。

可选地,根据本申请实施例第一方面提供的文件系统启动方法,所述方法还包括:

当所述分布式文件系统成功启动时,或者当接收到读取数据信息的指令时,将所述日志文件中的写操作数据更新到所述分布式文件系统的磁盘中。

可选地,根据本申请实施例第一方面提供的文件系统启动方法,所述分布式文件系统中预先配置有相对i/o线程独立的目标线程;所述在所述分布式文件系统的内存中的元数据信息发生变化时,根据该内存中的元数据信息更新所述镜像文件中存储的元数据信息的步骤在所述目标线程中执行。

第二方面,本申请实施例还提供一种文件系统启动装置,应用于分布式文件系统,所述装置包括:

镜像文件创建模块,用于在所述分布式文件系统的磁盘中创建用于存储元数据信息的镜像文件;

元数据保存模块,用于在所述分布式文件系统的内存中的元数据信息发生变化时,根据该内存中的元数据更新所述镜像文件中存储的元数据信息;

启动模块,用于在所述分布式文件启动时,从所述镜像文件加载元数据信息,用于启动所述分布式文件系统。

可选地,根据本申请实施例第二方面提供的文件系统启动装置,所述元数据信息包括版本信息,所述分布式文件系统还包括日志文件,用于缓存针对所述分布式文件系统的写操作数据,每个写操作数据携带有该写操作数据的版本信息;所述装置还包括:

版本信息获取模块,用于在所述启动模块从所述镜像文件加载元数据信息之后,获取所述分布式文件系统的内存中当前的元数据信息所包括的版本信息作为第一版本信息,获取所述日志文件中最新记录的写操作数据中携带的版本信息作为第二版本信息;

第一判断模块,用于判断所述第一版本信息和所述第二版本信息是否相同;当所述第一判断模块确定所述第一版本信息和所述第二版本信息不相同时,将所述日志文件中携带有目标版本信息的写操作数据存储到所述分布式文件系统的磁盘中,再将所述分布式文件系统的磁盘中包括所述目标版本信息的元数据信息加载到所述分布式文件系统的内存中,其中,所述目标版本信息为比所述第一版本信息新的版本信息。

可选地,根据本申请实施例第二方面提供的文件系统启动装置,所述装置还包括:

第二判断模块,用于在所述分布式文件系统启动时,从所述镜像文件加载元数据信息,用于启动所述分布式文件系统之前,判断所述镜像文件是否可用;当所述镜像文件可用时,再触发所述启动模块从所述镜像文件中加载元数据信息,用于启动所述分布式文件系统;当所述镜像文件不可用时,将所述日志文件中的写操作数据存储到所述分布式文件系统的磁盘中,再从所述分布式文件系统的磁盘加载元数据信息,用于启动所述分布式文件系统。

可选地,根据本申请实施例第二方面提供的文件系统启动装置,所述装置还包括:

数据加载模块,用于当所述分布式文件系统成功启动时,或者当接收到读取数据信息的指令时,将所述日志文件中的写操作数据存储到所述分布式文件系统的磁盘中。

可选地,根据本申请实施例第二方面提供的文件系统启动装置,所述分布式文件系统中预先配置有相对i/o线程独立的目标线程,所述元数据保存模块在所述目标线程中运行。

第三方面,本申请还提供一种机器可读存储介质,该机器可读存储介质上存储有计算机指令,该计算机指令被执行时促使处理器实现:本申请实施例第一方面提供的文件系统启动方法。

相较于现有技术,本申请具有以下有益效果:

本申请实施例提供的一种文件系统启动方法及装置,应用于分布式文件系统。在分布式文件系统的磁盘中创建用于存储元数据信息的镜像文件,在分布式文件系统的内存中的元数据信息发生变化时,根据该内存中的元数据信息更新该镜像文件中的元数据信息。在分布式文件系统启动时,从该镜像文件加载元数据信息,用于启动分布式文件系统。如此,可以减少分布式文件系统的启动时长,加快分布式文件系统的启动速度。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为现有技术中的分布式文件系统的架构示意图;

图2为本申请实施例提供的一种分布式文件系统的架构示意图;

图3为本申请实施例提供的一种文件系统启动方法的流程示意图;

图4为本申请实施例提供的文件系统启动方法的又一流程示意图;

图5为本申请实施例提供的一种文件系统启动装置的功能模块框图。

图标:100、200-分布式文件系统;110、210-磁盘;211-镜像文件;120、220-日志文件;230-内存;300-文件系统启动装置;310-镜像文件创建模块;320-元数据保存模块;330-启动模块;340-版本信息获取模块;350-第一判断模块;360-第二判断模块;370-数据加载模块;400-客户端。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。

因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

在实际应用中,写入分布式文件系统的数据需要持久化地存储到分布式文件系统的磁盘上,当有数据写入时,分布式文件系统的元数据信息会发生变化,对应地,发生变化的元数据信息也会被写到磁盘上。在分布式文件系统启动时,会从磁盘上加载全部的元数据信息,用于启动分布式文件系统。

由于每次将数据写到分布式文件系统的磁盘上都需要磁头摆动进行寻址,而针对分布式文件系统写入小文件数据的写操作较多,若每次写入小文件数据,都先通过磁头摆动寻址,再进行下一次写操作,会导致分布式文件系统的写数据性能非常低,因而,在一些实施方式中,针对写小文件数据的写操作,通常会先将该小文件数据写入到日志文件中,在之后再将日志文件中的数据持久化地存储到磁盘上。其中,小文件数据通常是指文件数据的大小在1mb以内的文件。

详细地,如图1所示,用户通常是通过客户端400来访问分布式文件系统100,当分布式文件系统100接收到客户端400发送的用于写入小文件数据的写操作请求时,将该小文件数据写入到日志文件120中,并在该小文件数据成功写入日志文件120时,立即返回成功写入的消息给客户端400,如此,客户端400可以立即进行下一写操作。在后续过程中,再将日志文件120中的数据信息持久化地存储到磁盘110上,并对应地更新磁盘110上的元数据信息。

然而,如果在日志文件120中的数据信息还没有被全部存储到磁盘110上的情况下,分布式文件系统100出现断电、故障等原因导致系统重启,则在该重启过程中,分布式文件系统100需要先将日志文件120中的数据信息持久化地存储到磁盘110上,再基于此更新磁盘110上的元数据信息,然后再从磁盘110加载元数据信息,并基于所加载的元数据信息构建集群拓扑信息,从而实现分布式文件系统100的启动。将日志文件120中的数据信息全部存储到磁盘110上这一过程是很耗时的,这会导致分布式文件系统100的启动时间很长,用户体验非常差。

针对上述方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本申请实施例针对上述问题所提出的解决方案,都应该是发明人在发明过程中对本申请做出的贡献。

基于上述研究,本申请实施例提出一种应用于分布式文件系统的文件系统启动方法及装置,用以加快分布式文件系统的启动速度,下面对该内容进行详细阐述。

如图2所示,是本申请实施例提供的一种分布式文件系统200的架构示意图,该分布式文件系统200包括磁盘210、日志文件220、内存230及存储在该磁盘210上的镜像文件211,该镜像文件211为预先创建的用于存储分布式文件系统200的元数据信息的文件。其中,所述日志文件220用于缓存针对所述分布式文件系统200的写操作数据,在本申请实施例中,所述日志文件220中的写操作数据具体可以以键值对(key-value)的形式进行存储,图2所示为日志文件220以key-value形式存储的示意图。此外,所述内存230可以是部署有元数据服务的服务器或主机的内存230,所述镜像文件211可以是在部署有数据服务的服务器或主机的磁盘210上,也可以是在部署有元数据服务的服务器或主机的磁盘210上。

应当理解,在本实施例中,数据服务和元数据服务也可以部署在同一服务器或主机上,本实施例并不以此为限制。

如图3所示,是本申请实施例提供的一种文件系统启动方法的流程示意图,该文件启动方法应用于图2所示的分布式文件系统200,下面结合图3对该方法进行详细阐述。

步骤s301,在所述分布式文件系统200的磁盘210上创建用于存储所述分布式文件系统200的元数据信息的镜像文件211。

其中,所述镜像文件211即为图2中示出的预先创建的镜像文件211,该镜像文件211持久化地存储在分布式文件系统200的磁盘210上,在系统断电的情况下,其上的数据不会发生丢失。

步骤s302,在所述分布式文件系统200的内存230中的元数据信息发生变化时,根据该内存230中的元数据信息更新所述镜像文件211中存储的元数据信息。

在本实施例中,当所述镜像文件211被创建之后,对分布式文件系统200的内存230中当前的全部元数据信息保存到所述镜像文件211中。在此之后,通过增量更新的方式,一旦检测到所述分布式文件系统200的内存230中的元数据信息发生了变化,例如,发生增、删、改等操作的情况下,会根据发生变化后的元数据信息对应更新所述镜像文件211中存储的元数据信息。

应当理解,在本实施例中,步骤s302通常是在分布式文件系统200运行过程中执行的。

可选地,在本实施例中,可以通过做快照的方式实现步骤s302。详细地,在所述镜像文件211被创建时,对所述分布式文件系统200当前的全部元数据信息做快照,并将得到的元数据快照存储到所述镜像文件211中。在此之后,一旦检测到所述分布式文件系统200的内存230中的元数据信息发生变化,就对该内存230中的元数据信息做增量快照,并将增量快照存储到所述镜像文件211中。

可选地,在本实施例中,所述分布式文件系统中预先创建有相对i/o线程独立的目标线程,步骤s302可以在所述目标线程中被执行。

通过上述设计,将元数据信息增量更新到所述镜像文件211中的过程不在i/o流程中,是独立运行的,并不会对针对分布式文件系统200的i/o操作造成阻塞。

步骤s303,在所述分布式文件系统200启动时,从所述镜像文件211加载元数据信息,用于启动所述分布式文件系统200。

在本实施例中,在分布式文件系统200启动时,直接从镜像文件211加载元数据信息到分布式文件系统200的内存230中,以基于该元数据信息启动分布式文件系统200并对外提供服务。

如此,在启动过程中节省了将日志文件220中的全部数据信息存储到磁盘210上的时间,加快了启动速度,改善了用户体验。

在此值得说明的是,在实际应用中,当写操作数据被写入到日志文件220中时,内存230的元数据信息会对应更新为与该写操作数据对应的状态,而在本申请实施例中,由于是实时地将内存230中的元数据信息持久化地存储到镜像文件211中,因而,最终从所述镜像文件211加载到内存230的元数据信息通常为最新、最全的元数据信息。

可选地,在本实施例中,针对每个写操作,分布式文件系统200可以为该写操作数据分配一版本信息,该版本信息可以为事务号(通常又被称作“事务id”),该写操作对应的写操作数据中包括该版本信息,其中,任一写操作对应的写操作数据可以是写操作指令及需要写入的数据构成的整体。对应地,当该写操作数据被写入分布式文件系统200之后,分布式文件系统200的元数据信息发生变化,变化后的元数据信息中包括的版本信息与该写操作数据中的版本信息相同。

为了进一步确保在分布式文件系统200的内存230中最终加载得到的元数据信息为最新、最全的元数据信息,本实施例提供的文件系统启动方法还可以包括如图4所示的步骤s401-步骤s404四个步骤。

步骤s401,在从所述镜像文件211加载元数据信息之后,获取所述分布式文件系统200的内存230中当前的元数据信息所包括的版本信息作为第一版本信息,获取所述日志文件220中最新记录的写操作数据中携带的版本信息作为第二版本信息。

步骤s402,判断所述第一版本信息和所述第二版本信息是否相同。

在实际应用中,可能存在不能将镜像文件211中的全部元数据信息加载到内存230中,或是,由于时延问题导致镜像文件211中遗漏了少数元数据信息的情况。在从所述镜像文件211加载元数据信息到分布式文件系统200的内存230中后,该内存230中的元数据信息所包括的版本信息(即,第一版本信息)为内存230中当前加载的最新版本的元数据信息。而日志文件220中记录了所有未及时更新至磁盘210的写操作数据,因此,可以通过比较日志文件220中最新记录的写操作数据的版本信息(即,第二版本信息)与该第一版本信息是否相同,来判定分布式文件系统200的内存230中的元数据信息是否已加载到最新状态,如果相同,表示已经加载到最新状态,可以停止加载。如果不同,则表示尚未加载到最新状态,此时可以通过步骤403将该内存230中的元数据信息加载到最新状态。

步骤s403,当所述第一版本信息和所述第二版本信息不相同时,将所述日志文件220中携带有目标版本信息的写操作数据更新到所述分布式文件系统200的磁盘210中,再将所述分布式文件系统200的磁盘210中包括所述目标版本信息的元数据信息加载到所述分布式文件系统200的内存230中,其中,目标版本信息为比所述第一版本信息新的版本信息。

在本实施例中,以版本信息是事务号信息为例,分布式文件系统200给写操作分配的事务号是依照写操作的先后顺序依次递增的,即写操作的顺序越往后,其分配到的事务号越大。在此情况下,比第一版本信息新的版本信息,可以是比第一版本信息大的版本信息。

在步骤s403中,由于已经从所述镜像文件211加载了一部分元数据信息,只需从日志文件220中将没有更新的元数据信息所对应的写操作数据持久化存储到分布式文件系统200的磁盘210上,即将日志文件220中所携带的版本信息比第一版本信息新的写操作数据持久化存储到所述磁盘210上。如此,分布式文件系统200会基于写到磁盘210上的写操作数据对应地改变元数据信息,再从磁盘210中将所包括的版本信息比第一版本信息新的元数据信息加载到分布式文件系统200的内存230中,从而确保分布式文件系统200的内存230中的元数据信息已加载至最新状态。

通过上述设计,在分布式文件系统200的启动过程中,仅需将日志文件220中少部分数据信息存储到分布式文件系统200的磁盘210上,相对于将日志文件220中的全部数据信息存储到分布式文件系统200的磁盘210上所花费的时间短很多。

可选地,在实际应用中,为了避免因镜像文件211损坏导致无法系统无法启动的情况,本申请实施例提供的文件系统启动方法还可以包括以下步骤:

在所述分布式文件系统200启动时,判断所述镜像文件211是否可用;

当所述镜像文件211可用时,再执行从所述镜像文件211中加载元数据信息,用于启动所述分布式文件系统200的步骤;

当所述镜像文件211不可用时,将所述日志文件220中的写操作数据更新到所述分布式文件系统200的磁盘210中,再从所述分布式文件系统200的磁盘210加载元数据信息,用于启动所述分布式文件系统200。

其中,可以通过是否能读取所述镜像文件211中的数据来判断所述镜像文件211是否可用,若能够从所述镜像文件211中读取到数据,则判定该镜像文件211可用,否则判定该镜像文件211不可用。

可选地,在本实施例中,所述文件系统启动方法还可以包括如下步骤:

当所述分布式文件系统200成功启动时,或者当接收到读取数据信息的指令时,将所述日志文件220中的写操作数据更新到所述分布式文件系统200的磁盘210中。

通过上述设计,将元数据信息的加载和数据信息的加载两个过程分离,实现了上述两个过程之间的解耦合,即将内存230中的元数据信息实时地持久化存储到镜像文件211中,而日志文件220中的数据信息则可以不必实时地持久化存储到磁盘210上,从而避免了在元数据信息加载之前必须要先加载日志文件220中的数据信息,节省了分布式文件系统200启动的时间。

如图5所示,是本申请实施例提供的一种文件系统启动装置300的功能模块框图,应用于图2所示的分布式文件系统200。该文件系统启动装置300包括镜像文件211创建模块、元数据保存模块320及启动模块330。

其中,镜像文件211创建模块用于在分布式文件系统200的磁盘210中创建用于存储所述分布式文件系统200的元数据信息的镜像文件211。

在本实施例中,关于镜像文件211创建模块的描述具体可以参考对图3所示步骤s301的详细描述,即步骤s301可以由镜像文件211创建模块执行。

元数据保存模块320用于在分布式文件系统200的内存230中的元数据信息发生变化时,根据该内存230中的元数据信息更新镜像文件211中存储的元数据信息。

在本实施例中,关于元数据保存模块320的描述具体可参考对图3所示步骤s302的描述,即步骤s302可以由元数据保存模块320执行。

可选地,在本实施例中,所述分布式文件系统中预先创建有相对i/o线程独立的目标线程,所述元数据保存模块320在所述目标线程中运行。

可选地,在本实施例中,元数据信息可以包括版本信息,日志文件220用于缓存针对分布式文件系统200的写操作数据,每个写操作数据携带有该写操作数据的版本信息。其中,在写操作数据被写入后会导致元数据新发生变化,发生变化后的元数据信息所包括的版本信息与该写操作数据携带的版本信息相同。可选地,所述版本信息可以为事务号。

为了确保将内存230中的元数据信息加载至最新状态,本实施例提供的文件系统启动装置300还可以包括版本信息获取模块340和第一判断模块350。

其中,版本信息获取模块340用于在启动模块330从镜像文件211加载元数据信息之后,获取分布式文件系统200的内存230中当前的元数据信息所包括的版本信息作为第一版本信息,获取日志文件220中最新记录的写操作数据中携带的版本信息作为第二版本信息。

在本实施例中,关于版本信息获取模块340的描述具体可参考对图4所示步骤s401的详细描述,即步骤s401可以由版本信息获取模块340执行。

第一判断模块350用于判断所述第一版本信息和所述第二版本信息是否相同;当所述第一判断模块350确定所述第一版本信息和所述第二版本信息不相同时,将日志文件220中携带有目标版本信息的写操作数据存储到分布式文件系统200的磁盘210中,再将分布式文件系统200的磁盘210中包括所述目标版本信息的元数据信息加载到分布式文件系统200的内存230中,其中,所述目标版本信息为比所述第一版本信息新的版本信息。

在本实施例中,关于第一判断模块350的描述具体可参考对图4所示步骤s402和步骤s403的详细描述,即步骤s402和步骤s403可以由第一判断模块350执行。

可选地,在本实施例中,文件系统启动装置300还可以包括第二判断模块360。

第二判断模块360用于在分布式文件系统200启动时,从镜像文件211加载元数据信息,用于启动所述分布式文件系统200之前,判断镜像文件211是否可用;当镜像文件211可用时,再触发启动模块330从镜像文件211中加载元数据信息,用于启动分布式文件系统200;当镜像文件211不可用时,将日志文件220中的写操作数据存储到分布式文件系统200的磁盘210中,再从分布式文件系统200的磁盘210加载元数据信息,用于启动分布式文件系统200。

可选地,在本实施例中,文件系统启动装置300还可以包括数据加载模块370。

数据加载模块370用于当所述分布式文件系统200成功启动时,或者当接收到读取数据信息的指令时,将所述日志文件220中的写操作数据存储到所述分布式文件系统200的磁盘210中。

关于上述模块,具体可参考上述内容中对相关步骤的详细描述,在此不再详述。

综上所述,本申请实施例提供一种文件系统启动方法及装置,在分布式文件系统的磁盘中创建用于存储元数据信息的镜像文件,在分布式文件系统的内存中的元数据信息发生变化时,根据该内存中的元数据信息更新该镜像文件中的元数据信息。在分布式文件系统启动时,从该镜像文件加载元数据信息,用于启动分布式文件系统。如此,可以减少分布式文件系统的启动时长,加快分布式文件系统的启动速度。

以上所述仅为本申请的选定实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1