CN109558068B - 数据迁移方法及迁移系统 - Google Patents
数据迁移方法及迁移系统 Download PDFInfo
- Publication number
- CN109558068B CN109558068B CN201710886464.0A CN201710886464A CN109558068B CN 109558068 B CN109558068 B CN 109558068B CN 201710886464 A CN201710886464 A CN 201710886464A CN 109558068 B CN109558068 B CN 109558068B
- Authority
- CN
- China
- Prior art keywords
- data
- data migration
- chunk
- source
- chunks
- 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.)
- Active
Links
- 238000013508 migration Methods 0.000 title claims abstract description 330
- 230000005012 migration Effects 0.000 title claims abstract description 330
- 238000000034 method Methods 0.000 title claims abstract description 228
- 230000004044 response Effects 0.000 claims abstract description 46
- 230000000977 initiatory effect Effects 0.000 claims abstract description 5
- 230000008569 process Effects 0.000 claims description 40
- 238000012545 processing Methods 0.000 claims description 21
- 238000010586 diagram Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 9
- 239000007787 solid Substances 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000002950 deficient Effects 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000004064 recycling Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000003090 exacerbative effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了数据迁移方法及迁移系统,涉及存储领域,解决了驱动器资源使用不均衡的技术问题。本申请的数据迁移方法,包括:响应于发起数据迁移操作,从第一驱动器移出数据,选取第一驱动器的被分配的大块作为数据迁移的源大块,获取使用了源大块的存储对象;选取数据迁移的目的大块,用于承载源大块的数据,其中目的大块位于第二驱动器;将源大块的数据复制到目的大块;更新存储对象的元数据;响应于对存储对象的元数据更新完成,回收源大块。
Description
技术领域
本申请涉及存储系统,具体涉及在存储系统工作期间对存储对象内的数据进行迁移的方法与系统。
背景技术
现有的RAID(Redundant Arrays of Independent Disks,独立磁盘冗余阵列)技术将多个物理驱动器(例如,磁盘)聚合成盘组,在盘组上划分条带,每个条带上通过冗余技术对数据提供保护。现有技术的RAID系统中,当多个驱动器中的一个或多个发生故障,会启动备用驱动器,并进行数据重构,以保持RAID系统的数据保护能力以及性能。在故障驱动器被更换后,需要再将备用驱动器中的数据复制回新驱动器。RAID系统可提供多种数据保护级别,例如,RAID5系统能纠正一块驱动器发生故障,而RAID6系统能纠正两块驱动器发生的故障。
参看图12,控制器将驱动器80、驱动器82、驱动器84与驱动器86组成RAID系统。图8的RAID系统中,根据驱动器的物理存储位置划分条带,各个驱动器的相同物理存储位置构成提供数据保护的条带。当驱动器86发生故障时,将驱动器88作为备用驱动器,从驱动器80、驱动器82与驱动器84的每个条带中读出数据,并重建出故障驱动器 86的对应条带的数据,以及将重建的数据写入驱动器88。这一过程中,产生了对驱动器 80、驱动器82与驱动器84完整的读操作,以及对驱动器88的完整的写操作。当用新驱动器替换了驱动器86后,还需要对数据再次重构,将备用驱动器88的数据复制到新驱动器。在这个过程中,所有的写操作最终都会集中在备用驱动器88以及新驱动器上,从而使得现有技术的RAID系统的数据重构性能被限制在单一驱动器性能。
现有技术的RAID系统至少存在下列问题:(1)数据域和物理域是紧耦合的关系(条带直接对应于物理存储位置),这种紧耦合的关系将会导致RAID数据重构过程非常漫长,RAID系统数据重构的性能无法随着磁盘的数量线性增长。并且随着驱动器容量的增大,数据重构过程时间将会线性增加。
(2)由于重构时间长,重构过程中大量的数据读写增加驱动器的负担,使得的驱动器更容易发生故障。
(3)无法做到局部重构,在驱动器组中一个驱动器发生故障时,传统RAID技术会对整个驱动器的所有存储空间进行重构操作,整驱动器重构会占用大量时间。
(4)无法做到根据优先级重构,传统的重构无法根据故障级别进行优先级重构。
(5)无法做到数据感知,位于块设备层的现有技术的RAID系统在数据布局上是固定的,并且无法知道上层应用的数据语义,因此无法做到数据感知的重构操作,只能通过完整驱动器重构的方式恢复数据。对于新型的固态驱动器(SSD,Solid State Drive) 而言,如果采用全驱动器重构的方式,那么将会导致备用驱动器或被替换的驱动器被全部刷写一遍,既导致性能显著下降,又导致SSD的寿命受到影响。
由于数据重构、固态驱动更新等事件的发生,会导致存储系统中的各个固态驱动器的存储资源使用不均衡,并导致存储系统的并行性得不到充分发挥、存储对象创建失败等问题。
发明内容
在本申请中,采用存储资源池架构,将驱动器提供的所有的存储资源进行池化处理,然后通过分配器将资源动态分配给存储对象。当驱动器盘出现故障时,针对存储对象进行重构,并使存储资源池中的所有驱动器参与到数据重构过程中,从而达到快速、灵活、高效的重构。在存储系统的各驱动器资源使用不均衡时,发起数据迁移。
根据本申请的第一方面,提供了根据本申请第一方面的第一基于存储对象的数据重构方法,包括:响应于存储池中的第一驱动器故障,获取使用了第一驱动器提供的数据块的存储对象;从存储池中获取处于空闲状态的第一数据块分配给所述存储对象;将所述存储对象中存储在第一驱动器的数据块中的数据,存储到所述第一数据块。
根据本申请第一方面的第一基于存储对象的数据重构方法,提供了根据本申请第一方面的第二基于存储对象的数据重构方法,其中从存储池中获取处于空闲状态的第一数据块,使得被分配的数据块随机分布于构成所述存储池的多个驱动器中。
根据本申请第一方面的第一或第二基于存储对象的数据重构方法,提供了根据本申请第一方面的第三基于存储对象的数据重构方法,其中从存储池中获取处于空闲状态的第一数据块,所述第一数据块来自未被所述存储对象使用的驱动器。
根据本申请第一方面的第三基于存储对象的数据重构方法,提供了根据本申请第一方面的第四基于存储对象的数据重构方法,其中从存储池中获取处于空闲状态的第一数据块,使得所述第一数据块来自构成所述存储池的多个驱动器中负载轻或者空闲容量多的驱动器。
根据本申请第一方面的第一至第四基于存储对象的数据重构方法之一,提供了根据本申请第一方面的第五基于存储对象的数据重构方法,还包括:获取使用了第一驱动器提供的数据块多个存储对象的故障级别;以及获取所述多个存储对象中故障级别高的存储对象。
根据本申请第一方面的第一至第五基于存储对象的数据重构方法之一,提供了根据本申请第一方面的第六基于存储对象的数据重构方法,还包括:响应于存储池中的第一驱动器的一个或多个地址区段故障,获取使用了所述一个或多个地址区段提供的数据块的一个或多个存储对象。
根据本申请第一方面的第一至第六基于存储对象的数据重构方法之一,提供了根据本申请第一方面的第七基于存储对象的数据重构方法,其中从所述存储对象中重构所述存储对象中存储在第一驱动器的数据块中的数据,将所述数据存储到所述第一数据块。
根据本申请第一方面的第一至第七基于存储对象的数据重构方法之一,提供了根据本申请第一方面的第八基于存储对象的数据重构方法,其中若没有任何存储对象使用了第一驱动器提供的数据块,所述方法完成。
根据本申请第一方面的第一至第八基于存储对象的数据重构方法之一,提供了根据本申请第一方面的第九基于存储对象的数据重构方法,其中所述故障级别对应于所述存储对象中位于故障驱动器的数据块的数量。
根据本申请的第二方面,提供了根据本申请第二方面的第一基于存储对象的数据重构系统,包括:存储对象获取模块,用于响应于存储池中的第一驱动器故障,获取使用了第一驱动器提供的数据块的存储对象;数据块分配模块,用于从存储池中获取处于空闲状态的第一数据块分配给所述存储对象;以及数据恢复模块,用于将所述存储对象中存储在第一驱动器的数据块中的数据,存储到所述第一数据块。
根据本申请的第二方面的第一基于存储对象的数据重构系统,提供了根据本申请第二方面的第二基于存储对象的数据重构系统,其中所述数据分配模块用于从存储池中获取处于空闲状态的第一数据块,使得被分配的数据块随机分布于构成所述存储池的多个驱动器中。
根据本申请的第二方面的第一或第二基于存储对象的数据重构系统,提供了根据本申请第二方面的第三基于存储对象的数据重构系统,其中所述数据分配模块用于从存储池中获取处于空闲状态的第一数据块,所述第一数据块来自未被所述存储对象使用的驱动器。
根据本申请的第二方面的第三基于存储对象的数据重构系统,提供了根据本申请第二方面的第四基于存储对象的数据重构系统,其中所述数据分配模块用于从存储池中获取处于空闲状态的第一数据块,使得所述第一数据块来自构成所述存储池的多个驱动器中负载轻或者空闲容量多的驱动器。
根据本申请的第二方面的第一至第四基于存储对象的数据重构系统之一,提供了根据本申请第二方面的第五基于存储对象的数据重构系统,还包括:故障级别获取模块,用于获取使用了第一驱动器提供的数据块多个存储对象的故障级别;以及存储对象选择模块,用于获取所述多个存储对象中故障级别高的存储对象。
根据本申请的第二方面的第一至第五基于存储对象的数据重构系统之一,提供了根据本申请第二方面的第六基于存储对象的数据重构系统,还包括:第二故障模块选择模块,用于响应于存储池中的第一驱动器的一个或多个地址区段故障,获取使用了所述一个或多个地址区段提供的数据块的一个或多个存储对象。
根据本申请的第二方面的第一至第六基于存储对象的数据重构系统之一,提供了根据本申请第二方面的第七基于存储对象的数据重构系统,其中数据恢复模块,还用于从所述存储对象中重构所述存储对象中存储在第一驱动器的数据块中的数据,将所述数据存储到所述第一数据块。
根据本申请的第二方面的第一至第七基于存储对象的数据重构系统之一,提供了根据本申请第二方面的第八基于存储对象的数据重构系统,其中若没有任何存储对象使用了第一驱动器提供的数据块,所述数据重构系统的数据重构完成。
根据本申请的第二方面的第一至第八基于存储对象的数据重构系统之一,提供了根据本申请第二方面的第九基于存储对象的数据重构系统,其中所述故障级别对应于所述存储对象中位于故障驱动器的数据块的数量。
根据本申请的第三方面,提供了根据本申请第三方面的第一数据迁移方法,包括:响应于发起数据迁移操作,从第一驱动器移出数据,选取第一驱动器的被分配的大块作为数据迁移的源大块,获取使用了源大块的存储对象;选取数据迁移的目的大块,用于承载源大块的数据,其中目的大块位于第二驱动器;将源大块的数据复制到目的大块;更新存储对象的元数据;响应于对存储对象的元数据更新完成,回收源大块。
根据本申请的第三方面的第一数据迁移方法,提供了根据本申请第三方面的第二数据迁移方法,响应于对多个驱动器的存储资源的使用不均衡,发起数据迁移操作。
根据本申请的第三方面的第二数据迁移方法,提供了根据本申请第三方面的第三数据迁移方法,存储资源使用不均衡时,多个驱动器中被分配大块的数量不一致,或者多个驱动器中被分配大块的数量差异大于阈值。
根据本申请的第三方面的第二数据迁移方法,提供了根据本申请第三方面的第四数据迁移方法,存储资源使用不均衡时,多个驱动器中空闲大块的数量不一致,或者多个驱动器中空闲大块的数量差异大于阈值。
根据本申请的第三方面的第二数据迁移方法,提供了根据本申请第三方面的第五数据迁移方法,存储资源使用不均衡时,各个驱动器的负载不均衡。
根据本申请第三方面的第一至第五数据迁移方法之一,提供了根据本申请第三方面的第六数据迁移方法,多个驱动器的空闲大块的最大值与最小值之差超过阈值时,发起数据迁移操作。
根据本申请第三方面的第一至第五数据迁移方法之一,提供了根据本申请第三方面的第七数据迁移方法,驱动器之一的空闲大块数量与所有驱动器的空闲大块数量的平均值之差超过阈值时,发起数据迁移操作。
根据本申请第三方面的第一至第五数据迁移方法之一,提供了根据本申请第三方面的第八数据迁移方法,响应于存储对象创建失败,发起数据迁移操作。
根据本申请第三方面的第一至第五数据迁移方法之一,提供了根据本申请第三方面的第九数据迁移方法,获取多个驱动器的负载,当多个驱动器的负载不均衡时,发起数据迁移操作。
根据本申请的第三方面的第九数据迁移方法,提供了根据本申请第三方面的第十数据迁移方法,驱动器的负载包括带宽、每秒的IO访问量、数据写入量以及数据读出量中的一种或多种。
根据本申请的第三方面的第九数据迁移方法,提供了根据本申请第三方面的第十一数据迁移方法,多个驱动器的负载不均衡包括:负载的最大值与最小值差异大于阈值,或者驱动器之一的负载同多个驱动器的负载平均值差异大于阈值。
根据本申请第三方面的第一至第五数据迁移方法之一,提供了根据本申请第三方面的第十二数据迁移方法,获取被分配的多个大块的负载,当多个大块的负载不均衡,导致多个驱动器的负载不均衡时,发起数据迁移操作。
根据本申请第三方面的第一至第五数据迁移方法之一,提供了根据本申请第三方面的第十三数据迁移方法,获取和/或估计多个大块上存储的数据的被访问频率,当多个大块存储的数据的访问频率不均衡,导致多个驱动器的被访问的频率不均衡时,发起数据迁移操作。
根据本申请第三方面的第一至第十三数据迁移方法之一,提供了根据本申请第三方面的第十四数据迁移方法,选取空闲大块数量最小或负载最大的驱动器发起数据迁移。
根据本申请第三方面的第一至第十四数据迁移方法之一,提供了根据本申请第三方面的第十五数据迁移方法,从第一驱动器的被分配大块中随机选取大块作为数据迁移的源大块。
根据本申请第三方面的第一至第十四数据迁移方法之一,提供了根据本申请第三方面的第十六数据迁移方法,对第一驱动器的被分配大块排序或指定优先级,按照顺序或优先级选取被分配大块之一作为数据迁移的源大块。
根据本申请的第三方面的第十六数据迁移方法,提供了根据本申请第三方面的第十七数据迁移方法,按照第一驱动器的大块被分配的时间先后、大块的负载、大块上的IO访问模式中的一种或多种作为排序或设置优先级的依据。
根据本申请第三方面的第一至第十七数据迁移方法之一,提供了根据本申请第三方面的第十八数据迁移方法,获取使用了第一驱动器的大块作为存储资源的存储对象,选择存储对象之一,从所选择的存储对象中选取由第一驱动器提供的大块,作为数据迁移的源大块。
根据本申请第三方面的第一至第十八数据迁移方法之一,提供了根据本申请第三方面的第十九数据迁移方法,选择任何的空闲大块作为目的大块。
根据本申请第三方面的第一至第十九数据迁移方法之一,提供了根据本申请第三方面的第二十数据迁移方法,选择来自不同于已为存储对象提供大块的第一驱动器的其他驱动器的大块,作为目的大块。
根据本申请第三方面的第一至第十九数据迁移方法之一,提供了根据本申请第三方面的第二十一数据迁移方法,从空闲大块数量最大或负载最小的驱动器选择大块,作为目的大块。
根据本申请第三方面的第一至第十九数据迁移方法之一,提供了根据本申请第三方面的第二十二数据迁移方法,将源大块的所有数据复制到目的大块。
根据本申请第三方面的第一至第十九数据迁移方法之一,提供了根据本申请第三方面的第二十三数据迁移方法,仅将源大块中的有效数据复制到目的大块。
根据本申请第三方面的第一至第二十三数据迁移方法之一,提供了根据本申请第三方面的第二十四数据迁移方法,更新后的元数据中,记录所述存储对象不再包含源大块,而包含了目的大块。
根据本申请第三方面的第一至第二十四数据迁移方法之一,提供了根据本申请第三方面的第二十五数据迁移方法,在将数据复制到目的大块的过程中,向目的大块中写入存储对象的新的元数据。
根据本申请第三方面的第一至第二十五数据迁移方法之一,提供了根据本申请第三方面的第二十六数据迁移方法,响应于对存储对象的元数据更新完成,回收源大块。
根据本申请第三方面的第一至第二十六数据迁移方法之一,提供了根据本申请第三方面的第二十七数据迁移方法,响应于对存储对象的元数据更新完成,向源大块发出“去分配”命令,以告知第一驱动器其源大块上存储的数据不再有效。
根据本申请的第三方面的第二十七数据迁移方法,提供了根据本申请第三方面的第二十八数据迁移方法,响应于被告知源大块上存储的数据不再有效,第一驱动器擦除源大块所占用的物理块。
根据本申请第三方面的第一至第二十八数据迁移方法之一,提供了根据本申请第三方面的第二十九数据迁移方法,在数据迁移操作的过程中,对被迁移源大块的访问请求,确保数据的一致性。
根据本申请的第三方面的第二十九数据迁移方法,提供了根据本申请第三方面的第三十数据迁移方法,对发生数据迁移的源大块或其在存储对象中的地址空间加锁,响应于出现对源大块的访问请求,检查锁是否存在。
根据本申请的第三方面的第三十数据迁移方法,提供了根据本申请第三方面的第三十一数据迁移方法,若在源大块上存在锁,则暂停对访问源大块的访问请求的处理,待锁消除后,再响应被暂停的访问请求。
根据本申请的第三方面的第二十九数据迁移方法,提供了根据本申请第三方面的第三十二数据迁移方法,在数据迁移期间,对源大块加锁,以阻止对源大块的后续写请求。
根据本申请的第三方面的第三十二数据迁移方法,提供了根据本申请第三方面的第三十三数据迁移方法,响应于锁的存在,暂停对访问源大块的写请求的处理。
根据本申请的第三方面的第三十二数据迁移方法,提供了根据本申请第三方面的第三十四数据迁移方法,待锁消除后,再响应被暂停的写请求。
根据本申请第三方面的第三十二至第三十四数据迁移方法之一,提供了根据本申请第三方面的第三十五数据迁移方法,对于读请求,无论锁是否存在,访问源大块来响应读请求。
根据本申请第三方面的第一至第三十五数据迁移方法之一,提供了根据本申请第三方面的第三十六数据迁移方法,对同一存储对象的数据迁移与数据重构不同时发生。
根据本申请第三方面的第一至第三十六数据迁移方法之一,提供了根据本申请第三方面的第三十七数据迁移方法,若属于某存储对象的任何大块正在进行数据迁移,则对该存储对象的数据重构被延后。
根据本申请第三方面的第一至第三十七数据迁移方法之一,提供了根据本申请第三方面的第三十八数据迁移方法,若对某存储对象正在进行数据迁移,则对该存储对象的任何大块的数据迁移被延后。
根据本申请第三方面的第一至第三十八数据迁移方法之一,提供了根据本申请第三方面的第三十九数据迁移方法,若既要对存储对象进行数据重构,也要对存储对象的大块进行数据迁移,在二者都未开始的情况下,优先处理数据重构。
根据本申请第三方面的第一至第三十九数据迁移方法之一,提供了根据本申请第三方面的第四十数据迁移方法,若数据迁移过程中,源大块发生故障,则终止数据迁移过程,释放目的大块,通过存储对象的数据重构过程恢复源大块的数据,并用新的大块替代源大块以完成对存储对象的数据重构。
根据本申请第三方面的第一至第四十数据迁移方法之一,提供了根据本申请第三方面的第四十一数据迁移方法,若数据迁移过程中,目的大块发生故障,终止数据迁移过程。
根据本申请第三方面的第一至第四十一数据迁移方法之一,提供了根据本申请第三方面的第四十二数据迁移方法,设定第一驱动器的源大块处于“数据迁移”状态。
根据本申请的第三方面的第四十二数据迁移方法,提供了根据本申请第三方面的第四十三数据迁移方法,响应于对存储对象的元数据更新完成,清除为源大块所设定的“数据迁移”状态,以指示数据迁移操作完成。
根据本申请的第三方面的第四十二数据迁移方法,提供了根据本申请第三方面的第四十四数据迁移方法,还包括:接收访问处于“数据迁移”状态的源大块的IO请求;响应于IO请求是写请求,将写请求对应的数据既写入源大块,也写入目的大块。
根据本申请的第三方面的第四十四数据迁移方法,提供了根据本申请第三方面的第四十五数据迁移方法,还包括:响应于IO请求是读请求,访问源大块获取数据以响应读请求。
根据本申请的第三方面的第四十四数据迁移方法,提供了根据本申请第三方面的第四十六数据迁移方法,在数据迁移期间,对于从源大块复制到目的大块的数据,向目的大块写入之前还检查目的大块的对应位置是否已被写入数据,若该对应位置已被写入数据,则不将来自源大块的对应数据再次写入目的大块。
根据本申请的第三方面的第四十四数据迁移方法,提供了根据本申请第三方面的第四十七数据迁移方法,在数据迁移期间,将来自源大块的数据都写入目的大块的对应位置,而无论该对应位置是否已被写入数据。
根据本申请的第三方面的第四十二数据迁移方法,提供了根据本申请第三方面的第四十八数据迁移方法,还包括:接收访问处于“数据迁移”状态的源大块的IO请求;响应于IO请求是写请求,判断写请求所访问的地址是否超前于当前数据迁移地址;若写请求所访问的地址超前于当前数据迁移地址,根据写请求将数据写入源大块;若写请求所访问的地址不超前于当前数据迁移地址,根据写请求将数据写入目的大块。
根据本申请的第三方面的第四十八数据迁移方法,提供了根据本申请第三方面的第四十九数据迁移方法,还包括:响应于IO请求是读请求,判断读请求所访问的地址是否超前于当前数据迁移地址;若读请求所访问的地址超前于当前数据迁移地址,根据读请求从源大块获取数据;若读请求所访问的地址不超前于当前数据迁移地址,根据读请求从目的大块获取数据。
根据本申请的第三方面的第四十八数据迁移方法,提供了根据本申请第三方面的第五十数据迁移方法,为进行数据迁移,按源大块的地址顺序,将源大块的数据复制到目的大块,并记录当前正在被复制的地址,当前正在被复制的地址为当前数据迁移地址。
根据本申请的第四方面,提供了根据本申请第四方面的第一数据迁移系统,包括:源大块获取模块,响应于发起数据迁移操作,从第一驱动器移出数据,选取第一驱动器的被分配的大块作为数据迁移的源大块,获取使用了源大块的存储对象;目的大块获取模块,选取数据迁移的目的大块,用于承载源大块的数据,其中目的大块位于第二驱动器;复制模块,将源大块的数据复制到目的大块;更新模块,更新存储对象的元数据;回收模块,响应于对存储对象的元数据更新完成,回收源大块。
根据本申请的第五方面,提供了根据本申请第五方面的第一数据迁移过程中处理IO 请求的方法,包括:接收访问“数据迁移”状态的源大块的IO请求;响应于IO请求是写请求,将写请求对应的数据既写入源大块,也写入目的大块。
根据本申请的第五方面的第一数据迁移过程中处理IO请求的方法,提供了根据本申请第五方面的第二数据迁移过程中处理IO请求的方法,还包括:识别IO请求是读请求还是写请求;响应于IO请求是读请求,访问源大块获取数据以响应读请求。
根据本申请的第五方面的第一数据迁移过程中处理IO请求的方法,提供了根据本申请第五方面的第三数据迁移过程中处理IO请求的方法,在数据迁移期间,对于从源大块复制到目的大块的数据,向目的大块写入之前还检查目的大块的对应位置是否已被写入数据,若该对应位置已被写入数据,则不将来自源大块的对应数据再次写入目的大块。
根据本申请的第五方面的第一数据迁移过程中处理IO请求的方法,提供了根据本申请第五方面的第四数据迁移过程中处理IO请求的方法,在数据迁移期间,将来自源大块的数据都写入目的大块的对应位置,而无论该对应位置是否已被写入数据。
根据本申请的第六方面,提供了根据本申请第六方面的第一数据迁移过程中处理IO 请求的方法,包括:接收访问“数据迁移”状态的源大块的IO请求;响应于IO请求是写请求,判断写请求所访问的地址是否超前于“当前数据迁移地址”;若写请求所访问的地址超前于当前数据迁移地址,根据写请求将数据写入源大块;若写请求所访问的地址不超前于当前数据迁移地址,根据写请求将数据写入目的大块。
根据本申请的第六方面的第一数据迁移过程中处理IO请求的方法,提供了根据本申请第六方面的第二数据迁移过程中处理IO请求的方法,还包括:响应于IO请求是读请求,判断读请求所访问的地址是否超前于当前数据迁移地址;若读请求所访问的地址超前于当前数据迁移地址,根据读请求从源大块获取数据;若读请求所访问的地址不超前于当前数据迁移地址,根据读请求从目的大块获取数据。
根据本申请的第六方面的第二数据迁移过程中处理IO请求的方法,提供了根据本申请第六方面的第三数据迁移过程中处理IO请求的方法,为进行数据迁移,按源大块的地址顺序,将源大块的数据复制到目的大块,并记录当前正在被复制的地址,当前正在被复制的地址为当前数据迁移地址。
根据本申请的第七方面,提供了一种包含程序代码的程序,当被载入CPU并在CPU中执行时,程序使CPU执行第一方面、第三方面、第五方面或第六方面所述的方法之一。
根据本申请的第八方面,提供了一种包含程序代码的程序,当被载入主机并在主机上执行时,所述程序使主机的处理器执行第一方面、第三方面、第五方面或第六方面所述的方法之一。
本申请的技术方案有以下优点:
通过数据迁移过程保障存储系统的存储资源被均衡使用,且数据迁移过程不影响存储系统的使用。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1示出了根据本申请实施例的存储系统的架构;
图2示出了根据本申请实施例的存储对象的结构;
图3是根据本申请的实施例驱动器发生故障的示意图;
图4A是根据本申请的实施例对存储对象实施重构的示意图;
图4B是根据本申请的实施例对存储对象实施重构的流程图;
图5是根据本申请的另一实施例的对存储对象实施重构的示意图;
图6是根据本申请的又一实施例的对存储对象实施重构的示意图;
图7是根据本申请的依然另一实施例的对存储对象实施重构的示意图;
图8是根据本申请实施例的数据迁移的示意图;
图9是根据本申请实施例的数据迁移方法的流程图;
图10是根据本申请实施例的数据迁移过程中处理IO请求的流程图;
图11是根据本申请又一实施例的数据迁移过程中处理IO请求的流程图;
图12是现有技术的RAID系统的示意图。
具体实施方式
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参看图1,图1示出了根据本申请实施例的存储系统的架构。根据本申请的存储系统包括计算机或服务器(统称为主机)以及耦合到主机的多个驱动器。优选地,驱动器是固态驱动器(SSD)。可选地,根据本申请的实施例中也可以包括磁盘驱动器。
通过存储资源池来维护各个驱动器提供的存储资源。存储资源池中记录了各个驱动器中的数据块或数据大块(Chunk,简称大块)。作为举例,数据大块是预定大小的逻辑空间或物理空间连续的多个数据块。数据大块的大小,作为举例,可以是数百KB或MB。可选地,存储资源中记录的是各个驱动器中尚未分配给存储对象的数据块或数据大块,这些数据块或数据大块又被成为空闲数据块或空闲数据大块。存储资源池是一种虚拟化技术,将来自物理驱动器的存储资源虚拟化为数据块或数据大块以供上层访问或使用。在存储系统中,存储资源池可以有多个,而在图1的例子中,仅展示了单一的存储资源池。
根据本申请实施例中提供的存储对象,代表存储系统的部分存储空间。存储对象是带有RAID功能的存储单元,后面会结合图2详细描述存储对象结构。根据本申请的实施例中提供存储对象层,存储对象层提供多个存储对象。存储对象可以被创建和销毁。一个存储对象被创建时,从通过分配器从存储资源池中获取所需数量的大块,这些大块组成存储对象。一个大块在同一时刻可以仅属于一个存储对象。已经被分配给存储对象的大块不会再被分配给其他存储对象。存储对象被销毁时,构成该存储对象的大块被释放回存储资源池,并可被再次分配给其他存储对象。根据本申请实施例的数据重构方法,是针对存储对象进行数据重构。
图2示出了根据本申请实施例的存储对象的结构。存储对象包括多个数据块或数据大块。在图2的例子中,存储对象包括大块220、大块222、大块224以及大块226。构成存储对象的大块来自不同的驱动器。参看图2,大块220来自驱动器210,大块222来自驱动器212,大块224来自驱动器214以及大块226来自驱动器216。从而,当单一驱动器发生故障时,存储对象中的一个或少数大块无法访问,而通过存储对象的其他大块,能够重建存储对象的数据,以满足数据可靠性的要求。
通过RAID技术为存储对象提供数据保护,并提供存储对象的高性能访问。参看图2,存储对象包括多个RAID条带(条带230、条带232……条带238),每个条带由来自不同大块的存储空间组成。同一条带的来自不同大块的存储空间可具有相同或不同的地址范围。条带是存储对象的最小写入单位,从而通过向多块驱动器的并行写入数据来提升性能。存储对象的读操作没有大小限制。在条带中实现RAID技术。依然参看图2,构成条带230的来自4个大块的存储空间中,3个存储空间用于存储用户数据,而另1个存储空间用于存储校验数据,使得在条带230上提供RAID5级别的数据保护。
可选地,每个大块中还存储元数据信息。在图2的例子中,大块220-大块226的每个上都保存相同的元数据信息,从而保证了元数据信息的可靠性,即使属于同一存储对象的部分大块发生故障,从其他大块中依然能获取元数据信息。元数据用于记录大块所属的存储对象、大块所在存储对象的数据保护级别(RAID级别)、大块的擦写次数等信息。
图3是根据本申请的实施例驱动器发生故障的示意图。在图3中,一块驱动器发生故障(由多条竖线指示故障状态),并导致由故障驱动器提供的大块无法使用,需要对使用了这块驱动器的大块作为存储资源的那些存储对象进行重构。参看图3,故障驱动器提供了4个大块,而存储对象1、存储对象4、存储对象6与存储对象7使用了来自故障驱动器的大块,因而需要对存储对象1、存储对象4、存储对象6与存储对象7进行重构。
虽然图3中,示出了存储资源池中的大块出现故障,并且这些大块已经分配了存储对象,然而在其他的实施方式中,存储资源池中仅维护尚未被分配给存储对象的大块。在存储对象的大块的元数据中记录了大块与存储对象的对应关系,还可以另外地维护已使用的大块与存储对象的对应关系,使得在驱动器故障时,能够获取受到影响的存储对象。
图4A是根据本申请的实施例对存储对象实施重构的示意图。参看图4A,故障驱动器导致存储对象1的大块4无法访问,需要对存储对象1进行重构。由于存储对象1中得到RAID5技术(作为举例)的保护,虽然大块4无法访问,但通过构成存储对象1的大块1、大块2与大块3能够恢复出大块4的数据。
为实施重构,从存储资源池中为存储对象1分配新的大块(大块5),以替换发生故障的带块4。可从存储资源池中选择任何的空闲大块分配给存储对象1。可选地,选择来自不同驱动器的大块分配给存储对象1,以保证访问存储对象1时能够充分利用多个驱动器提供的并行性。例如,参看图4A,构成存储对象1的大块1来自驱动器2,大块 2来自驱动器3,大块3来自驱动器4,而发生故障的大块4来自故障驱动器,那么从尚未给存储对象1提供的大块的驱动器中选择一个驱动器(例如,驱动器8)来为存储对象1提供新的大块(例如,大块5)。以此方式,使得存储对象中的大块分别来自于不同的驱动器,因此,在重构的过程中,所有驱动器都会参与到重构中,因而不会因单盘读/写操作而影响性能,因此可以实现快速重构。
对于故障驱动器使得多个存储对象都需要重建的情况下,新分配的空闲大块来自于不同的驱动器。对空闲大块的写操作被分散到不同的驱动器上,消除了现有技术中的重构技术引入的单盘瓶颈。
在另一个实施例中,从存储资源池中随机选取大块,而不必考虑存储对象已经使用了来自哪些驱动器的大块。由于存储系统中有较多数量的驱动器,随机选取大块的方式使得从相同驱动器中为同一存储对象分配多个大块的几率较低,以及在需要重构多个存储对象的情况下,新分配的大块来自随机选择的驱动器,从而重构时引起的写操作也被分散到不同的驱动器。
在依然另一个实施例中,从存储资源池中选取大块时,选取工作负载轻和/或空闲容量多(未被分配的大块多)的驱动器来提供大块,从而使存储系统的负载在多个驱动器之间更好的分配,以提升存储系统的性能、寿命和/或可靠性。
在对存储对象实施重构时,将数据写入新分配的大块5。从构成存储对象的其他大块中恢复出故障大块3的数据,并将恢复的数据写入新分配的大块5。由于构成存储对象的大块发生变化,可选地,还更新属于存储对象1的各个大块上记录的元数据,以反映存储对象1的变化。
图4B是根据本申请的实施例对存储对象实施重构的流程图。响应于存储系统中的(一个或多个)驱动器出现故障,获取使用了故障驱动器提供的大块的(一个或多个) 存储对象(410)。由于在大块的元数据中存储了大块与存储对象的对应关系,从中能够识别故障驱动器提供的大块被哪个或哪些存储对象所使用。在另外的例子中,也单独地维护记录大块与存储对象的对应关系的表,从而有效识别故障驱动器所影响的存储对象。
从存储资源池中获取空闲大块(参见图4A,大块5)分配给存储对象1(420)。有多种选取空闲大块的策略。例如,从存储资源池中随机选取大块,或者选取来自存储对象1未使用的驱动器提供的大块。
从存储对象1的未发生故障的大块(参看图4A,大块1、大块2与大块3)中重建故障大块4的数据,并将重建的数据写入新分配的大块5(430)。可选地,还更新存储对象1的大块(参看图4A,大块1、大块2、大块3与大块5)的元数据信息,以反映对存储对象1的重构。
对于受故障驱动器所影响的每个存储对象,通过图4B所示出的方法实施重构。
在进一步的实施例中,故障驱动器被更换,新的驱动器被安装或加入到存储资源池,使存储资源池维护新驱动器提供的大块,以供分配给存储对象。
通过本申请实施例,实现了存储对象的重构的性能随存储系统内驱动器的数量变化而线性增加,具有良好的扩展性,实现了快速重构的目的。
图5是根据本申请的另一实施例的对存储对象实施重构的示意图。
基于存储对象的重构可以实现对数据的感知重构。在根据本申请的实施例中,所有的重构操作都是针对已经被写入数据的存储对象,用户请求的数据都将被映射到对存储对象的访问,而没有写入数据的存储空间(例如,数据块或大块)并不会分配给存储对象。
现有技术的重构中无法判断存储位置是否被写入有效数据,因而要对全盘进行长时间重构。而在图5的实施例中,驱动器1发生故障(由图5中的多条竖线示出),驱动器1 提供了多个大块(由图5中的多条竖线示出)。而仅有大块4被分配给存储对象(参看图5,存储对象1),驱动器1的其他大块并未被分配给存储对象。选出占用故障驱动器 1中的大块的那些存储对象(参看图5,存储对象1)进行重构。存储对象是在被写入用户有效数据时创建的,在创建存储对象时为其分配大块。因而存储对象中一定存有用户有效数据。在图5的实施例中,仅对存储对象1进行重构,从存储资源池中选择新的大块(大块5)来替换故障的大块4,并恢复大块4的数据写入新分配给存储对象1的大块 5。
在另一个例子中,驱动器发生故障,但故障驱动器的大块未分配给任何存储对象,那么无需进行重构,故障驱动器可以直接移除或被更换。依然参看图5,虽然驱动器1 发生故障,但存储对象2的多个大块(大块6、大块7、大块8与大块9)没有任何一个来自驱动器1,因而无需对存储对象2进行重构。
虽然图5中,示出了存储资源池中的大块出现故障,并且这些大块之一(大块4) 被分配了存储对象,而其他故障大块并未被分配给存储对象,然而在其他的实施方式中,存储资源池中仅维护尚未被分配给存储对象的大块。
图6是根据本申请的又一实施例的对存储对象实施重构的示意图。在图6所示出的重构中,实现了优先级重构。参看图6的实施例,有6个存储对象存在故障大块(由图6 中的多条竖线示出),需要重构。比较需要重构的存储对象的故障等级,发现存储对象11 与存储对象12的4个大块中有2个大块发生故障,而存储对象6、存储对象7、存储对象9以及存储对象10的4个大块中,有1个大块发生故障。作为举例,对于实现RAID6 的存储对象,有两个大块故障的存储对象,如不尽快进行重构,一旦再出现大块故障,就会导致数据丢失,因而在图6的存在故障的6个存储对象中,存储对象11与存储对象 12迫切需要重构。存储对象中故障大块数量的多少指示了故障级别,在根据本申请的实施例中,对故障大块的数量多的存储对象优先进行重构。参看图6,根据故障优先级,存储对象11与存储对象12各有两个大块存在故障,必须被优先进行重构,防止数据丢失。
除了故障大块数量,有多种因素用于评估重构的优先级。例如,存储对象中故障大块与正常大块的比例,存储对象的数据保护级别(RAID级别)与故障大块的数量,存储对象中存储的数据的属性(数据重要性、数据访问频度等)等。
图7是根据本申请的依然另一实施例的对存储对象实施重构的示意图。在图7的实施例中,存储资源池感知驱动器的部分地址空间出现故障(由图7中的多条竖线示出)。
在一个例子中,驱动器提供多个命名空间(Name Space),每个命名空间占据整个逻辑地址空间的部分。由于多种原因(例如,驱动器的控制器更新,命名空间重新分配,驱动器主动限制了给存储系统的使用配额等),命名空间临时不可用,并导致由该命名空间提供的大块不可用。在另一个例子中,驱动器向存储系统提供物理地址空间,存储系统直接通过物理地址访问驱动器。由于出现坏块、存储介质到达预期寿命等原因,部分物理地址空间变得不可用。
基于出现故障的地址空间,获知存在故障的大块,进而确定故障所影响的存储对象 (参看图7,存储对象6与存储对象7),并对存储对象6与存储对象7实施重构。从而仅针对驱动器故障所影响的存储对象实施重构,避免了全驱动器重构对存储系统性能的影响。
图8是根据本申请实施例的数据迁移的示意图。
根据图8的实施例的存储系统包括多个驱动器(例如,驱动器810、820、830、840 与850)。驱动器为存储系统提供大块作为存储资源。如图8所示,驱动器810提供大块812、814、816与818,驱动器820提供大块822、824、826与828,驱动器830提供大块832、834、836与838,驱动器840提供大块842、844、846与848,驱动器850提供大块852、854、856与858。
资源分配器将存储资源池中的大块分配给存储对象。随着存储对象被创建、使用和销毁,存储对象重构、驱动器更新等事件的发生,存储系统的多个驱动器的存储资源变得不均衡。参照图8,由阴影指示的大块(例如,大块812、822、824等)是被分配给存储对象的大块,而不包含阴影的大块是未被分配给存储对象的空闲大块(例如,大块 814、826等)。参看图8,驱动器810中,大块812是被分配大块,而大块814、816、818是空闲大块,而驱动器840中,所有大块均为被分配大块,驱动器850中,所有大块均为空闲大块。从而图8中的多个驱动器的存储资源是不均衡的。存储资源的不均衡,体现在多个驱动器中被分配大块的数量不一致,或者多个驱动器中被分配大块的数量差异较大。存储资源的不均衡,也体现在多个驱动器中空闲大块的数量不一致,或者多个驱动器中空闲大块的数量差异较大。
存储系统中的多个驱动器的存储资源不均衡,为存储系统带来诸多不良影响。例如,存储对象创建失败。为创建存储对象,并保障存储对象的可靠性,而需要避免使构成存储对象的两个或多个大块来自相同的驱动器。在多个驱动器的存储资源不均衡时,即使存储资源池有足够数量的空闲大块,可能由于无法满足使大块来自不同驱动器的要求而导致创建对象失败。
存储系统中的多个驱动器的存储资源不均衡,还会导致各个驱动器的负载不均衡,导致驱动器的寿命消耗速度不均衡以及存储系统性能得不到发挥。例如,图8中,驱动器840的大块均被分配给存储对象,而驱动器810中仅大块812被分配给存储对象。这导致在一般的读写模式情况下,同驱动器810相比,驱动器840会承担更多的读写请求,并由于驱动器840更多的被使用而导致其寿命消耗速度快于驱动器810。并且,驱动器 840承担更多的读写请求,也加剧了驱动器840的设备接口的流量负担,导致驱动器840 的访问延迟边长,并可能称为整个存储系统的性能瓶颈。
作为举例,图8中,驱动器850是被新添加到存储系统中的驱动器。驱动器850的大块都是空闲大块,这使得存储系统的多个驱动器的存储资源不均衡性变得更加严重。
根据本申请的实施例,通过实施数据迁移来缓存存储系统的多个驱动器的存储资源的使用不均衡性。例如,通过将存储系统中驱动器840的部分被分配大块的数据迁移到驱动850的空闲大块,来缓和多个驱动器的存储资源的使用不均衡性。作为举例,大块 858属于存储对象8,在数据迁移过程中,将大块848的数据复制到大块858,更新存储对象8的元数据,以记录大块858属于存储对象8而大块848不再数据大块8,以及销毁大块848,使其变为空闲大块。
发起数据迁移操作的时机被谨慎的选择。在一个例子中,构成存储资源池的多个驱动器中,驱动器的空闲大块的最大值与最小值之差超过阈值(例如,10)时,发起数据迁移操作,以减小驱动器的空闲大块的最大值与最小值之差。作为另一个例子,构成存储资源池的多个驱动器中,驱动器之一的空闲大块数量与所有驱动器的空闲大块数量的平均值之差超过阈值时,发起数据迁移操作。在又一个例子中,响应于存储对象创建失败,发起数据迁移操作。在依然又一个例子中,获取构成存储资源池的多个驱动器的负载(例如,带宽、IOPS(每秒的IO访问量)、数据写入量、数据读出量等),当多个驱动器的负载不均衡(例如,负载的最大值与最小值差异过大,大于阈值,或者驱动器之一的负载同多个驱动器的负载平均值差异过大,大于阈值)时,发起数据迁移操作。作为依然另一个例子,获取被分配的多个大块的负载,当多个大块的负载不均衡,导致多个驱动器的负载不均衡时,发起数据迁移操作,以使得各个驱动器的负载大体上均衡。作为依然另一个例子,统计和/或估计多个大块上存储的数据的被访问频率,当多个大块存储的数据的访问频率不均衡,导致多个驱动器的被访问的频率不均衡时,发起数据迁移操作,以使得各个驱动器的被访问的频率大体上均衡。
作为举例,选取空闲大块数量最小或负载最大的驱动器(例如,图8的驱动器840)发起数据迁移。
参看图9,展示了根据本申请实施例的数据迁移方法的流程图。响应于确定发起数据迁移操作,从驱动器840(参看图8)移出数据,选取驱动器840的被分配的大块作为数据迁移的源大块(910)。可选地,从驱动器840的被分配大块中随机选取大块848作为数据迁移的源大块。依然可选地,对驱动器840的被分配大块排序或指定优先级,按照顺序或优先级选取被分配大块之一。例如,按照驱动器840的大块被分配的时间先后、大块的负载、大块上的IO访问模式等作为排序或设置优先级的依据。以及还依据大块 848,大块848处于“数据迁移”状态。依然可选地,获取使用了驱动器840的大块作为存储资源的存储对象,选择存储对象之一(例如,已经被写满数据的存储对象8),从所选择的存储对象中选取由驱动器840提供的大块,作为数据迁移的源大块(例如,大块848)。
选取数据迁移的目的大块(920),用于承载源大块848的数据。作为举例,同存储对象重构中获取空闲大块的方式类似,资源分配器从存储资源池中为存储对象8分配空闲大块(例如,大块858)。例如,从存储资源池中选择任何的空闲大块分配给存储对象8。可选地,选择来自不同于已为存储对象8提供大块的驱动器的其他驱动器的大块,分配给存储对象8,以保证访问存储对象8时能够充分利用多个驱动器提供的并行性。优选地,为获得更好的数据迁移的效果,从空闲大块数量最大或负载最小的驱动器选择大块,作为目的大块。
接下来,将源大块848中的数据复制到目的大块858(930)。在一个实施方式中,将源大块848的所有数据复制到目的大块858。在又一个实施方式中,仅将源大块848 中的有效数据复制到目的大块858。以及更新存储对象8的元数据(940),以记录存储对象8不再包含大块848,而包含了大块858。可选地,在将数据复制到大块858的过程中,向大块858写入存储对象8的新的元数据。
响应于对存储对象8的元数据更新完成,回收源大块848(950)。将源大块848归还给存储资源池,使其可再被分配给其他存储对象。以及还清除为大块848所记载的“数据迁移”状态,以指示数据迁移操作完成。可选地,还向大块848发出“去分配(Trim)”命令,以告知驱动器大块848上存储的数据不再有效。作为响应,驱动器可擦除大块848 所占用的物理块,释放大块848所占用的存储空间。
根据本申请的实施例,在数据迁移操作的过程中,若出现对被迁移大块的访问请求,需要保证数据一致性。例如,若数据迁移已接近完成,而根据写请求向源带块写入了数据,则新写入的数据很可能错过了被复制到目的大块的时机,导致迁移完成后,目的大块没有记录新写入的数据。
在一种实施方式中,对发生数据迁移的源大块848或其在存储对象8中的地址空间加锁,响应于出现对源大块848的访问请求,检查锁是否存在。若在源大块848上存在锁,则暂停对访问大块848的访问请求的处理,缓存这些访问请求,待锁消除(数据迁移操作完成)后,再访问目的大块858来响应被暂停的访问请求。
在又一种实施方式中,在数据迁移期间,对源大块848加锁,以阻止对源大块848的写请求。响应于锁的存在,暂停对访问大块848的写请求的处理,缓存这些写请求。而对于读请求,不检查锁的存在,而访问源大块848来响应读请求。待锁消除(数据迁移操作完成)后,再访问目的大块858来响应被暂停的写请求。
在另一种实施方式中,参看图10,展示了根据本申请实施例的数据迁移过程中处理 IO请求的流程图。在数据迁移过程中,对IO请求提供及时的响应。在数据迁移期间,正在发生数据迁移的大块(例如大块848)被标记为处于“数据迁移”状态。响应于接收IO请求(1010),若IO请求访问处于“数据迁移”状态的大块,识别IO请求是读请求还是写请求(1020)。对于读请求,访问源大块848获取数据以响应读请求(1022)。对于写请求,将写请求对应的数据既写入源大块(1024),也写入目的大块(1026)。从而既保证读请求获得的数据可以是最新被写入的数据,又保证写请求写数据的数据被记录到目的大块中。进一步地,在数据迁移期间,对于从源大块复制到目的大块的数据,向目的大块写入之前还检查目的大块的对应位置是否已被写入数据(因响应写请求),若该对应位置已被写入数据,则不将来自源大块的对应数据再次写入目的大块,以降低数据写入量,增长驱动器寿命。可以理解地,对于未被标记为处于“数据迁移”状态的大块,直接处理访问大块的IO请求,无须应用步骤1020及其后的处理步骤。
在依然另一种实施方式中,参看图11,展示了根据本申请又一实施例的数据迁移过程中处理IO请求的流程图。在数据迁移过程中,对IO请求提供及时的响应。在数据迁移期间,正在发生数据迁移的大块(例如大块848)被标记为处于“数据迁移”状态。以及为进行数据迁移,按源大块的地址顺序,将源大块的数据复制到目的大块,并记录当前正在被复制的地址(称为“当前数据迁移地址”)。
响应于接收IO请求(1110),若IO请求访问处于“数据迁移”状态的大块,识别 IO请求是读请求还是写请求(1120)。对于写请求,进一步判断写请求所访问的地址是否超前于“当前数据迁移地址”(1140)。其中“超前”意味着写请求所访问的地址尚未完成数据迁移。若写请求所访问的地址超前于“当前数据迁移地址”,根据写请求将数据写入源大块(1144);若写请求所访问的地址不超前于“当前数据迁移地址”,根据写请求将数据写入目的大块(1142)。而对于被写入源大块的数据,将会随着数据迁移过程,再被从源大块复制到目的大块,从而保证目的大块中存储的是最新写入的数据。
对于读请求,进一步判断读请求所访问的地址是否超前于“当前数据迁移地址”(1130)。其中“超前”意味着读请求所访问的地址尚未完成数据迁移。若读请求所访问的地址超前于“当前数据迁移地址”,根据读请求从源大块获取数据(1134);若读请求所访问的地址不超前于“当前数据迁移地址”,根据读请求从目的大块获取数据 (1132)。
根据本申请的实施例,数据迁移与对存储对象的数据重构不同时发生。若属于某存储对象的任何大块正在进行数据迁移,则对该存储对象的数据重构被延后,例如等待数据完成,在进行数据重构。若对某存储对象正在进行数据迁移,则对该存储对象的任何大块的数据迁移也被延后,例如,等待数据重构完成,再进行数据迁移。可选地,若既要对存储对象进行数据重构,也要对存储对象的大块进行数据迁移,在二者都未开始的情况下,优先处理数据重构,以保障存储系统的数据可靠性。
根据本申请的实施例,若数据迁移过程中,源大块发生故障,则终止数据迁移过程,将目的大块归还存储资源池(即使目的大块已被写入了部分数据),并通过存储对象的数据重构过程恢复源大块的数据,并用新的大块替代源大块以完成对存储对象的数据重构。被终止的数据迁移过程可以不再进行。
根据本申请的实施例,若数据迁移过程中,目的大块发生故障,终止数据迁移过程,源大块依然属于其存储对象。可选地,若目的大块承载了来自写命令的数据,还将这些写命令的数据写入源大块。以及再次通过例如图9的流程来对源大块进行数据迁移。
本申请实施例还提供一种包含程序代码的程序,当被载入CPU并在CPU中执行时,程序使CPU执行上面提供的根据本申请实施例的方法之一。
本申请实施例还提供一种包括程序代码的程序,当被载入主机并在主机上执行时,所述程序使主机的处理器执行上面提供的根据本申请实施例的方法之一。
应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。
这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。
因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。
虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本申请的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本申请的范围。
这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本申请的很多修改和其他实施方式。因此,应该理解,本申请不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。
Claims (42)
1.一种数据迁移方法,其特征在于,包括:
响应于发起数据迁移操作,从第一驱动器移出数据,选取第一驱动器的被分配的大块作为数据迁移的源大块,获取使用了源大块的存储对象;
选取数据迁移的目的大块,用于承载源大块的数据,其中目的大块位于第二驱动器;
将源大块的数据复制到目的大块;
更新存储对象的元数据;
响应于对存储对象的元数据更新完成,回收源大块;
响应于对多个驱动器的存储资源的使用不均衡,发起数据迁移操作。
2.如权利要求1所述的数据迁移方法,其特征在于,存储资源使用不均衡时,多个驱动器中被分配大块的数量不一致,或者多个驱动器中被分配大块的数量差异大于阈值。
3.如权利要求1所述的数据迁移方法,其特征在于,存储资源使用不均衡时,多个驱动器中空闲大块的数量不一致,或者多个驱动器中空闲大块的数量差异大于阈值。
4.如权利要求1所述的数据迁移方法,其特征在于,存储资源使用不均衡时,各个驱动器的负载不均衡。
5.如权利要求1至4任一项所述的数据迁移方法,其特征在于,多个驱动器的空闲大块的最大值与最小值之差超过阈值时,发起数据迁移操作。
6.如权利要求1至4任一项所述的数据迁移方法,其特征在于,驱动器之一的空闲大块数量与所有驱动器的空闲大块数量的平均值之差超过阈值时,发起数据迁移操作。
7.如权利要求1至4任一项所述的数据迁移方法,其特征在于,响应于存储对象创建失败,发起数据迁移操作。
8.如权利要求1至4任一项所述的数据迁移方法,其特征在于,获取多个驱动器的负载,当多个驱动器的负载不均衡时,发起数据迁移操作;其中,驱动器的负载包括带宽、每秒的IO访问量、数据写入量以及数据读出量中的一种或多种。
9.如权利要求8所述的数据迁移方法,其特征在于,多个驱动器的负载不均衡包括:负载的最大值与最小值差异大于阈值,或者驱动器之一的负载同多个驱动器的负载平均值差异大于阈值。
10.如权利要求1至4任一项所述的数据迁移方法,其特征在于,获取被分配的多个大块的负载,当多个大块的负载不均衡,导致多个驱动器的负载不均衡时,发起数据迁移操作。
11.如权利要求1至4任一项所述的数据迁移方法,其特征在于,获取和/或估计多个大块上存储的数据的被访问频率,当多个大块存储的数据的访问频率不均衡,导致多个驱动器的被访问的频率不均衡时,发起数据迁移操作。
12.如权利要求1至4任一项所述的数据迁移方法,其特征在于,选取空闲大块数量最小或负载最大的驱动器发起数据迁移。
13.如权利要求1至4任一项所述的数据迁移方法,其特征在于,从第一驱动器的被分配大块中随机选取大块作为数据迁移的源大块。
14.如权利要求1至4任一项所述的数据迁移方法,其特征在于,对第一驱动器的被分配大块排序或指定优先级,按照顺序或优先级选取被分配大块之一作为数据迁移的源大块,其中,按照第一驱动器的大块被分配的时间先后、大块的负载、大块上的IO访问模式中的一种或多种作为排序或设置优先级的依据。
15.如权利要求1至4任一项所述的数据迁移方法,其特征在于,获取使用了第一驱动器的大块作为存储资源的存储对象,选择存储对象之一,从所选择的存储对象中选取由第一驱动器提供的大块,作为数据迁移的源大块。
16.如权利要求1至4任一项所述的数据迁移方法,其特征在于,选择任何的空闲大块作为目的大块。
17.如权利要求1至4任一项所述的数据迁移方法,其特征在于,选择来自不同于已为存储对象提供大块的第一驱动器的其他驱动器的大块,作为目的大块。
18.如权利要求1至4任一项所述的数据迁移方法,其特征在于,从空闲大块数量最大或负载最小的驱动器选择大块,作为目的大块。
19.如权利要求1至4任一项所述的数据迁移方法,其特征在于,将源大块的所有数据复制到目的大块。
20.如权利要求1至4任一项所述的数据迁移方法,其特征在于,仅将源大块中的有效数据复制到目的大块。
21.如权利要求1至4任一项所述的数据迁移方法,其特征在于,更新后的元数据中,记录所述存储对象不再包含源大块,而包含了目的大块。
22.如权利要求1至4任一项所述的数据迁移方法,其特征在于,在将数据复制到目的大块的过程中,向目的大块中写入存储对象的新的元数据。
23.如权利要求1至4任一项所述的数据迁移方法,其特征在于,响应于对存储对象的元数据更新完成,向源大块发出“去分配”命令,以告知第一驱动器其源大块上存储的数据不再有效。
24.如权利要求1至4任一项所述的数据迁移方法,其特征在于,响应于被告知源大块上存储的数据不再有效,第一驱动器擦除源大块所占用的物理块。
25.如权利要求24所述的数据迁移方法,其特征在于,在数据迁移操作的过程中,对被迁移源大块的访问请求,确保数据的一致性。
26.如权利要求25所述的数据迁移方法,其特征在于,对发生数据迁移的源大块或其在存储对象中的地址空间加锁,响应于出现对源大块的访问请求,检查锁是否存在。
27.如权利要求26所述的数据迁移方法,其特征在于,若在源大块上存在锁,则暂停对访问源大块的访问请求的处理,待锁消除后,再响应被暂停的访问请求。
28.如权利要求27所述的数据迁移方法,其特征在于,在数据迁移期间,对源大块加锁,以阻止对源大块的后续写请求,暂停对访问源大块的写请求的处理;以及待锁消除后,再响应被暂停的写请求。
29.如权利要求28所述的数据迁移方法,其特征在于,对于读请求,无论锁是否存在,访问源大块来响应读请求。
30.如权利要求29所述的数据迁移方法,其特征在于,对同一存储对象的数据迁移与数据重构不同时发生。
31.如权利要求30所述的数据迁移方法,其特征在于,若属于某存储对象的任何大块正在进行数据迁移,则对该存储对象的数据重构被延后。
32.如权利要求30所述的数据迁移方法,其特征在于,若对某存储对象正在进行数据迁移,则对该存储对象的任何大块的数据迁移被延后。
33.如权利要求30所述的数据迁移方法,其特征在于,若既要对存储对象进行数据重构,也要对存储对象的大块进行数据迁移,在二者都未开始的情况下,优先处理数据重构。
34.如权利要求30所述的数据迁移方法,其特征在于,若数据迁移过程中,源大块发生故障,则终止数据迁移过程,释放目的大块,通过存储对象的数据重构过程恢复源大块的数据,并用新的大块替代源大块以完成对存储对象的数据重构。
35.如权利要求30所述的数据迁移方法,其特征在于,若数据迁移过程中,目的大块发生故障,终止数据迁移过程。
36.如权利要求1所述的数据迁移方法,其特征在于,设定第一驱动器的源大块处于“数据迁移”状态。
37.如权利要求36所述的数据迁移方法,其特征在于,还包括:
接收访问处于“数据迁移”状态的源大块的IO请求;
响应于IO请求是写请求,将写请求对应的数据既写入源大块,也写入目的大块;
响应于IO请求是读请求,访问源大块获取数据以响应读请求。
38.如权利要求37所述的数据迁移方法,其特征在于,在数据迁移期间,对于从源大块复制到目的大块的数据,向目的大块写入之前还检查目的大块的对应位置是否已被写入数据,若该对应位置已被写入数据,则不将来自源大块的对应数据再次写入目的大块。
39.如权利要求37所述的数据迁移方法,其特征在于,在数据迁移期间,将来自源大块的数据都写入目的大块的对应位置,而无论该对应位置是否已被写入数据。
40.如权利要求36所述的数据迁移方法,其特征在于,还包括:
接收访问处于“数据迁移”状态的源大块的IO请求;
响应于IO请求是写请求,判断写请求所访问的地址是否超前于当前数据迁移地址;
若写请求所访问的地址超前于当前数据迁移地址,根据写请求将数据写入源大块;
若写请求所访问的地址不超前于当前数据迁移地址,根据写请求将数据写入目的大块。
41.如权利要求40所述的数据迁移方法,其特征在于,还包括:
响应于IO请求是读请求,判断读请求所访问的地址是否超前于当前数据迁移地址;
若读请求所访问的地址超前于当前数据迁移地址,根据读请求从源大块获取数据;
若读请求所访问的地址不超前于当前数据迁移地址,根据读请求从目的大块获取数据;
为进行数据迁移,按源大块的地址顺序,将源大块的数据复制到目的大块,并记录当前正在被复制的地址,当前正在被复制的地址为当前数据迁移地址。
42.一种数据迁移系统,包括CPU与存储器,存储器中存储有程序,当所述程序被所述CPU执行使,使得所述CPU执行根据权利要求1-41之一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710886464.0A CN109558068B (zh) | 2017-09-27 | 2017-09-27 | 数据迁移方法及迁移系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710886464.0A CN109558068B (zh) | 2017-09-27 | 2017-09-27 | 数据迁移方法及迁移系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109558068A CN109558068A (zh) | 2019-04-02 |
CN109558068B true CN109558068B (zh) | 2024-04-05 |
Family
ID=65863280
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710886464.0A Active CN109558068B (zh) | 2017-09-27 | 2017-09-27 | 数据迁移方法及迁移系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109558068B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111857541A (zh) * | 2019-04-25 | 2020-10-30 | 伊姆西Ip控股有限责任公司 | 用于管理存储系统的方法、设备和计算机程序产品 |
CN111913647B (zh) * | 2019-05-08 | 2022-10-11 | 华为技术有限公司 | 一种存储设备的磨损均衡方法、装置及相关设备 |
CN110413226B (zh) * | 2019-06-29 | 2022-07-19 | 苏州浪潮智能科技有限公司 | 一种存储池化容量利用方法,系统,电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073462A (zh) * | 2010-11-29 | 2011-05-25 | 华为技术有限公司 | 虚拟存储迁移方法、系统和虚拟机监控器 |
CN103858092B (zh) * | 2013-12-19 | 2016-03-09 | 华为技术有限公司 | 一种数据迁移方法和装置 |
CN105530273A (zh) * | 2014-09-29 | 2016-04-27 | 国际商业机器公司 | 用于数据迁移的方法和装置 |
-
2017
- 2017-09-27 CN CN201710886464.0A patent/CN109558068B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102073462A (zh) * | 2010-11-29 | 2011-05-25 | 华为技术有限公司 | 虚拟存储迁移方法、系统和虚拟机监控器 |
WO2011137780A1 (zh) * | 2010-11-29 | 2011-11-10 | 华为技术有限公司 | 虚拟存储迁移方法、系统和虚拟机监控器 |
CN103858092B (zh) * | 2013-12-19 | 2016-03-09 | 华为技术有限公司 | 一种数据迁移方法和装置 |
CN105530273A (zh) * | 2014-09-29 | 2016-04-27 | 国际商业机器公司 | 用于数据迁移的方法和装置 |
Non-Patent Citations (2)
Title |
---|
Bathymetry data and metadata migration techniques;Karen Cove;IEEE;全文 * |
基于迁移的存储系统热点问题处理;蒋学;王宏毅;刘;;计算机应用研究(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109558068A (zh) | 2019-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10140041B1 (en) | Mapped RAID (redundant array of independent disks) in a data storage system with RAID extent sub-groups that are used to perform drive extent allocation and data striping for sequential data accesses to a storage object | |
US10089026B1 (en) | Virtual drive based RAID groups | |
US10459814B2 (en) | Drive extent based end of life detection and proactive copying in a mapped RAID (redundant array of independent disks) data storage system | |
US8015371B2 (en) | Storage apparatus and method of managing data storage area | |
US9378093B2 (en) | Controlling data storage in an array of storage devices | |
US10289336B1 (en) | Relocating data from an end of life storage drive based on storage drive loads in a data storage system using mapped RAID (redundant array of independent disks) technology | |
US8880843B2 (en) | Providing redundancy in a virtualized storage system for a computer system | |
US7831764B2 (en) | Storage system having plural flash memory drives and method for controlling data storage | |
US6647460B2 (en) | Storage device with I/O counter for partial data reallocation | |
KR20150105323A (ko) | 데이터 스토리지 방법 및 시스템 | |
JP2014174992A (ja) | システム・リブートを通じて改善されたキャッシュ・ランプアップを達成するためにキャッシュ・ストアを管理するためのシステム、方法、およびコンピュータ可読媒体 | |
JP2010102695A (ja) | Hdd障害からの高速データ回復 | |
CN111124264B (zh) | 用于重建数据的方法、设备和计算机程序产品 | |
WO2016117026A1 (ja) | ストレージシステム | |
US10365845B1 (en) | Mapped raid restripe for improved drive utilization | |
US7062605B2 (en) | Methods and structure for rapid background initialization of a RAID logical unit | |
CN109558068B (zh) | 数据迁移方法及迁移系统 | |
CN109725838B (zh) | 用于管理多个盘的方法、装置以及计算机可读介质 | |
CN111124251B (zh) | 用于i/o控制的方法、装置以及计算机可读介质 | |
JP2006114008A (ja) | システム構成を更新するための回復記録を構成するための方法および装置 | |
US10853257B1 (en) | Zero detection within sub-track compression domains | |
CN114721585A (zh) | 存储管理方法、设备和计算机程序产品 | |
US11216195B1 (en) | Sharing blocks of non-volatile data storage to support cache flushes in a multi-node data storage system | |
CN107491263B (zh) | 一种基于存储对象的数据重构方法 | |
US8140752B2 (en) | Method of executing a background task and an array controller |
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 | ||
CB02 | Change of applicant information |
Address after: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing Applicant after: Beijing yihengchuangyuan Technology Co.,Ltd. Address before: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing Applicant before: BEIJING MEMBLAZE TECHNOLOGY Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |