一种动态迁移方法及装置与流程

文档序号:13072372阅读:286来源:国知局
一种动态迁移方法及装置与流程

本发明涉及数据迁移技术领域,更具体地说,涉及一种动态迁移方法及装置。



背景技术:

数据迁移是指将存储数据从当前存储环境移动到新的存储环境。数据迁移包括从同一存储设备中的一个硬盘移动到另一个硬盘,或者从存储集群系统中的一台存储设备移动到另外一台存储设备,或者是从本地一台存储设备移动到异地的另一台存储设备上。

数据迁移可以分为静态迁移和动态迁移。静态迁移时,待迁移数据在整个迁移过程中处于不可被访问状态,实现起来较为容易。而动态迁移在整个迁移过程中仅仅允许待迁移数据处于可被访问状态,而且仅仅允许秒级(最多分钟级的)的无法被访问状态。

现有技术中一种数据动态迁移方法是:采用内存锁或者硬盘锁机制来锁定被迁移数据的全部或者一部分。

然而,在采用共享存储的数据中心,采用现有技术中一种数据动态迁移方法时,可能导致较多数据处于不可被访问状态,从而可能引起多台服务器上众多客户应用的停滞,带来糟糕的客户体验。由于队头阻塞等原因,长时间锁定可能引发链式反应,导致系统性能下降。

综上所述,如何减少动态迁移对存储系统性能的影响是目前本领域技术人员亟待解决的问题。



技术实现要素:

本发明的目的是提供一种动态迁移方法,其能解决如何减少动态迁移对存储系统性能的影响的技术问题。本发明还提供了一种动态迁移装置。

为了实现上述目的,本发明提供如下技术方案:

一种动态迁移方法,包括:

确定源硬盘的源扩展区和目的硬盘的目的扩展区之间的对应关系;

从第一个所述源扩展区开始到最后一个所述源扩展区结束,依次将每m个所述源扩展区作为当前级扩展区,将每个当前级扩展区均拆分为数量为n的子源扩展区;

对于每个当前级扩展区,均从该当前级扩展区的第一个所述子源扩展区开始到最后一个所述子源扩展区结束,依次将每一个所述子源扩展区作为当前级子扩展区,读取所述当前级子扩展区对应的待迁移数据,并基于所述对应关系将所述待迁移数据写到对应的所述目的扩展区。

优选的,所述基于所述对应关系将所述待迁移数据写到对应的所述目的扩展区之后还包括:

判断任一当前级扩展区的全部子源扩展区是否均迁移成功,若否,则标记该当前级扩展区对应的迁移失败的数据;若是,则将预存的该当前级扩展区对应数据的地址信息修改为对应的所述目的扩展区的地址信息。

优选的,判断任一当前级扩展区的全部子源扩展区均迁移成功之后还包括:

判断所述源扩展区是否均迁移成功,若是,则输出全部迁移成功的提示,若否,则输出迁移失败的所述源扩展区的信息。

优选的,所述依次将每m个所述源扩展区作为当前级扩展区之前还包括:

确定迁移重试次数,确定重新对每一个所述源扩展区进行迁移的迁移次数为0;

判断出任一当前级扩展区的全部子源扩展区未均迁移成功之后,所述标记该当前级扩展区对应的迁移失败的数据之前,还包括:

判断全部子源扩展区未均迁移成功的当前级扩展区对应的迁移次数是否小于所述迁移重试次数,若是,则将迁移次数加1,重新对该当前级扩展区进行迁移,若否,则执行所述标记该当前级扩展区对应的迁移失败的数据的步骤。

优选的,将任m个所述源扩展区作为当前级扩展区之后还包括:

将当前级扩展区的状态修改为正在迁移;

判断出任一当前级扩展区的全部子源扩展区均迁移成功之后还包括:

将全部子源扩展区均迁移成功的当前级扩展区的状态修改为正常。

优选的,所述依次将每m个所述源扩展区作为当前级扩展区之前还包括:

基于源硬盘的类型确定每次进行数据迁移的所述源硬盘的源扩展区的数量m。

优选的,所述读取所述当前级子扩展区对应的待迁移数据包括:

以同步读方式读取所述当前级子扩展区对应的待迁移数据;

所述基于所述对应关系将所述待迁移数据写到对应的所述目的扩展区包括:

基于所述对应关系将所述待迁移数据以同步写方式写到对应的所述目的扩展区。

优选的,所述将每个当前级扩展区均拆分为数量为n的子源扩展区之后还包括:

接收i/o请求;

