文件系统元数据的获取方法和系统与流程

文档序号:14554866阅读:267来源:国知局
文件系统元数据的获取方法和系统与流程

本发明涉及计算机领域,特别涉及一种文件系统元数据的获取方法和系统。



背景技术:

随着硬件技术的进步,应用冷冻电镜技术解析生物大分子的结构正在成为一个崭新的结构生物学研究方向。近年来,不少研究团队基于冷冻电镜技术在国际顶级学术期刊nature、science、cell等发表了数十篇高分辨率的关于蛋白质三维结构解析的成果,对生命科学的发展产生了重大影响,而冷冻电镜在这其中发挥着举足轻重的作用。

为了重构出高精度的分子结构,冷冻电镜需要拍摄大量二维的高分辨率图像,由于冷冻电镜在拍摄过程中很难避免诸如欠焦等问题,从而会导致丢失一些图像信息,为了避免有效信息的丢失,冷冻电镜通常会在不同的欠焦水平和不同的角度下拍摄大量高分辨率的二维图像加以合成,以弥补单一图像丢失的信息,最终利用所拍摄的大量的高分辨率的二维图像,通过相关的三维重构软件如relion等重构出高分辨率的分子结构。

然而,在重构三维分子结构的过程中,为了构建精确的高分辨率的三维分子结构,冷冻电镜需要从不同的角度拍摄大量的高分辨率的二维图像,细微的角度变化均需要拍摄大量的二维图像,在电镜满负荷工作的情况下,每天会产生数几十tb的电镜数据,以清华大学生命学院电镜平台titan为例,每台titan的拍摄速率7gb/分钟,即每分钟产生7gb左右的图像数据,这样一台电镜在一天中就能产生7gb/分钟*60分钟/小时*24小时=10.08tb的数据,从而导致每年将消耗高达4pb的存储容量。而这仅仅是一台电镜设备一年所采集的电镜数据,国内众多科研机构通常都维护着若干台的电镜设备,如清华大学目前就维护着至少3台电镜设备,每年产生的电镜数据在8pb以上,面对如此海量的电镜数据,如何设计合理的目录结构,以便于用户能够简洁方便的管理自己采集的电镜数据,就显的尤为重要。

目前,比较推崇的一种电镜数据目录组织原则是以一种二元组的方式来对用户采集的电镜数据进行目录组织,该二元组为(电镜设备id,采集实践_用户名),与该二元组对应的目录结构组织方式如图1所示,在图1中,最顶层目录“/shareem”通常是底层存储系统,如gpfs、lustre等文件系统的目录挂载点,在该挂载点下,设置若干个子目录,对应某台电镜所产生的数据,例如,对于/shareem下的子目录titand3172,其下存放的是名称为titand3172的电镜所产生的所有电镜数据,而目录/shareem/titand3172/20140613_zhangyanqing存放的是用户zhangyanqing在2014年6月13日使用电镜titand3172采集的电镜数据。

为了能够及时获取电镜存储系统的消耗情况,系统管理员通常需要在固定的时间周期,如每小时,每天,每周等,对存储系统中每个用户的存储空间使用情况进行统计分析,以便于系统管理员能够及时发现异常情况,如某天的存储消耗量过大或者过小,某个用户占用了过多的存储空间,总存储空间低于阈值等,系统管理员一旦发现存储系统中出现异常情况时,会采取相应的处理措施,以保证电镜存储系统能够稳定高效的运行。

传统的获取电镜存储系统消耗情况的方法通过操作系统自带的命令工具,如linux系统自带的df命令来获取存取系统当前存储空间的使用量和剩余量,但是无法获取每个用户的具体消耗量。若想或者用户每天的消耗量,则需要组合使用其它的命令行工具,如linux的find命令和stat命令,对整个存储系统的所有文件进行扫描后才能够得到每个用户的具体使用情况,而这会引发另一个问题:当存储系统中的文件数量非常巨大时,例如在千万级别,则需要耗时相当长的时间才能够获取最终的每个用户的统计数据。以清华大学大学生物计算平台管理的一个电镜存储系统shareem为例,其总容量为2.5p,其中包含了约2400万个与电镜相关的数据文件,shareem总共由4个io节点构成,通过iozone的测试发现,该存储系统的iops(input/outputoperationspersecond)约为4000次/秒,即每秒中能够够在shareem上进行约4000次的io操作,但这是4个io节点聚合吞吐量,平均每个io节点的iops为1000次/秒,因此,若对shareem上的2400万个电镜数据进行一次用户空间使用统计,由于find操作和stat操作存在严格的先后顺序,即必须通过find操作找出所有的文件路径后,才能对每个文件进行stat操作获取文件的元数据信息,因此,1个文件的分析需要进行2次的io操作,2400万个文件,总共需要进行4800万次io操作,而完成4800万次io操作,以每秒进行1000次io操作的速度进行扫描,总共耗时48000秒,即总共耗时约13个小时左右。

事实上,由于find命令和stat命令是单进程执行的,加上运行find命令和stat命令所在的主机上其它进程对于shareem操作的影响,在扫描

shareem时,通常很难以1000次/秒的iops速度进行扫描,实际的测试发现,使用find命令和stat命令进行shareem扫描时,iops只能达到400次/秒左右,一次的shareem扫描,需要耗时30个小时以上,而系统管理员通常无法接受30个小时的扫描时间,原因在于当发现异常情况时,往往已经错过了最佳的补救时间,因此,如何实现对电镜数据文件元数据的快速扫描,对于电镜数据的管理的尤为重要。



技术实现要素:

本发明提供了一种文件系统元数据的获取方法和系统,可以实现对文件系统数据文件元数据的快速扫描。

本发明提供一种文件系统元数据的获取方法,包括:

步骤a:提取第一元数据信息文件中每个文件的全路径信息,生成第一全路径信息集合,第一元数据信息文件用于保存文件系统数据文件的元数据信息;启动至少一个并行进程,获取文件系统中所有数据文件的全路径信息,生成第二全路径信息集合;

步骤b:对第二全路径信息集合和第一全路径信息集合做差集运算,得到待增全路径信息集合;对第一全路径信息集合和第二全路径信息集合做差集运算,得到待删全路径信息集合;

步骤c:获取待增全路径信息集合中的每个文件路径相关的元数据信息,并将该元数据信息写入第一元数据信息文件;同时删除第一元数据信息文件中待删全路径信息集合相关的元数据信息。

本发明提供一种文件系统元数据的获取系统,包括:

路径获取模块:提取第一元数据信息文件中每个文件的全路径信息,生成第一全路径信息集合,第一元数据信息文件用于保存文件系统数据文件的元数据信息;启动至少一个并行进程,获取文件系统中所有数据文件的全路径信息,生成第二全路径信息集合;

待增文件和待删文件计算模块:对第二全路径信息集合和第一全路径信息集合做差集运算,得到待增全路径信息集合;对第一全路径信息集合和第二全路径信息集合做差集运算,得到待删全路径信息集合;

元数据信息文件更新模块:获取待增全路径信息集合中的每个文件路径相关的元数据信息,并将元数据信息写入第一元数据信息文件;同时删除第一元数据信息文件中待删全路径信息集合相关的元数据信息。

本申请根据第一元数据信息文件(记为om文件)中保存的历史元数据信息和文件系统系统最新的数据文件路径信息,通过比较两者的信息,确定om文件中需要补入的新增元数据信息和om文件需要删除的元数据信息,以增量更新的方式更新om文件,极大地减少了更新om文件所需的元数据获取操作,从而节省更新om文件所需时间。此外,将单进程处理更改为多进程并行处理,进一步提高了运算效率,节省更新om文件所需时间。

附图说明

图1为本发明电镜数据存储的二元组文件名称对应的目录结构示意图;

图2为本发明文件系统元数据的获取方法流程图;

图3为图2中步骤a包含的一个实施例;

图4为图3中步骤a-2的一个实施例;

图5为图4中步骤a-22的一个实施例;

图6为本发明文件系统元数据的获取系统结构图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用来区别类似的对象,而不必用于描述特定的顺序和先后次序。应该理解,这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。

文件系统是系统软件,存储系统的硬件设备通过文件系统进行管理。需要指出的是,本申请的文件系统包括并行文件系统和非并行文件系统。

如图2所示,本发明提供一种文件系统元数据的获取方法,包括以下步骤:

步骤a(s101):提取第一元数据信息文件中每个文件的全路径信息,生成第一全路径信息集合,第一元数据信息文件用于保存文件系统数据文件的元数据信息;启动至少一个并行进程,获取文件系统中所有数据文件的全路径信息,生成第二全路径信息集合。

假设:将第一元数据信息文件记为om文件,将第一全路径信息集合标记为mlist;将第二全路径信息集合标记为lp。

在步骤a中,通过操作系统命令,如linux系统的find命令获取数据文件的全路径信息,也可以通过主流编程语言,如python、java等的api接口获取数据文件的全路径信息。

步骤b(s102):对第二全路径信息集合和第一全路径信息集合做差集运算,得到待增全路径信息集合;对第一全路径信息集合和第二全路径信息集合做差集运算,得到待删全路径信息集合。

在步骤b中,如果将待增全路径信息集合标记为ncl,将待删全路径信息集合标记为dl,则ncl=lp–mlist,dl=mlist–lp。

步骤c(s103):获取待增全路径信息集合中的每个文件路径相关的元数据信息,并将该元数据信息写入第一元数据信息文件;同时删除第一元数据信息文件中待删全路径信息集合相关的元数据信息。

在本申请中第一元数据信息文件om文件,保存每个数据文件的元数据信息,其中元数据信息包括文件全路径信息和其他信息,将文件全路径信息标记为f,则其他信息包括:最近修改时间(标记为m)、最近访问时间(标记为a)、最近改变时间(标记为c)、文件所属用户(标记为u)、文件所属用户组(标记为g)、和/或文件大小(标记为s)。

进一步地,在om文件中按照预设的元数据格式存储每一个文件的元数据信息;预设的元数据格式可以为:

m#a#c#f#u#g#s

其中,#表示第一分隔符,第一分隔符也可以是其他分隔符,每两个元数据信息之间的分隔符与第一分隔符不同,例如当第一分隔符为“#”时,元数据信息之间的分隔符可以为“,”。

假设:当前om文件包含如下元数据信息:

2017-05-25-02:44:47#2017-05-25-02:44:47#2017-05-25-02:44:47#/shareem/t1/xxx11_yyy11/f1#hzhou#lilab#775,

2017-05-25-02:44:47#2017-05-25-02:44:47#2017-05-25-02:44:47#/shareem/t1/xxx11_yyy11/ff1#hzhou#lilab#775,

2017-05-25-02:44:47#2017-05-25-02:44:47#2017-05-25-02:44:47#/shareem/t1/xxx41_yyy41/f41#hzhou#lilab#775,

则,根据图1的步骤a,可以得到:

mlist=(/shareem/t1/xxx11_yyy11/f1,

/shareem/t1/xxx11_yyy11/ff1,

/shareem/t1/xxx41_yyy41/f1)

进一步假设,当前电镜文件系统的只有一个挂载点为/shareem,为方便描述,假设就1台电镜,标记为t1,对应/shareem下的目录t1。当前t1下包含2个电镜数据目录:xxx11_yyy11,xxx21_yyy21,其中xxx11_yyy11下有普通文件f1,xxx21_yyy21下有普通文件f2。

即,f1的文件全路径为:/shareem/t1/xxx11_yyy11/f1,

f2的文件全路径为:/shareem/t1/xxx21_yyy21/f2。

则通过图1中的步骤a,可得:

