实现存储***自动精简的方法
技术领域
本发明涉及计算机应用技术领域,特别是涉及一种实现存储***自动精简的方法。
背景技术
自动精简配置是一种容量分配技术,它不是一次性将存储空间分配给应用,而是根据应用需求的增长,逐渐增加分配给应用的存储空间。传统的自动精简配置技术给操作***提供大容量的虚拟驱动器。虚拟驱动器的实际容量并不大,但是虚拟驱动器向操作***报其拥有告一个更大的容量。操作***在该虚拟驱动器上可以格式化一个更大容量的文件***。在自动精简配置存储***中,只有当使用容量的增加时才需要增加物理资源。这种方式延迟了物理资源部署时间,提高了设备利用率。
自动精简配置技术的核心是“欺骗”操作***。操作***无法区分虚拟磁盘容量或实际磁盘容量,因此需要虚拟驱动器监控操作***的IO(Input/Output,输入输出)请求,并在实际使用资源接近阈值的时候扩展存储空间。为了实现该目的,现有的自动精简配置技术需要管理存储资源池,监控***IO请求,并在空间不足时分配对应的存储资源。在有些***中,还实现了资源的回收。现有的专利包括自动精简配置资源分配和管理方面的,如“一种存储***自动精简配置存储池及组织管理的方法”和“一种实现存储***自动精简配置异步全额分配的方法”。以及***实现方式方面的,如“实现存储***自动精简配置动态扩容的***及方法”。
文献1“申请公开号是CN103020201A的中国发明专利”公开了一种存储***自动精简配置存储池及组织管理的方法。该方法用于存储***中,提供一种对自动精简配置存储池空间进行管理和操作的***架构,将存储池元数据信息单独存储在元数据设备中,让存储池独占存储池设备,将存储池设备成为数据设备,重新定义存储池元数据信息为包含元数据设备信息和数据设备信息的存储池元数据。专利所述方法存在以下3个主要问题:第一,存储池独占存储设备,要求存储池空间固定,这就需要一次性将物理设备全部添加至存储池中,从而造成物理资源的空闲与浪费,不能动态增减存储池,这是该专利的主要技术问题;第二,存储池元数据所在元数据设备存在单点故障,可用性不高;第三,由于是对存储池进行自动精简,当需要扩容时需要专业人员进行操作,且扩容后得到的是块设备,仍然需要进一步格式化为特定文件***,过程繁冗。
文献2“申请公开号是CN103744622A的中国发明专利”公开了一种实现存储***自动精简配置异步全额分配的方法。该方法包括存储池和全额分配卷,存储池空间占用实际物理空间,全额分配卷是通过虚拟映射提供给操作***的虚拟驱动器,并占用实际物理空间,由存储池向全额分配卷提供存储空间,用户不用等全额分配卷的实际存储空间完全分配完成,就可以开始使用该全额分配卷,并根据用户指定的逻辑卷容量大小,一次性将存储池空间对应的空间容量异步的分配给全额分配卷。专利所述方法存在以下3个主要问题:第一,由于动态分配建立在全额分配卷之上,要求存储池空间固定,这就需要一次性将物理设备全部添加至存储池中,从而造成物理资源的空闲与浪费,不能动态增减存储池;第二,通过在存储池和用户逻辑卷之间增加全额分配卷以实现自动精简,适应性不强;第三,资源池与全额分配卷的设定将使用者与管理者隔离,当用户空间不足时,只能从全额分配卷中扩容,而资源池空间大小扩容只能由管理者完成,这使得自动精简过程更加复杂。
文献3“授权公告号是CN102855093B的中国发明专利”公开了一种实现存储***自动精简配置动态扩容的***及方法,该***包括:扩容信息获取模块,用于获得用户传入的扩容命令和扩容大小,并传给扩容信息解析模块;扩容信息解析模块,用于将获得的扩容命令细分为扩容挂起命令和扩容恢复命令,并传给IO重定向层扩容模块;IO重定向层扩容模块,用于向自动精简配置扩容模块发送扩容挂起命令和扩容大小及向存储池恢复模块发送扩容恢复命令;自动精简配置扩容模块,用于根据接收的扩容大小对存储***的存储池进行元数据扩容操作,并向存储池恢复模块发送元数据;存储池恢复模块,用于根据接收的元数据和扩容恢复命令重新激活存储池。专利所述***及方法存在以下2个主要问题:第一,存储空间一旦设定变无法更改,这导致存储空间无法动态扩容,同时也造成了存储空间中未使用物理设备资源的浪费,这是该方法的主要问题;第二,在对用户使用的逻辑卷进行扩容时,需要先扩容挂起,再扩容恢复,这导致存储服务在扩容时不可用。
现有的自动精简配置技术主要实现在块设备层,通过虚拟更大的磁盘空间“欺骗”操作***,并随着实际使用空间增长逐步增加存储资源。现有的自动精简配置***主要分为存储资源池和多个精简卷。为了记录资源的使用情况,自动精简配置管理***需要保存额外的元数据,确保资源按需分配,并且保证多个精简卷间无资源使用冲突。
现有的方式主要实现在块设备层,主要存在以下缺点:1.资源的使用者(操作***)和管理者(自动精简配置***)分离,需要额外的数据和机制保证资源可用。2.操作***不知道块设备层可用空间相关信息,如使用了尚未分配或映射的存储空间,将造成严重的错误。3.自动精简配置技术用较小的存储空间虚拟更大的存储空间,操作***使用时对逻辑地址访问和使用并非完全连续,所以需要将虚拟驱动器的逻辑地址和实际物理地址进行映射。4.现有自动精简配置技术容易实现空间的扩展,但是难以实现无用空间的识别和回收。
发明内容
为了克服现有存储***自动精简方法实用性差的不足,本发明提供一种实现存储***自动精简的方法。该方法统一资源的使用者和管理者,通过在文件***元数据中增加控制信息,确保数据存储的按需分配,并且保证数据不会存放到未分配空间,结合云存储***提供的API,实现在线存储空间的扩容和使用,达到自动精简配置的目的。重新定义文件***元数据信息,使其包含设备信息和地址映射信息;在文件***中将逻辑空间分为已分配空间和未分配空间,并进行地址映射管理;通过监测读写过程,确保读写操作不会访问到未分配空间。本发明能够方便地管理存储空间,实现存储空间的动态伸缩,实用性强。
本发明解决其技术问题所采用的技术方案是:一种实现存储***自动精简的方法,其特点是采用以下步骤:
文件***元数据管理模块用于定义元数据的布局及格式。通过所述元数据管理多个块存储设备,并将多个块存储设备组织为统一的文件***向外提供服务。操作***及应用程序调用统一的文件***,统一的文件***提供IO读写方法,并在其中实现IO读写监测模块。IO读写监测模块通过监测IO写请求,给IO写操作分配可用的block空间。在此监测过程中判断是否有可用的block空间,本次分配的block空间是否已达到了预警的要求。存储空间监测模块和IO读写监测模块共同处理block空间不足的情况。在使用空间达到全部可使用空间预先设定的阈值后,IO监测模块向存储空间监测模块发送消息,存储空间监测模块根据预定的策略,向用户发送警报信息或者通过云存储或者SAN存储区域网络提供的接口自动申请块存储资源,并利用存储空间伸缩调整模块自动对统一的文件***进行扩容。统一的文件***伸缩调整模块通过修改文件***的元数据,达到文件***扩容的功能,在统一的文件***伸缩调整虚拟空间的大小。
所述文件***由多个不同的Block Group组成,第一个Block group中保存超级块信息,其中保存Block Group数量和位置信息。超级块也在若干其他block group中进行备份。每个BlockGroup包括Group Descriptors,数据块bitmap,inode bitmap,以及存放具体数据的inode表和data表。其中Group Descriptors包括组信息组类型、设备信息、下一个组的位置、预警flag及其他常规信息。
Group type分为normal和dummy两种。Dummy block group仅记录虚拟空间的大小,其中空间大小使用Group info中的块大小和数量确定,但是其中并不保存inode和data的各种信息。根据预定的预警阈值,当使用到某些块时说明已用空间与可用空间比例达到所述的预警阈值,需要通知管理员处理或自动申请存储资源并添加。
根据每个块的空间大小,每个block group都保存了本block group的块大小和数量,并保存了逻辑上相邻的下一个block group的位置。其中最后一个block group保存虚拟空间的信息,其中仅有块大小和块数量有效,但是并无实际的存储空间。该blockgroup的next block group为空。
多个磁盘上部署该文件***与单个磁盘类似,文件***由多个block group组织而成。最后一个block group的next block group为空。前面的磁盘中block group依次指向后续的block group,这些block group组成的逻辑空间是连续的。
当需要动态向所述文件***中增加存储设备时,首先在新的磁盘上分配blockgroup,最后一个block group为dummy block group。读取旧的dummy block group信息,根据原有虚拟空间减去新增可用空间得到新的dummy block group的信息。找到原来文件***的倒数第二块block group,将其next指针指向新磁盘的第一个blockgroup。根据增加的block group数量修改超级块中的相关信息。根据可用空间、已用空间以及预警阈值,调整alert block group的位置。清除旧的alert block group的alertflag,并根据计算所得结果,找到新的阈值所在block group,并设置其alert flag。
在向***中增加存储设备完成后,需要向该***中增加文件***大小。增加文件***大小仅增加虚拟空间的大小,所以只需修改dummy block group的相关信息,增加虚拟block数量即可。
在文件***向使用者提供服务前,需要设定预警用的alert block group,并设置对应的block group的alert flag。
在使用者扩展文件或写文件时,需要分配空间时,首先定位文件inode所在的blockgroup,判断其上是否有足够的空闲块。如果有空闲块,判断是否是普通的block group。如果是普通的block group,则直接分配空间写入数据。如果是alert block group,说明可用空间数量不足,需要发送alert请求或自动增加设备随后再分配block进行读写。如果当前block group没有足够的空间,则移到下一个block group。判断该group是否是dummy group。如果不是判断该group是否有足够的空闲块。如果是dummy group说明目前没有可用的空间,需要发送alert或自动增加设备。
本发明的有益效果是:该方法统一资源的使用者和管理者,通过在文件***元数据中增加控制信息,确保数据存储的按需分配,并且保证数据不会存放到未分配空间,结合云存储***提供的API,实现在线存储空间的扩容和使用,达到自动精简配置的目的。重新定义文件***元数据信息,使其包含设备信息和地址映射信息;在文件***中将逻辑空间分为已分配空间和未分配空间,并进行地址映射管理;通过监测读写过程,确保读写操作不会访问到未分配空间。本发明能够方便地管理存储空间,实现存储空间的动态伸缩,实用性强。
下面结合附图和具体实施方式对本发明作详细说明。
附图说明
图1是本发明方法中存储***模块构成图。
图2是本发明方法中文件***元数据管理模块元数据结构图。
图3是本发明方法中文件***中普通Block Group结构图。
图4是本发明方法中文件***中预警Block Group结构图。
图5是本发明方法中文件***中空Block Group结构图。
图6是本发明方法中文件***在单个磁盘上的布局示意图。
图7是本发明方法中文件***在多个磁盘上的布局示意图。
图8是本发明方法中存储空间伸缩调整的流程图。
图9是本发明方法中文件***伸缩调整的流程图。
图10是本发明方法中存储空间监测模块的流程图。
图11是本发明方法中读写模块进行读写监测和空间监测的流程图。
图12是本发明方法中各种术语关系及说明图。
具体实施方式
参照图1-12。本发明实现存储***自动精简的方法具体步骤如下:
本发明方法所用***包括:(1)文件***元数据管理模块;(2)IO读写监测模块,其中IO指的是Input/Output,输入与输出;(3)存储空间监测模块;(4)文件***伸缩调整模块;(5)存储空间伸缩调整模块。各部分的作用如下:
文件***元数据管理模块,提供文件和存储设备元数据组织形式;
IO读写监测模块监测IO读写请求,根据文件***元数据管理模块中提供的元数据信息查找可用块并存储数据;
存储空间监测模块监测空间使用情况,如空间使用率达到预定的阈值,通过各种方式通知管理员增加存储空间,或通过预定的命令自动增加存储空间;
文件***伸缩调整模块提供增加,删除,修改文件***元数据的方法,可实现文件***逻辑空间的增删;
存储空间伸缩调整模块提供增加,删除,修改文件***中地址映射元数据的方法,可实现文件***管理的物理空间的增删。
本发明公开的一种自动精简配置存储***的方法,该方法通过在文件***中保存管理存储设备、物理空间和逻辑空间所需的元数据,向操作***提供一个更大空间的文件***。该文件***的实际可用空间小于物理可用空间,当实际空间使用超过一定阈值后,该***可向用户报警,也可根据预定的策略和命令自动向其他的存储***申请块存储资源并添加到***中。
参照图12。文件***使用的多个磁盘容量之和是物理空间。文件***向操作***报告的空间大小是逻辑空间,其中包括已分配存储资源的可用空间,和未分配存储资源的虚拟空间。可用空间应小于等于物理空间。在开始使用文件***存储数据后,已存储数据所占空间为已用空间。预警值表示用空间占可用空间达到特定比例后开始报警提示用户增加空间。本发明中提出的文件***伸缩是指调整虚拟空间大小。存储空间伸缩调整是调整可用空间的大小。
参照图1。该***中文件***元数据管理模块是所有其他功能的基础,该模块定义了元数据的布局及格式。通过这些元数据可以管理多个块存储设备,并将其组织为统一的文件***向外提供服务。操作***及应用程序通过***调用使用本发明所涉及的文件***,文件***提供IO读写方法,并在其中实现IO读写监测模块。IO读写监测模块通过监测IO写请求,给IO写操作分配可用的block空间。在此过程中判断是否有可用的block空间,本次分配的block空间是否已达到了预警的要求。存储空间监测模块主要是和IO读写监测模块共同处理block空间不足的情况。在使用空间达到全部可使用空间的一定比例(预先设定的阈值,如80%)后,IO监测模块向存储空间监测模块发送消息,存储空间监测模块根据预定的策略,向用户发送警报信息或者通过其他存储***(云存储,SAN存储区域网络等)提供的接口自动申请块存储资源,并利用存储空间伸缩调整模块自动对本***进行扩容。文件***伸缩调整模块是通过修改文件***的元数据,达到文件***扩容的功能,在此文件***伸缩调整虚拟空间的大小。如本来文件***大小为100GB,在不增加额外存储设备的前提下,通过调整操作虚拟空间的大小,操作***可看到文件***大小为200GB。存储空间伸缩调整模块是通过修改文件***的元数据,达到增加和删除可用空间的目的。
参照图2。该文件***由多个不同的Block Group组成,第一个Block group中保存超级块信息,其中保存Block Group数量和位置信息。超级块也在若干其他blockgroup中进行备份。每个BlockGroup包括Group Descriptors,数据块bitmap,inode bitmap,以及存放具体数据的inode表和data表。其中Group Descriptors包括组信息(块大小及数量等),组类型,设备信息,下一个组的位置,预警flag及其他常规信息。
参照图3、4和5。Group type分为normal和dummy两种。Dummy block group仅记录虚拟空间的大小,其中空间大小使用Group info中的块大小和数量确定,但是其中并不保存inode和data的各种信息。根据预定的预警阈值,当使用到某些块时说明已用空间与可用空间比例达到该阈值,需要通知管理员处理或自动申请存储资源并添加。
参照图6。根据每个块的空间大小,每个block group都保存了本block group的块大小和数量,并保存了逻辑上相邻的下一个block group的位置。其中最后一个blockgroup保存虚拟空间的信息,其中仅有块大小和块数量有效,但是并无实际的存储空间。该block group的next block group为空。
参照图7。多个磁盘上部署该文件***与单个磁盘的例子类似,文件***由多个block group组织而成。最后一个block group的next block group为空。前面的磁盘中block group依次指向后续的block group,这些block group组成的逻辑空间是连续的。
参照图8。当需要动态向该***中增加存储设备时,首先在新的磁盘上分配blockgroup,最后一个block group为dummy block group。读取旧的dummy block group信息,根据原有虚拟空间减去新增可用空间得到新的dummy block group的信息。找到原来文件***的倒数第二块block group,将其next指针指向新磁盘的第一个blockgroup。根据增加的block group数量修改超级块中的相关信息。根据可用空间、已用空间以及预警阈值,调整alert block group的位置。清除旧的alert block group的alertflag,并根据计算所得结果,找到新的阈值所在block group,并设置其alert flag。
参照图9。在向***中增加存储设备完成后,需要向该***中增加文件***大小。增加文件***大小仅增加虚拟空间的大小,所以只需修改dummy block group的相关信息,增加虚拟block数量即可。
参照图10。在文件***向使用者提供服务前,需要设定预警用的alert blockgroup,如预警阈值为70%,则根据可用空间的大小找到其70%的地方,并设置对应的block group的alert flag。
参照图11。在使用者扩展文件或写文件时,需要分配空间时,首先定位文件inode所在的block group,判断其上是否有足够的空闲块。如果有空闲块,判断是否是普通的block group(不是alert group)。如果是普通的block group,则直接分配空间写入数据。如果是alert block group,说明可用空间数量不足,需要发送alert请求或自动增加设备随后再分配block进行读写。如果当前block group没有足够的空间,则移到下一个blockgroup。判断该group是否是dummy group。如果不是判断该group是否有足够的空闲块。如果是dummy group说明目前没有可用的空间,需要发送alert或自动增加设备。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储器中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(个人计算机,服务器,网络设备等)执行本发明各个实施例或者实施例某些部分所述的方法。