判断所述i/o请求对应的所述源扩展区是否为当前级扩展区,若是,则判断该当前级扩展区的当前级子扩展区是否是该当前级扩展区的第一个所述子源扩展区,若该当前级扩展区的当前级子扩展区是该当前级扩展区的第一个所述子源扩展区,则将所述i/o请求加入至所述源扩展区的等待队列,若该当前级扩展区的当前级子扩展区不是该当前级扩展区的第一个所述子源扩展区,则拆分所述i/o请求为对该当前级扩展区对应的所述子源扩展区的子i/o请求;

从第一个所述子i/o请求开始到最后一个所述子i/o请求结束,依次将每一个所述子i/o请求作为当前级子i/o请求,若当前级子i/o请求对应的所述子源扩展区完成迁移,则指示所述i/o请求的发送方由对应目的扩展区中实现访问;若当前级子i/o请求对应的所述子源扩展区未完成迁移且当前级子i/o请求对应的所述子源扩展区不是当前级子扩展区,则允许所述i/o请求实现对应访问,若当前级子i/o请求对应的所述子源扩展区未完成迁移且当前级子i/o请求对应的所述子源扩展区是当前级子扩展区,则将当前级子i/o请求加入至所述子源扩展区的等待队列中。

优选的,所述将所述i/o请求加入至所述源扩展区的等待队列之后,所述拆分所述i/o请求为对该当前级扩展区对应的所述子源扩展区的子i/o请求之前,还包括:

判断当前级子扩展区是否完成迁移,若是,则将所述i/o请求从所述源扩展区的等待队列中取出,执行所述拆分所述i/o请求为对该当前级扩展区对应的所述子源扩展区的子i/o请求的步骤。

本发明还提供了一种动态迁移装置,包括:

确定模块,用于确定源硬盘的源扩展区和目的硬盘的目的扩展区之间的对应关系;

拆分模块,用于从第一个所述源扩展区开始到最后一个所述源扩展区结束,依次将每m个所述源扩展区作为当前级扩展区,将每个当前级扩展区均拆分为数量为n的子源扩展区;

迁移模块,用于对于每个当前级扩展区,均从该当前级扩展区的第一个所述子源扩展区开始到最后一个所述子源扩展区结束,依次将每一个所述子源扩展区作为当前级子扩展区,读取所述当前级子扩展区对应的待迁移数据,并基于所述对应关系将所述待迁移数据写到对应的所述目的扩展区。

本发明所提供的一种动态迁移方法,包括:确定源硬盘的源扩展区和目的硬盘的目的扩展区之间的对应关系;从第一个源扩展区开始到最后一个源扩展区结束,依次将每m个源扩展区作为当前级扩展区,将每个当前级扩展区均拆分为数量为n的子源扩展区;对于每个当前级扩展区,均从第一个子源扩展区开始到最后一个子源扩展区结束,依次将每一个子源扩展区作为当前级子扩展区,读取当前级子扩展区对应的待迁移数据,并基于对应关系将待迁移数据写到对应的目的扩展区。本发明所提供的一种动态迁移方法先确定源硬盘的源扩展区和目的硬盘的目的扩展区之间的对应关系,然后依次将每m个源扩展区作为当前级扩展区,将每个当前级扩展区均拆分为数量为n的子源扩展区,依次将每一个子源扩展区作为当前级子扩展区,每次动态迁移时仅仅迁移当前级子扩展区的数据,其他子源扩展区的数据不做迁移,使得本发明方法中处于不可被访问状态的数据仅仅为当前级子扩展区的数据,少于现有技术方法中处于不可被访问状态的数据,而且迁移当前级子扩展区对应的待迁移数据所需的时间也少于现有技术中迁移处于不可被访问状态的数据所需的时间,从而使得因为处于不可被访问状态数据过多出现数据访问停滞现象的几率减少,进而减少了对存储系统性能的影响。综上所述,本发明所提供的一种动态迁移方法解决了如何减少动态迁移对存储系统性能影响的技术问题。本发明所提供的一种动态迁移装置也解决了相应的技术问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种动态迁移方法的迁移流程图;

图2为本发明实施例提供的一种动态迁移方法的访问流程图;

图3为本发明实施例提供的一种动态迁移装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,图1为本发明实施例提供的一种动态迁移方法的迁移流程图。

本发明实施例提供的一种动态迁移方法,可以包括以下步骤:

步骤s11:确定源硬盘的源扩展区和目的硬盘的目的扩展区之间的对应关系。