lp=(/shareem/t1/xxx11_yyy11/f1,

/shareem/t1/xxx21_yyy21/f2)。

基于lp和mlist,根据步骤b可得:

待删全路径信息集合dl=(/shareem/t1/xxx11_yyy11/ff1,

/shareem/t1/xxx41_yyy41/f1)

待增全路径信息集合ncl=(/shareem/t1/xxx21_yyy21/f2)

继续执行步骤c,即可更新om文件。

本申请图2的方法根据第一元数据信息文件om文件中保存的历史元数据信息和文件系统系统最新的数据文件路径信息,通过比较两者的信息,确定om文件中需要补入的新增元数据信息和om文件需要删除的元数据信息,以增量更新的方式更新om文件,极大地减少了更新om文件所需的元数据获取操作,从而节省更新om文件所需时间。此外,将单进程处理更改为多进程并行处理,进一步提高了运算效率,节省更新om文件所需时间。

进一步地,图3给出了图2步骤a中“启动至少一个并行进程,获取文件系统中所有数据文件的全路径信息,生成第二全路径信息集合”的一个实施例,包括以下步骤:

步骤a-1(s201):启动m个进程,获取文件系统中所有数据文件的目录,生成第二目录集合。

将第二目录集合标记为nd,根据上述当前电镜文件系统的假设,可得:

nd=(/shareem/t1/xxx11_yyy11,

/shareem/t1/xxx21_yyy21)。

步骤a-2(s202):将第二目录集合(nd)中的目录分组,生成第二目录分组集合,第二目录分组集合包括n个目录分组gi(i=1,2,...,n)。

将第二目录分组集合标记为g,g=(gi),(i=1,2,...,n)。

需要说明的是在步骤a-2之前,g为空集。

步骤a-3(s203):启动n个进程用于扫描n个目录分组中的文件路径信息,一个进程对应一个目录分组,得到第二目录集合对应的第二全路径信息集合。

其中,m、n的取值与文件系统剩余iops和进程平均iops相关。

可以令m(n)=取整(当前文件系统剩余iops/进程平均iops)。

假设:当前文件系统剩余的iops为8000次/秒,单进程执行步骤a-1能达到400次/秒,那么根据公式可知,m取20。

假设:当前文件系统剩余的iops为8000次/秒,单进程执行步骤a-3能达到200次/秒,那么根据公式可知,n取40。

如此,可利用文件系统高iops特性,可实现对目录和路径的快速扫描。

进一步地,图2步骤a还包括:提取第一全路径信息集合中的目录信息得到第一目录集合。

或者,将第一目录集合标记为hd。

根据以上mlist的数据可知,hd=(/shareem/t1/xxx11_yyy11/,

/shareem/t1/xxx41_yyy41/)。

基于hd,图3的步骤a-2还可以扩展如图4所示:

步骤a-21(s301):对第一目录集合和第二目录集合做交集运算,得到第三目录集合,对第二目录集合和第一目录集合做差集运算,得到第四目录集合。

如果将第三目录集合标记为fd,将第三目录集合标记为id,则fd=hd∩nd,id=nd-hd,根据公式可知,fd为hd中的待删除文件的目录,id为新增文件的目录。

根据hd和nd的数据可知,fd=(/shareem/t1/xxx11_yyy11/),id=

(/shareem/t1/xxx21_yyy21/)。

步骤a-22(s302):将第三目录集合(fd)中的目录平均分配生成第二目录分组集合(g),第二目录分组集合(g)包括n个目录分组gi(i=1,2,...,n)。

步骤a-23(s303):将第四目录集合中目录随机分配到第二目录分组集合(g)中。

图4与图3不同之处在于,将hd细分为fd和id,同时对fd和id执行不同的分组策略,以尽量实现目录分组均衡,节省扫描时间。

进一步地,图5给出了图4步骤a-22的一个具体实施例,包括fd目录分配的一个具体算法:

步骤a-221(s401):计算n个进程中每个进程平均扫描的文件数量a,a=t/n;t为第一全路径信息集合中的元素个数。

步骤a-222(s402):初始化第二目录分组集合(g)为空,第二目录分组集合包括n个目录分组gi(i=1,2,...,n)。

步骤a-223(s403):遍历第三目录集合(fd)中的每个目录fdj,对每个目录fdj执行步骤a-224,直到第三目录集合(fd)中所有的目录分配完成为止。

步骤a-224(s404):对于每一个fdj,遍历第二目录分组集合,若gi需满足条件:gi中所有目录包含的文件总数小于a,则将fdj分配给目录分组gi,同时结束本次fdj对应的目录分组操作,返回步骤a-223。

图5是基于文件总数均衡分组策略对fd进行分组,使得每个目录分组负担更均衡,整体上更能节省扫描时间。

进一步,基于元数据格式,步骤a可以将om文件转换为字典(python中的一种数据格式),具体转换方法包括:提取om文件中的f,生成第一全路径信息集合(mlist),以om文件中的元素f为字典的键(key),以除f以外的其他信息为字典键(key)对应的值(value)构建字典变量mdict;令mdict[f]=(除f以外的其他信息)。

例如:mdict[f]=(m,a,c,u,g,s)。

根据对历史om文件的数据的假设,可知:

mdict[/shareem/t1/xxx11_yyy11/f1]=

(2017-05-25-02:44:47,2017-05-25-02:44:47,2017-05-25-02:44:47,hzhou,lilab,775)

mdict[/shareem/t1/xxx11_yyy11/ff1]=

(2017-05-25-02:44:47,2017-05-25-02:44:47,2017-05-25-02:44:47,hzhou,lilab,775)

mdict[/shareem/t1/xxx41_yyy41/f1]=

(2017-05-25-02:44:47,2017-05-25-02:44:47,2017-05-25-02:44:47,hzhou,lilab,775)

进一步地,基于mdict字典,步骤c可拓展为:

步骤c-1:更新mdict:删除mdict中的特定键(key)对应的元素,特定键(key)为删除全路径信息集合(dl)中的元素。

因dl=(/shareem/t1/xxx11_yyy11/ff1,/shareem/t1/xxx41_yyy41/f1),所以执行delmdict[‘/shareem/t1/xxx11_yyy11/ff1’,‘/shareem/t1/xxx41_yyy41/f1’],删除

mdict[/shareem/t1/xxx11_yyy11/ff1]=

(2017-05-25-02:44:47,2017-05-25-02:44:47,2017-05-25-02:44:47,hzhou,lilab,775)

mdict[/shareem/t1/xxx41_yyy41/f1]=

(2017-05-25-02:44:47,2017-05-25-02:44:47,2017-05-25-02:44:47,hzhou,lilab,775)。

步骤c-2:将更新后的mdict中的元数据信息转换格式,写入第一元数据信息文件,并替换第一元数据信息文件的原内容。

例如:将更新后的mdict中的元数据信息转换为预设的元数据格式,以覆盖模式一次写入第一元数据信息文件;或者第一次以覆盖模式写入第一元数据信息文件,第一次以后以追加模式写入第一元数据信息文件。

步骤c-3:获取待增全路径信息集合中的每个文件路径的元数据信息,并将该元数据信息追加写入第一元数据信息文件。

通过操作系统命令,如linux系统的stat命令获取数据文件的元数据信息,也可以通过主流编程语言,如python、java等的api接口获取数据文件的元数据信息。

例如:在linux系统中,可以对新增全路径信息集合(ncl)中的每个文件路径做stat操作获取元数据信息,将得到的元数据信息以追加模式写入第一元数据信息文件。

对于如图1所示,规则结构的文件系统,步骤a,扫描数据文件的目录信息和路径信息时,可以指定目录深度或路径深度,以限定扫描范围,节省处理时间。

如图6所示,本发明还包括一种文件系统元数据的获取系统,该系统包括路径获取模块、待增文件和待删文件计算模块和元数据信息文件更新模块。