这里的源硬盘是指数据迁移前所在的物理硬盘,源扩展区与源硬盘之间存在映射关系;目的硬盘是指数据迁移后所在的物理硬盘,目的扩展区与目的硬盘之间存在映射关系。由于扩展区跟物理硬盘之间的映射关系,根据扩展区的信息便可得到该扩展区映射到的物理硬盘上存储的数据。

由于需要将源硬盘存储的数据迁移到目的硬盘,而进行数据迁移的单位为扩展区,所以需要确定源扩展区和目的扩展区之间的对应关系,这里的对应关系指的是迁移前存储数据的源扩展区和迁移后存储数据的目的扩展区之间的对应关系,也即数据由哪个源扩展区迁移到哪个目的扩展区中。源扩展区和目的扩展区之间的对应关系确定后,在进行数据迁移时,便可根据确定好的对应关系将源扩展区对应的数据迁移到对应的目的扩展区。

步骤s12:从第一个源扩展区开始到最后一个源扩展区结束,依次将每m个源扩展区作为当前级扩展区,将每个当前级扩展区均拆分为数量为n的子源扩展区。

实际应用中,可以将所有待迁移的源扩展区加入到一个扩展区入口队列,从队列头部取出m个源扩展区作为当前级扩展区。如果有当前级扩展区完成迁移,则可以在扩展区入口队列再选取源扩展区作为当前级扩展区。这里的m为正整数。

在实际应用中,根据不同的应用场景,可以将每个当前级扩展区拆分为数量为n的子源扩展区,比如可以设置子源扩展区存储容量大于或等于64kb且小于或等于1mb,在源扩展区和子源扩展区的存储容量确定的情况下,每个源扩展区拆分为子源扩展区的数量n也就相应的确定了。在源硬盘或目的硬盘为虚拟硬盘的情况下,硬盘上会存储扩展区的元数据信息,所以可以直接按上述方法对虚拟硬盘的扩展区进行拆分操作,而且可以将迁移数据均匀分布到存储系统中所有可用的硬盘上,利用并行硬盘访问来提升迁移速度。在源硬盘或目的硬盘不是虚拟硬盘的情况下,可以将扩展区设定为数量为n的逻辑块大小,将每个逻辑块设定为子扩展区。这里的n为正整数。

步骤s13:对于每个当前级扩展区,均从该当前级扩展区的第一个子源扩展区开始到最后一个子源扩展区结束,依次将每一个子源扩展区作为当前级子扩展区,读取当前级子扩展区对应的待迁移数据,并基于对应关系将待迁移数据写到对应的目的扩展区。

在每个当前级扩展区中,每次进行迁移的数据仅仅为一个作为当前级子扩展区的子源扩展区对应的数据,而不会对其他子源扩展区对应的数据进行迁移。由于处于迁移过程的数据处于不可被访问状态,所以每个当前级扩展区中处于不可被访问状态的数据仅仅为一个子源扩展区对应的数据。所以每个源扩展区拆分后得到的子源扩展区的存储容量越小,动态迁移中处于不可被访问状态的数据量越少,出现数据访问停滞现象的几率越小,但是子源扩展区的存储容量越小,执行动态迁移的动作越频繁,产生的关于动态迁移的消息数量越多,硬盘的资源开销越大,所以在实际应用中,可以综合考虑来选取合适的子源扩展区存储容量的大小,当然也可以考虑其他因素来选取合适的子源扩展区存储容量的大小,本发明在这里不做具体限定。

实际应用中,可以按照拆分当前级扩展区的拆分原则将当前级扩展区对应的目的扩展区拆分成数量为n的子目的扩展区,并确定子源扩展区和子目的扩展区之间的对应关系,比如第一个子源扩展区对应第一个子目的扩展区,在对当前级子扩展区对应的待迁移数据进行迁移时,便可以将待迁移数据写入对应的子目的扩展区,这样的好处是可以保证数据在迁移前后的一致性。当然也可以有其他保证数据在迁移前后一致性的方法,本发明在这里不做具体限定。

本发明所提供的一种动态迁移方法先确定源硬盘的源扩展区和目的硬盘的目的扩展区之间的对应关系,然后依次将每m个源扩展区作为当前级扩展区,将每个当前级扩展区均拆分为数量为n的子源扩展区,依次将每一个子源扩展区作为当前级子扩展区,每次动态迁移时仅仅迁移当前级子扩展区的数据,其他子源扩展区的数据不做迁移,使得本发明方法中处于不可被访问状态的数据仅仅为当前级子扩展区的数据,少于现有技术方法中处于不可被访问状态的数据,而且迁移当前级子扩展区对应的待迁移数据所需的时间也少于现有技术中迁移处于不可被访问状态的数据所需的时间,从而使得因为处于不可被访问状态数据过多出现数据访问停滞现象的几率减少,进而减少了对存储系统性能的影响。综上所述,本发明所提供的一种动态迁移方法解决了如何减少动态迁移对存储系统性能影响的技术问题。