路径获取模块:提取第一元数据信息文件中每个文件的全路径信息,生成第一全路径信息集合,第一元数据信息文件用于保存文件系统数据文件的元数据信息;启动至少一个并行进程,获取文件系统中所有数据文件的全路径信息,生成第二全路径信息集合。

待增文件和待删文件计算模块:对第二全路径信息集合和第一全路径信息集合做差集运算,得到待增全路径信息集合;对第一全路径信息集合和第二全路径信息集合做差集运算,得到待删全路径信息集合。

元数据信息文件更新模块:获取待增全路径信息集合中的每个文件路径相关的元数据信息,并将元数据信息写入第一元数据信息文件;同时删除第一元数据信息文件中待删全路径信息集合相关的元数据信息。

在图6的路径获取模块中,启动至少一个并行进程,获取文件系统中所有数据文件的全路径信息,生成第二全路径信息集合包括:

目录获取模块:启动m个进程,获取文件系统中所有数据文件的目录,生成第二目录集合;

目录分组模块:将第二目录集合中的目录分组,生成第二目录分组集合,第二目录分组集合包括n个目录分组gi,其中i=1,2,...,n;

路径并行搜索模块:启动n个进程用于扫描n个目录分组中的文件路径信息,一个进程对应一个目录分组,得到第二目录集合对应的第二全路径信息集合。

进一步地,路径获取模块还包括:提取第一全路径信息集合中的目录信息得到第一目录集合;

目录分组模块包括:

第三和第四目录集合计算模块:对第一目录集合和第二目录集合做交集运算,得到第三目录集合,对第二目录集合和第一目录集合做差集运算,得到第四目录集合;

第三目录集合分组模块:将第三目录集合中的目录平均分配生成第二目录分组集合;

第四目录集合分组模块:将第四目录集合中目录随机分配到第二目录分组集合中。

进一步地,第三目录集合分组模块包括:

进程文件计算模块:计算n个进程中每个进程平均扫描的文件数量a,a=t/n;t为第一全路径信息集合中的元素个数;

第二目录分组集合初始化模块:初始化第二目录分组集合为空,第二目录分组集合包括n个目录分组gi,其中i=1,2,...,n;

第三目录集合遍历模块:遍历第三目录集合中的每个目录fdj,对每个目录fdj执行目录均衡分配模块,直到第三目录集合中所有的目录分配完成为止;

目录均衡分配模块:对于每一个fdj,遍历第二目录分组集合,若gi需满足条件:gi中所有目录包含的文件总数小于a,则将fdj分配给目录分组gi,同时结束本次fdj对应的目录分组操作,返回第三目录集合遍历模块。

进一步地,第一元数据信息文件中保存的每一个文件的元数据信息包括f和除f以外的其他信息,f表示文件全路径信息;

路径获取模块还包括:以第一全路径信息集合中的元素f为字典的键,以除f以外的其他信息为字典键对应的值构建字典变量mdict;

元数据信息文件更新模块包括:

字典更新模块:删除mdict中的特定键对应的元素,特定键为待删全路径信息集合中的元素;

元数据信息文件替换模块:将更新后的mdict中的元数据信息转换格式,写入第一元数据信息文件,并替换第一元数据信息文件的原内容;

元数据信息文件新增模块:获取待增全路径信息集合中的每个文件路径的元数据信息,并将元数据信息追加写入第一元数据信息文件。

需要说明的是,本发明文件系统元数据的获取系统的实施例,与文件系统元数据的获取方法的实施例原理相同,相关之处可以互相参照。

此外,本申请的方法和系统的应用对象不仅限于电镜数据的文件系统,对于其他海量数据存储管理领域一样适用,如气象数据的文件系统,卫星数据的文件系统,地震数据的文件系统等。

以上所述仅为本发明的较佳实施例而已,并不用以限定本发明的包含范围,凡在本发明技术方案的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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