此外,本发明所提供的一种动态迁移方法将每m个源扩展区作为当前级扩展区进行并行迁移,这样能够提高动态迁移的速度,节省动态迁移所用的时间,提高了效率。综上所述,本发明所提供的一种动态迁移方法还解决了如何提高动态迁移效率的技术问题。

本发明实施例提供的一种动态迁移方法中,基于对应关系将待迁移数据写到对应的目的扩展区之后还可以包括:

判断任一当前级扩展区的全部子源扩展区是否均迁移成功,若否,则标记该当前级扩展区对应的迁移失败的数据;若是,则将预存的该当前级扩展区对应数据的地址信息修改为对应的目的扩展区的地址信息。

如果一个当前级扩展区的全部子源扩展区均迁移成功,那么这个当前级扩展区便迁移成功,如果一个当前级扩展区的全部子源扩展区并未均迁移成功,那么这个当前级扩展区是迁移失败。

在判断一个当前级扩展区迁移成功后,需要将当前级扩展区对应数据的地址信息修改为对应目的扩展区的地址信息,这样在需要访问当前级扩展区对应的数据时,便可根据地址信息访问当前级扩展区对应的数据。实际应用中,可以通过将预先记录的对应数据的位置信息由当前级扩展区的物理硬盘id域和物理扩展区id域分别修改为目的硬盘的物理硬盘id域和物理扩展区id域,来实现修改当前级扩展区对应数据的地址信息的目的,这样使得修改过程简单易实现,当然还可以有其他修改方法,本发明在这里不做具体限定。

在判断任一个当前级扩展区迁移失败后,可以标记该当前级扩展区对应的迁移失败的数据,以便重新对迁移失败的数据进行迁移。这样在每个当前级完成迁移后均可对当前级扩展区的迁移结果进行判断,可以预先得知迁移失败的数据,从而使得迁移失败的数据不会随着迁移过程的进行而变得冗余。

本发明实施例提供的一种动态迁移方法中,判断任一当前级扩展区的全部子源扩展区均迁移成功之后还可以包括:

判断源扩展区是否均迁移成功,若是,则输出全部迁移成功的提示,若否,则输出迁移失败的源扩展区的信息。

在判断任一当前级扩展区迁移成功之后,可以判断所有的源扩展区是否均迁移成功,如果是,则可以输出全部迁移成功的提示,如果否,可以输出迁移失败的源扩展区的信息。这样可以直观地得到迁移过程的结果,以便根据得到的结果进行相应的操作,比如在判断源扩展区未均迁移成功时,可以选择接受现状,回滚迁移数据,也可以选择立即或等待一段时间后再重新尝试迁移失败的源扩展区,本发明在这里不做具体限定。

本发明实施例提供的一种动态迁移方法中,依次将每m个源扩展区作为当前级扩展区之前还可以包括:

确定迁移重试次数,确定重新对每一个源扩展区进行迁移的迁移次数为0;

判断出任一当前级扩展区的全部子源扩展区未均迁移成功之后,标记该当前级扩展区对应的迁移失败的数据之前,还可以包括:

判断全部子源扩展区未均迁移成功的当前级扩展区对应的迁移次数是否小于迁移重试次数,若是,则将迁移次数加1,重新对该当前级扩展区进行迁移,若否,则执行标记该当前级扩展区对应的迁移失败的数据的步骤。

在实际应用中,有时可以允许对迁移失败的当前级扩展区进行重新迁移,但是又不允许无限制地对迁移失败的当前级扩展区进行重新迁移,所以可以预先设定对迁移失败的当前级扩展区进行重新迁移的迁移重试次数,如果对迁移失败的当前级扩展区进行重新迁移的次数小于或等于预先设定的迁移重试次数,则允许对迁移失败的当前级扩展区进行重新迁移,否则,不允许对迁移失败的当前级扩展区进行重新迁移。这样可以进一步确保所有当前级扩展区均可迁移成功。

本发明实施例提供的一种动态迁移方法中,将任m个源扩展区作为当前级扩展区之后还可以包括:

将当前级扩展区的状态修改为正在迁移;

判断出任一当前级扩展区的全部子源扩展区均迁移成功之后还包括:

将全部子源扩展区均迁移成功的当前级扩展区的状态修改为正常。

实际应用中,可以通过记录每个源扩展区的状态来直观地了解该源扩展区在迁移过程中的状态。

比如实际应用中,可以将本次迁移涉及的所有源扩展区加入一个扩展区列表。扩展区列表表项可以包含以下信息:源扩展区的标志信息,包括该源扩展区所对应的硬盘的id和该源扩展区的逻辑id,其可用于查找该源扩展区对应的数据;迁移状态信息,可选值包括等待、执行及失败,其中,等待表示该源扩展区还未开始迁移过程,执行表示该源扩展区正在进行迁移,失败表示该源扩展区迁移失败。

如果一个源扩展区迁移成功,则可以删除扩展区列表中该源扩展区的信息,若最后扩展区列中为空,则表示所有的源扩展区均迁移成功。相应的,在对迁移失败的源扩展区进行重新迁移时,可以将该源扩展区加入到扩展区入口队列的头部,等待下一次迁移。

实际应用中,还可以设置扩展区迁移完成消息,扩展区迁移完成消息可以包含以下信息:源扩展区的标志信息,包括该源扩展区所对应的硬盘的id号码和该源扩展区的逻辑id;迁移后的位置信息,包括该源扩展区对应的目的扩展区所对应的硬盘id和该目的扩展区的物理id,其可用于记录数据在迁移后所在的位置;迁移完成状态,可选值包括成功及失败,其可用于判断该源扩展区迁移成功还是失败。

实际应用中,在使用存储池或虚拟硬盘的存储系统中,还可设置扩展区映射表,扩展区映射表是一种实现存储虚拟化的关键数据结构,其能实现从虚拟存储位置到物理存储位置的映射。扩展区映射表的表项中可以包含以下信息:源扩展区的标志信息,可以包括该源扩展区所对应的虚拟硬盘的id号码和该源扩展区的逻辑id,其可用于区分不同的源扩展区;源扩展区的位置信息,可以包括该源扩展区所对应的物理硬盘id和该源扩展区的物理id,其可用于查找该源扩展区对应的数据;源扩展区的状态,可以包括迁移或者正常,其可用于区分该源扩展区是否处于迁移过程。对于迁移成功的源扩展区,可以将扩展区映射表中该源扩展区的物理硬盘id域和物理扩展区id域分别修改为目的硬盘的物理硬盘id域和物理扩展区id域。在不使用存储池或虚拟硬盘的传统存储系统中,不必使用扩展区映射表,可以采用公知的方法来标记源扩展区的上述信息。

本发明实施例提供的一种动态迁移方法中,依次将每m个源扩展区作为当前级扩展区之前还可以包括:

基于源硬盘的类型确定每次进行数据迁移的源硬盘的源扩展区的数量m。

实际应用中,可以基于客户端的源硬盘的类型和存储系统的可用资源状况来确定m的值。若源硬盘是普通机械硬盘,受限于机械硬盘的寻道时间和i/o处理能力,则可以确定m的值为1;若源硬盘是普通机械硬盘的raid阵列,则可以确定m的值为2;若源硬盘是虚拟硬盘,根据虚拟硬盘的可用资源情况,可以确定m的值为3或4或5。

这里的客户端是指存储系统自动分层部分或者来自与存储系统外部的客户应用程序。

实际应用中,可以选择用迁移线程来进行数据迁移,一个迁移线程负责一个当前级扩展区的数据迁移,相应的,可以设置m个迁移线程同时对m个当前级扩展区一一对应的进行对应的数据迁移。这样可以显著提高迁移速度而且不会增加存储系统的资源占有。

本发明实施例提供的一种动态迁移方法中,读取当前级子扩展区对应的待迁移数据可以包括:

以同步读方式读取当前级子扩展区对应的待迁移数据;

基于对应关系将待迁移数据写到对应的目的扩展区包括:

基于对应关系将待迁移数据以同步写方式写到对应的目的扩展区。

所述同步读方式,是指在从硬盘或者缓存中读取到数据后,读操作才能返回。所述同步写方式,是指直到成功将数据写入到硬盘介质后,写操作才返回的方式。采用同步读方式和同步写方式可以确保迁移过程的正确性,可以进一步避免在迁移中因意外丢失、意外掉电等因素导致的迁移前后数据不一致情况。

请参阅图2,图2为本发明实施例提供的一种动态迁移方法的访问流程图。

本发明实施例提供的一种动态迁移方法中,将每个当前级扩展区均拆分为数量为n的子源扩展区之后还可以包括以下步骤:

步骤s21:接收i/o请求。

存储系统接收到i/o请求后,会在i/o栈中按照从上到下的顺序依次传递i/o请求。当i/o请求到达源硬盘所在的层时,便可以执行下述步骤。

这里的i/o请求可以为读请求,也可以为写请求,还可以为读写请求,本发明在这里不做具体限定。

步骤s22:判断i/o请求对应的源扩展区是否为当前级扩展区,若是,则判断该当前级扩展区的当前级子扩展区是否是该当前级扩展区的第一个子源扩展区,若该当前级扩展区的当前级子扩展区是该当前级扩展区的第一个子源扩展区,则将i/o请求加入至源扩展区的等待队列,若该当前级扩展区的当前级子扩展区不是该当前级扩展区的第一个子源扩展区,则拆分i/o请求为对该当前级扩展区对应的子源扩展区的子i/o请求。

在一般的迁移算法中,是不允许对当前迁移的源扩展区进行访问的,所以需要先判断i/o请求对应的源扩展区是否正在被迁移,若否,则允许i/o请求实现对应访问,若是,则需要判断该当前级扩展区是不是刚开始迁移,也即判断该当前级扩展区的当前级子扩展区是否是该当前级扩展区的第一个子源扩展区,因为源扩展区刚开始迁移时,由于队头阻塞,会导致整个该源扩展区也处于不可被访问状态。这里允许i/o请求实现对应访问的过程与现有技术中的过程相同,在此不再赘述。

可以通过判断i/o请求对应的源扩展区是否是当前级扩展区来判断该源扩展区是否正在被迁移,如果i/o请求对应的源扩展区是当前级扩展区,则该源扩展区正在被迁移,如果i/o请求对应的源扩展区不是当前级扩展区,则该源扩展区不是正在被迁移。可以通过判断当前级扩展区的当前级子扩展区是否是该当前级扩展区的第一个子源扩展区来判断该当前级扩展区是否是刚开始迁移,如果当前级扩展区的当前级子扩展区是该当前级扩展区的第一个子源扩展区,则表示该当前级扩展区刚开始迁移,如果当前级扩展区的当前级子扩展区不是该当前级扩展区的第一个子源扩展区,则表示该当前级扩展区不是刚开始迁移。

若i/o请求对应的源扩展区正在被迁移且是刚开始迁移,则可以将i/o请求加入至源扩展区的等待队列,若i/o请求对应的源扩展区正在被迁移且不是刚开始迁移,则可以执行拆分i/o请求为对该当前级扩展区对应的子源扩展区的子i/o请求。将i/o请求加入至源扩展区的等待队列只是暂时不处理i/o请求,因为迁移过程是随时间变化的,所以刚开始迁移的源扩展区会结束刚开始迁移的状态,结束的标准便是该源扩展区的第一个子源扩展区完成迁移,待刚开始完成迁移的源扩展区结束刚开始迁移的状态后,便可根据新得出的判断结果对该源扩展区对应的i/o请求进行相应的操作。

步骤s23:从第一个子i/o请求开始到最后一个子i/o请求结束,依次将每一个子i/o请求作为当前级子i/o请求,若当前级子i/o请求对应的子源扩展区完成迁移,则指示i/o请求的发送方由对应目的扩展区中实现访问;若当前级子i/o请求对应的子源扩展区未完成迁移且当前级子i/o请求对应的子源扩展区不是当前级子扩展区,则允许i/o请求实现对应访问,若当前级子i/o请求对应的子源扩展区未完成迁移且当前级子i/o请求对应的子源扩展区是当前级子扩展区,则将当前级子i/o请求加入至子源扩展区的等待队列中。

由于每个子i/o请求对应的每个子源扩展区可能已经完成迁移,可能正在被迁移,也可能还未开始迁移。已经完成迁移的子源扩展区对应的数据会被迁移到对应的目的扩展区中,这时需要指示i/o请求的发送方由对应目的扩展区中实现访问,对于那些完成迁移但是有部分数据迁移失败的子源扩展区而言,不仅需要到对应目的扩展区中访问数据,还需要到对应的源扩展区中访问数据,这时可以将子i/o请求拷贝,将两个子i/o请求的目的地址分别设置为源扩展区id和对应的目的扩展区id,以便i/o请求的发送方实现对应访问;正在被迁移的子源扩展区对应的数据处于不可被访问状态,这时可以将当前级子i/o请求加入至子源扩展区的等待队列中,将当前级子i/o请求加入至子源扩展区的等待队列只是暂时不处理当前级子i/o请求,因为迁移过程是随时间变化的,所以该当前级子i/o请求对应的子源扩展区会结束迁移过程,待该当前级子i/o请求对应的子源扩展区完成迁移后,便可根据新得出的判断结果对该当前级子i/o请求进行相应的操作;而还未开始迁移的子源扩展区对应的数据的地址信息仍为迁移前的地址信息,可以允许i/o请求实现对应访问。所以在将i/o请求拆分为对i/o请求对应的源扩展区对应的子源扩展区的子i/o请求后,需要判断每个子i/o请求对应的每个子源扩展区的状态,进而根据每个子源扩展区的状态来实现对该子源扩展区的访问。

本发明将当前迁移的源扩展区拆分为多个子源扩展区,将访问控制的粒度从源扩展区降低到子源扩展区,从而大大提升了系统的访问性。

实际应用中,还可以设置扩展区水线表,扩展区水线表可以包括以下信息:每个源扩展区的状态,可以包括阻塞和不阻塞,刚开始进行第一个子源扩展区迁移的源扩展区的状态为阻塞,完成第一个子源扩展区迁移的源扩展区的状态为不阻塞;源扩展区中每个子源扩展区的序号,可以在子源扩展区的等待队列中按照子源扩展区的先后顺序对子源扩展区进行编号;水线位置,用于表示源扩展区中正在被迁移的子源扩展区的序号,未开始迁移的源扩展区的水线位置为0,之后,该源扩展区中每迁移一个子源扩展区,便将水线位置加1,由于水线位置在不断更新,所以可以根据水线位置判断当前级扩展区中进行迁移的当前级子扩展区的状态。这里的水线位置是指每个当前级扩展区中当前级子扩展区的序号,由于当前级子扩展区的序号由低到高不断变化,所以用水线来命名。

由于每个子源扩展区均有自己的序号,而水线位置又表示正在被迁移的子源扩展区的序号,所以可以根据子源扩展区的序号跟水线位置之间的关系来判断子i/o请求对应的子源扩展区的状态,若子i/o请求对应的子源扩展区的序号小于水线位置,则该子源扩展区已完成迁移,若子i/o请求对应的子源扩展区的序号等于水线位置,则该子源扩展区正在被迁移,若子i/o请求对应的子源扩展区的序号大于水线位置,则该子源扩展区还未开始迁移。当然,也可以将为子i/o请求添加与对应的子源扩展区序号相同的请求序号,通过请求序号与水线位置的关系来判断对应的子源扩展区的状态。

本发明实施例提供的一种动态迁移方法中,将i/o请求加入至源扩展区的等待队列之后,拆分i/o请求为对该当前级扩展区对应的子源扩展区的子i/o请求之前,还可以包括:

判断当前级子扩展区是否完成迁移,若是,则将i/o请求从源扩展区的等待队列中取出,执行拆分i/o请求为对该当前级扩展区对应的子源扩展区的子i/o请求的步骤。

这里通过判断当前级子扩展区是否完成迁移来判断当前级扩展区是否处于刚开始迁移的状态,若是,则当前级扩展区不是处于刚开始迁移的状态,这时可以释放加入源扩展区等待队列中的i/o请求,执行拆分i/o请求为对该当前级扩展区对应的子源扩展区的子i/o请求的步骤;若否,则当前级扩展区仍处于刚开始迁移的状态,这时可以不做处理,等待下一次判断当前级子扩展区是否完成迁移。这样的好处是判断过程简单直接。当然还可以有其他判断当前级扩展区是否处于刚开始迁移的状态的方法,本发明在这里不做具体限定。

实际应用中,可以时刻判断当前级子扩展区是否完成迁移,也可以预先设定进行判断当前级子扩展区是否完成迁移的时间间隔,本发明在这里不做具体限定。

本发明还提供了一种动态迁移装置,其具有本发明提供的一种动态迁移方法具有的对应效果。请参阅图3,图3为本发明实施例提供的一种动态迁移装置的结构示意图。

本发明实施例提供的一种动态迁移装置可以包括:

确定模块a1,用于确定源硬盘的源扩展区和目的硬盘的目的扩展区之间的对应关系;

拆分模块a2,用于从第一个源扩展区开始到最后一个源扩展区结束,依次将每m个源扩展区作为当前级扩展区,将每个当前级扩展区均拆分为数量为n的子源扩展区;

迁移模块a3,用于对于每个当前级扩展区,均从该当前级扩展区的第一个子源扩展区开始到最后一个子源扩展区结束,依次将每一个子源扩展区作为当前级子扩展区,读取当前级子扩展区对应的待迁移数据,并基于对应关系将待迁移数据写到对应的目的扩展区。

本发明实施例提供的一种动态迁移装置中,还可以包括:

第一判断模块,用于在迁移模块基于对应关系将待迁移数据写到对应的目的扩展区之后,判断任一当前级扩展区的全部子源扩展区是否均迁移成功,若否,则标记该当前级扩展区对应的迁移失败的数据;若是,则将预存的该当前级扩展区对应数据的地址信息修改为对应的目的扩展区的地址信息。

本发明实施例提供的一种动态迁移装置中,还可以包括:

第二判断模块,用于在第一判断模块判断任一当前级扩展区的全部子源扩展区均迁移成功之后,判断源扩展区是否均迁移成功,若是,则输出全部迁移成功的提示,若否,则输出迁移失败的源扩展区的信息。

本发明实施例提供的一种动态迁移装置中,还可以包括:

重试模块,用于在拆分模块依次将每m个源扩展区作为当前级扩展区之前,确定迁移重试次数,确定重新对每一个源扩展区进行迁移的迁移次数为0;

第三判断模块,用于在第一判断模块判断出任一当前级扩展区的全部子源扩展区未均迁移成功之后,标记该当前级扩展区对应的迁移失败的数据之前,判断全部子源扩展区未均迁移成功的当前级扩展区对应的迁移次数是否小于迁移重试次数,若是,则将迁移次数加1,重新对该当前级扩展区进行迁移,若否,则执行标记该当前级扩展区对应的迁移失败的数据的步骤。

本发明实施例提供的一种动态迁移装置中,还可以包括:

第一修改模块,用于在拆分模块将任m个所述源扩展区作为当前级扩展区之后,将当前级扩展区的状态修改为正在迁移;

第二修改模块,用于在第一判断模块判断出任一当前级扩展区的全部子源扩展区均迁移成功之后,将全部子源扩展区均迁移成功的当前级扩展区的状态修改为正常。

本发明实施例提供的一种动态迁移装置中,还可以包括:

预设模块,用于在拆分模块依次将每m个所述源扩展区作为当前级扩展区之前,基于源硬盘的类型确定每次进行数据迁移的源硬盘的源扩展区的数量m。

本发明实施例提供的一种动态迁移装置中,迁移模块可以包括:

第一迁移单元,用于以同步读方式读取当前级子扩展区对应的待迁移数据;

第二迁移单元,用于基于对应关系将待迁移数据以同步写方式写到对应的目的扩展区。

本发明实施例提供的一种动态迁移装置中,还可以包括:

接收模块,用于接收i/o请求;

第四判断模块,用于判断i/o请求对应的源扩展区是否为当前级扩展区,若是,则判断该当前级扩展区的当前级子扩展区是否是该当前级扩展区的第一个子源扩展区,若该当前级扩展区的当前级子扩展区是该当前级扩展区的第一个子源扩展区,则将i/o请求加入至源扩展区的等待队列,若该当前级扩展区的当前级子扩展区不是该当前级扩展区的第一个子源扩展区,则拆分i/o请求为对该当前级扩展区对应的子源扩展区的子i/o请求;

访问模块,用于从第一个子i/o请求开始到最后一个子i/o请求结束,依次将每一个子i/o请求作为当前级子i/o请求,若当前级子i/o请求对应的子源扩展区完成迁移,则指示i/o请求的发送方由对应目的扩展区中实现访问;若当前级子i/o请求对应的子源扩展区未完成迁移且当前级子i/o请求对应的子源扩展区不是当前级子扩展区,则允许i/o请求实现对应访问,若当前级子i/o请求对应的子源扩展区未完成迁移且当前级子i/o请求对应的子源扩展区是当前级子扩展区,则将当前级子i/o请求加入至子源扩展区的等待队列中。

本发明实施例提供的一种动态迁移装置中,还可以包括:

第五判断单元,用于在第四判断模块将i/o请求加入至源扩展区的等待队列之后,拆分i/o请求为对该当前级扩展区对应的子源扩展区的子i/o请求之前,判断当前级子扩展区是否完成迁移,若是,则将i/o请求从源扩展区的等待队列中取出,执行拆分i/o请求为对该当前级扩展区对应的子源扩展区的子i/o请求的步骤。

本发明实施例提供的一种动态迁移装置中相关部分的说明请参见本发明实施例提供的一种动态迁移方法中对应部分的详细说明,在此不再赘述。另外,本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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