CN114840358A - 一种基于虚拟磁盘的数据修复方法、装置及其介质 - Google Patents

一种基于虚拟磁盘的数据修复方法、装置及其介质 Download PDF

Info

Publication number
CN114840358A
CN114840358A CN202210461441.6A CN202210461441A CN114840358A CN 114840358 A CN114840358 A CN 114840358A CN 202210461441 A CN202210461441 A CN 202210461441A CN 114840358 A CN114840358 A CN 114840358A
Authority
CN
China
Prior art keywords
result
user data
data
address
virtual disk
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.)
Pending
Application number
CN202210461441.6A
Other languages
English (en)
Inventor
刘海伟
刘为峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jinan Inspur Data Technology Co Ltd
Original Assignee
Jinan Inspur Data Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jinan Inspur Data Technology Co Ltd filed Critical Jinan Inspur Data Technology Co Ltd
Priority to CN202210461441.6A priority Critical patent/CN114840358A/zh
Publication of CN114840358A publication Critical patent/CN114840358A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0793Remedial or corrective actions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/82Solving problems relating to consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种基于虚拟磁盘的数据修复方法、装置及其介质,涉及虚拟化技术领域,用于进行数据丢失时的修复,针对目前出现数据丢失时无法修复的问题,提供了一种基于虚拟磁盘的数据修复方法,通过对虚拟磁盘内存储的数据进行偏移遍历,以获得虚拟磁盘中各用户数据实际存放的地址,该方法获取到的所述用户数据地址不会因为系统断电或存储设备异常出现丢失;再判断二级索引表中的各用户数据地址是否出现损坏,找到损坏的用户数据地址、并获取其对应的L2表的索引号、以及L2表项的索引号;便可将准确的用户数据地址替换到对应的出现损坏的L2表项中,实现数据的修复。

Description

一种基于虚拟磁盘的数据修复方法、装置及其介质
技术领域
本申请涉及虚拟化技术领域,特别是涉及一种基于虚拟磁盘的数据修复方法、装置及其介质。
背景技术
于如今虚拟化的应用中,一种主流的虚拟磁盘为qcow2格式。qcow2虚拟磁盘将数据拆分成一个个的集群(cluster),然后用一个二级索引表将这些cluster组织起来,第一级称作L1表(L1 Table),每个表项用于存放L2表的地址索引,第二级称作L2表(L2 Table),每个表项用于存放用户数据(Data Cluster)地址,这种二级索引表可称为qcow2的元数据。其中,L1 Table的起始地址位于qcow2虚拟磁盘的表头中,通过该起始地址可以找到L1Table;L1 Table中存放L2 Table的起始地址,通过L1 Table的内容可以找到L2 Table;L2Table中存放Data Cluster地址,使用L2 Table的内容就可以找到DataCluster。
qcow2虚拟磁盘在寻址过程中,为了提高查找数据的效率,经常使用内存中的L2缓存(Cache)记录已经访问过的Data Cluster。当系统断电、存储设备异常时,可能会导致L2Cache无法下刷到虚拟磁盘中,造成qcow2虚拟磁盘中二级索引表的部分数据出现丢失,也即Data Cluster地址出现损坏。对于该问题,目前通常所采用的方式为校验数据的一致性,当数据一致性未通过校验时,说明该数据出现了丢失的现象。
目前所使用的校验数据的一致性的方法仅能确定该数据是否发生数据丢失,且在数据一致性校验不通过的情况下直接丢失该数据,无法做到丢失数据的修复。
所以,现在本领域的技术人员亟需要一种基于虚拟磁盘的数据修复方法,解决目前出现数据丢失时无法修复的问题。
发明内容
本申请的目的是提供一种基于虚拟磁盘的数据修复方法、装置及其介质,解决目前出现数据丢失时无法修复的问题。
为解决上述技术问题,本申请提供一种基于虚拟磁盘的数据修复方法,包括:
获取集群的大小、L1表的初始地址和L1表的大小;
根据L1表的初始地址和L1表的大小,确定各L1表项,并根据L1表项确定各L2表项,根据各L2表项获取各用户数据地址作为第一结果;
以集群的大小作为偏移量对虚拟磁盘存储的数据进行遍历,以获取各用户数据地址作为第二结果;
当第一结果中的各用户数据地址出现损坏时,获取其中出现损坏的用户数据地址,以及其对应的L2表的索引号和L2表项的索引号,作为第三结果;
将第一结果和第二结果进行比对,去除相同的用户数据地址,将第二结果剩余的用户数据地址作为第四结果;
根据第三结果和第四结果,替换出现损坏的用户数据地址。
优选地,判断第一结果中的各用户数据地址是否出现损坏包括:
分别判断各用户数据地址能否被集群的大小整除,若否,则当前用户数据地址出现损坏;
若是,则判断用户数据地址中是否存在数据,若不存在数据,则判断当前用户数据地址出现损坏。
优选地,L1表项和L2表项大小为N bits,对虚拟磁盘存储的数据进行遍历,以获取各用户数据地址作为第二结果包括:
跳过虚拟磁盘的表头,获取自当前地址起N bits数据,作为待判断数据,且每进行一次偏移都获取自当前地址起N bits数据,作为待判断数据;
判断待判断数据是否等于qcow2关键字、refcount Table关键字、refcount Block关键字或L1表关键字,若否,则将待判断数据作为用户数据地址;
将所有用户数据地址作为第二结果。
优选地,对虚拟磁盘存储的数据进行遍历,以获取各用户数据地址作为第二结果包括:
以只读的方式打开虚拟磁盘,对其中存储的数据进行遍历,以获取各用户数据地址作为第二结果。
优选地,获取集群的大小、L1表的初始地址和L1表的大小包括:
获取虚拟磁盘的表头,并解析表头以获取集群的大小、L1表的初始地址和L1表的大小。
优选地,第一结果、第二结果、第三结果和第四结果存储于不同数据库中。
优选地,在判断各用户数据地址是否出现损坏,将其中出现损坏的用户数据地址作为第三结果之后,还包括:
返回提示信息;其中,提示信息包括第三结果。
为解决上述技术问题,本申请还提供一种基于虚拟磁盘的数据修复装置,包括:
获取模块,用于获取集群的大小、L1表的初始地址和L1表的大小;
第一结果确定模块,用于根据L1表的初始地址和L1表的大小,确定各L1表项,并根据L1表项确定各L2表项,遍历各L2表项,以获取各用户数据地址作为第一结果;
第二结果确定模块,用于以集群的大小作为偏移量对虚拟磁盘存储的数据进行遍历,以获取各用户数据地址作为第二结果;
第三结果确定模块,用于判断第一结果中的各用户数据地址是否出现损坏,并获取其中出现损坏的用户数据地址对应的L2表的索引号和L2表项的索引号,将各出现损坏的用户数据地址、以及其对应的L2表的索引号和L2表项的索引号作为第三结果;
第四结果确定模块,用于将第一结果和第二结果进行比对,去除相同的用户数据地址,将第二结果剩余的用户数据地址作为第四结果;其中,第四结果中的用户数据地址与第三结果中的用户数据地址数量相同;
修复模块,用于根据第三结果和第四结果,替换出现损坏的用户数据地址。
优选地,还包括:
提示模块,用于返回提示信息;其中,提示信息包括第三结果。
为解决上述技术问题,本申请还提供一种基于虚拟磁盘的数据修复装置,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现如上述的基于虚拟磁盘的数据修复方法的步骤。
为解决上述技术问题,本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述的基于虚拟磁盘的数据修复方法的步骤。
本申请提供的基于虚拟磁盘的数据修复方法,首先通过遍历二级索引表获取基于L1至L2的寻址方式获取到的所有用户数据地址作为第一结果;再通过对虚拟磁盘内存储的数据进行偏移遍历,以获得虚拟磁盘中各用户数据实际存放的地址,该方法获取到的所述用户数据地址不会因为系统断电或存储设备异常导致出现数据丢失,也即遍历获取准确的用户数据地址作为第二结果;之后,判断二级索引表中的各用户数据地址是否出现损坏,找到损坏的用户数据地址、并获取其所在的L2表的索引号、以及所在的L2表项的索引号,作为第三结果;便可根据第一结果和第二结果的比对,确定需要进行替换的准确用户数据地址作为第四结果;根据第三结果中的L2表、L2表项的索引号,找到损坏的用户数据地址,并用第四结果中的准确的用户数据地址进行替换,便可实现数据的修复。解决了目前仅能判断数据是否出现丢失但无法修复的问题。
本申请提供的基于虚拟磁盘的数据修复装置、及计算机可读存储介质,与上述方法对应,效果同上。
附图说明
为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的一种基于虚拟磁盘的数据修复方法的流程图;
图2为一种出现数据丢失的二级索引表示意图;
图3为本发明针对图2进行数据修复的中间结果示意图;
图4为本发明针对图2进行数据修复后的二级索引表示意图;
图5为本发明提供的一种基于虚拟磁盘的数据修复装置的结构图;
图6为本发明提供的另一种基于虚拟磁盘的数据修复装置的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本申请保护范围。
本申请的核心是提供一种基于虚拟磁盘的数据修复方法、装置及其介质。
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。
虚拟磁盘技术就是通过内存虚拟出一个或者多个磁盘的技术。凭借内存的速度比硬盘快得多的优点,加快磁盘的数据交换速度,从而提高计算机的运行速度。
也就是说,一个终端(计算机、服务器、工作站)可以在内存中虚拟出多个磁盘,将数据存储于这类虚拟磁盘中,可以比存储于硬盘中获得更快的数据交换速度。
但容易理解的是,终端中所使用的内存断电后其中数据会丢失,或者作为终端内存使用的存储设备异常时,也可能导致虚拟磁盘的数据丢失。
目前,可以通过校验数据的一致性来检测数据是否出现丢失。但是,这种方法存在弊端,当数据的一致性校验不通过时,为避免错误数据的影响,直接将该数据全部丢失,不能对丢失数据进行修复。所以,为解决上述问题,如图1所示,本申请提供一种基于虚拟磁盘的数据修复方法,包括:
S11:获取集群的大小、L1表的初始地址和L1表的大小。
集群的大小表示一个集群所能存储的数据的容量大小,在虚拟磁盘创建时进行设定;L1表的大小同样于虚拟磁盘创建时进行设定,表征L1表的容量大小,L1可以只占用一个集群,也可以占用多个连续集群。通常情况下,L1表的大小与虚拟磁盘的大小相适应,也即在集群大小不变的情况下,虚拟磁盘的大小越大,L1表的大小也应越大;而L2表则固定占用一个集群,且不同的L2表无需放在相邻的集群上。
另外,由于集群的大小、L1表的初始地址和L1表的大小都是在创建虚拟磁盘时预先设定的,所以可将设置信息存储起来,待需要时获取;又由于上述的信息在创建虚拟磁盘时会保存在虚拟磁盘的表头中,所以也可以获取虚拟磁盘的表头解析获得,本申请对此不做限制,但考虑到获取集群的大小、L1表的初始地址和L1表的大小方法的易实施性,优选为通过解析虚拟磁盘表头来获取。对应的,本优选方案的具体实施方法包括:
获取虚拟磁盘的表头,并解析表头以获取集群的大小、L1表的初始地址和L1表的大小。
S12:根据L1表的初始地址和L1表的大小,确定各L1表项,并根据L1表项确定各L2表项,根据各L2表项获取各用户数据地址作为第一结果。
由上述可知,根据L1表的初始地址,可以找到L1表;而根据L1表的大小,可以确定L1表包含多少各L1表项,进而确定每个L1表项的地址;获取到每个L1表项的地址后,可以读取L1表项中存储的L2表的索引地址,进而确定各个L2表;最终根据各个L2表确定存储于其中的用户数据地址,实现根据L1-L2-Data Cluster的地址检索,以获取二级索引表中保存的所有用户数据地址。
S13:以集群的大小作为偏移量对虚拟磁盘存储的数据进行遍历,以获取各用户数据地址作为第二结果。
此步骤的目的在于获取准确的用户数据地址,由于上述的因为系统断电或存储设备异常所导致L2 Cache无法下刷到虚拟磁盘中时,会出现丢失的是二级索引表中所存储的用户数据地址,也即二级索引表中各L2表项中的用户数据地址会出现损坏的现象。
所以,通过以集群大小为偏移量,对虚拟磁盘中存储的数据进行遍历偏移的方式,可以获取各个用户数据地址的准确地址,以便用于后续的数据修复步骤。
S14:当第一结果中的各用户数据地址出现损坏时,获取其中出现损坏的用户数据地址,以及其对应的L2表的索引号和L2表项的索引号,作为第三结果。
当二级索引表中存储的用户数据地址出现损坏时,需先找出出现损坏的用书数据地址,也即各L2表中出现损坏的数据块。具体的判断数据块是否损坏的方式本申请对此不做限制,可以是通过比对第一结果和第二结果,其中第一结果中与第二结果相异的部分即是数据出现损坏的用户数据地址;也可以是通过校验数据的一致性来判断数据是否损坏,但需要注意的是,目前的数据一致性校验默认在校验失败时丢失整个数据,于本方案中,损坏的数据还用于后续的数据修补步骤,所以若使用校验数据一致性的方法来判断是否出现数据丢失,需要注意不要丢失损坏的数据;还可以通过其他方法来判断数据是否出现损坏,如本申请后续实施例中所提供的一种优选方案所示,在此不做赘述。
在确定损坏的用户数据地址(也即二级索引表中损坏的数据块)之后,还需获取损坏数据块对应的L2表的索引号和L2表项的索引号,以能找到损坏的数据块于二级索引表中的位置,以便于后续修复数据时使用准确的数据替换到相应的位置。
S15:将第一结果和第二结果进行比对,去除相同的用户数据地址,将第二结果剩余的用户数据地址作为第四结果。
由上述可知,二级索引表中存储有虚拟磁盘所保存的所有用户数据的地址,所以通过L1-L2-Data Cluster的检索方式获取到的第一结果应当与遍历虚拟磁盘数据获取到的第二结果中,所包含的用户数据地址数量相同,且若不出现损坏,第一结果应等同于第二结果。所以通过第一结果和第二结果的比对,去除掉二者的相同部分,第一结果中剩余的即是出现损坏的用户数据地址,而第二结果中剩余的即是出现损坏的数据块对应的准确用户数据地址。
S16:根据第三结果和第四结果,替换出现损坏的用户数据地址。
下面为进一步说明本申请所提供的一种基于虚拟磁盘的数据修复方法,结合示例进行说明:
如图2所示,图2示例性的展示一种出现数据丢失的二级索引表,每一用实线框或虚线框框出的数据为一个用户数据地址;其中,以虚线框出的数据为损坏的数据块,也即,有损坏的数据块:24AAAA、6EE0BBBB和1CCCCC。
根据上述步骤,获取与图2对应的第一结果21、第二结果22、第三结果23和第四结果24,具体如图3所示,包括:第一结果21、第二结果22、第三结果23和第四结果24。
图3中所示的第一结果21仅展示了出现数据损坏的L2表的所有用户数据地址,其他L2表于本示例中并未出现数据损坏,所以未做展示,但容易理解的是,实际实现本方法时,第一结果21应存在未展示出的其他L2表的数据用户地址,第二结果22、第三结果23、第四结果24亦是同理。
第二结果22则包含了经偏移遍历虚拟磁盘中存储数据所获得的所有用户数据地址。比对第一结果21和第二结果22中的各用户数据地址,可得到第三结果23和第四结果24所示的用户数据地址,其中,第三结果23中的用户数据地址为损坏的,第四结果24中的用户数据地址为准确的。
另外,第三结果23中应还包括损坏的用户数据地址的L2表的索引号和L2表项的索引号,例如,对于数据块24AAAA,其为索引号为100000的L2表的第3个表项;对于数据块6EE0BBBB,其为索引号为F40000的L2表的第3个表项;对于数据块1CCCCC,其为索引号为180000的L2表的第2个表项。
而对于将第四结果24中的用户数据地址分别替换第三结果23的用户数据地址的方法,以数据块24AAAA的修复为例,其替换的过程具体为:
确定第三结果23中损坏的用户数据地址与数据块240000最相近的数据块,如图3所示,即为24AAAA;由上述可知,数据块24AAAA为索引号为100000的L2表的第3个表项,所以将数据块240000替换二级索引表中索引号为100000的L2表的第3个表项,即可实现数据块24AAAA的修复。
第三结果23中的其他数据块的修复也是同理,在此不做赘述,最终获取如图4所示的修复完毕的磁盘数据。
本申请所提供的一种基于虚拟磁盘的数据修复方法,通过偏移遍历获取准确的用户数据地址,再根据损坏的用户数据地址于索引表中的位置,将获取到的准确的用户数据地址替换进去,从而完成丢失数据的修复,使得当系统出现异常断电或存储故障时也能够保证虚拟磁盘中的元数据不会发生丢失。
由上述可知,对于判断二级索引表中的用户数据地址是否出现损坏的方法有许多,且本申请并未限制具体的实现方式。与本实施例而言,提供一种优选的实施方案,包括:
分别判断各用户数据地址能否被集群的大小整除,若否,则当前用户数据地址出现损坏;
若是,则判断用户数据地址中是否存在数据,若不存在数据,则判断当前用户数据地址出现损坏。
也即,在判断各用户数据地址是否出现损坏时,可以分别判断当前的用户数据地址是否为集群大小的整数倍,若不是,则说明该用户数据地址损坏,若是,则进入下一判断步骤。
若当前用户数据地址能被集群大小整除,还需判断该用户数据地址所指向的位置是否有数据存放,若有数据存放,则说明该用户数据地址未发生损坏,若无数据存放,则说明该用户数据地址出现损坏。
以本实施例所提供的优选方案判断用户数据地址是否出现损坏实现简单,相比于校验数据一致性的方式不会在判断出用户数据地址损坏时丢失整个数据;而相比于通过上述的第一结果和第二结果对比获取的方式来说,由于这种方式是对各用户数据地址单独进行判断的,在判断出出现损坏时,可以直接将当前用户数据地址对应的L2表的索引号和L2表项的索引号保存起来,以获得第三结果,而对比第一结果和第二结果的方式只能获取到出现损坏的用户数据地址,但对于其对应的L2表的索引号和L2表项的索引号,还需重新获取。综上,本实施例所提供的一种判断用户数据地址是否出现损坏的优选方案,实施简单,且不会丢失整个数据,进一步的提高了本申请所提供的一种数据修复方法的效率。
而关于遍历虚拟磁盘中存储的数据以获得第二结果,本实施例提供一种具体的优选方案,包括:
跳过虚拟磁盘的表头,获取自当前地址起N bits数据,作为待判断数据,且每进行一次偏移都获取自当前地址起N bits数据,作为待判断数据。
判断待判断数据是否等于qcow2关键字、refcount Table关键字、refcount Block关键字或L1表关键字,若否,则将待判断数据作为用户数据地址。
将所有用户数据地址作为第二结果。
考虑到在实际应用中,以现有的磁盘容量来看,L1表项以及L2表项的大小为64位即可完全满足寻址要求,所以此处优选N值为64。
N为64,也即待判断数据的位数为64位,所以后续的qcow2关键字、refcount Table关键字、refcount Block关键字或L1表关键字若不够64位则可以通过0进行补充,补至64位以方便后续的比对。
其中,由于qcow2文件支持在文件内部建立磁盘快照(snapshot),故需要对每个cluster的使用进行记录,即需要记录下每个cluster被引用的次数,这样当某个snapshot被删除的时候,才能够知道哪些cluster可以释放出来继续使用,哪些cluster还在被使用,主机不能主动修改。为了维持对cluster引用次数的记录,qcow2文件中同样使用一个二级的索引表来记录所有cluster的引用计数,这个二级索引表的第一级称为recfound Table,第二级称为refcount Block,结构与上述L1-L2的二级索引表类似。
另外,由于在上述的qcow2虚拟磁盘所存储的数据中,包含qcow2关键字OX514649FB,所以若待判断数据等于上述的qcow2关键字则说明待判断数据不为用户数据地址。
同理,也要比对待判断数据是否为L1表关键字0X000C0000,若待判断数据等于L1表关键字则说明待判断数据不为用户数据地址。
refcount Table的大小是可变的,并且需要占用连续的cluster。在集群的大小(cluster size)一样的情况下,虚拟机磁盘的容量越大,refcount Table的大小也越大,和L1 Table一样。每个refcount Block占用一个cluster,并且不同的refcount Block不需要占用连续的cluster。refcount Block中,每个表项(entry)的大小是可以设置的,不一定是类似L2 Table的64bit,因为每个entry只是一个简单的计数,没必要使用64bit,浪费空间。
所以,将refcount Table关键字和refcount Block关键字补充至64位后,应为0X00040000和0X00080000,令待判断数据与其比对,若一致,则说明待判断数据不为用户数据地址。
也即,若待判断数据与上述的四个关键字其中任意一个相同,则说明待判断数据不为用户数据地址;若待判断数据与上述的四个关键字都不相同,则说明待判断数据为用户数据地址。
本实施例所提供的一种优选方案通过在L1表项和L2表项大小为N bits的前提下,跳过表头当前地址后N位的数据作为待判断数据作为待判断数据。由于待判断数据仅为一种可能为用户数据地址的数据,其中还包括qcow2关键字、refcount Table关键字、refcount Block关键字和L1表关键字等关键字。所以本实施例还比对待判断数据与qcow2关键字、refcount Table关键字、refcount Block关键字或L1表关键字,若待判断数据与上述的任一关键字都不一致,则说明待判断数据为用户数据地址。通过四个关键字的筛选,使得获取到的用户数据地址更准确,进一步保证了本申请所提供的数据修复方法能够正确的修复丢失的数据。
由上述实施例可知,本申请为获取准确的用户数据地址,采用偏移遍历虚拟磁盘中存储数据的方式,因此,直接对虚拟磁盘中的数据进行了读取等操作,而在这种直接对虚拟磁盘中数据进行处理的过程中,可能存在更改数据的情况发生,从而影响的数据的准确性。因此,本实施例为解决上述问题,提供了一种优选的实施方案,上述的对虚拟磁盘存储的数据进行遍历,以获取各用户数据地址作为第二结果具体为:
以只读的方式打开虚拟磁盘,对其中存储的数据进行遍历,以获取各用户数据地址作为第二结果。
以只读的方式仅能对数据进行读取操作,可以满足上述偏移遍历获取准确的用户数据地址的要求。同时,只读的方式不能对数据进行修改、删除等操作,不会影响虚拟磁盘中存储的数据,进一步保证获取到的用户数据地址的准确性。
由上述可知,本申请通过获取到的第一结果、第二结果、第三结果和第四结果来进行丢失数据的修复,且上述四个结果中存储的数据都不相同,为避免数据混乱,本实施例提供一种优选的实施方案包括:第一结果、第二结果、第三结果和第四结果存储于不同数据库中。
同样的,由上述可知,本方法通过判断二级索引表中各L2表项存储的用户数据地址是否出现损坏,并将损坏的用户数据地址、及其L2表的索引号、L2表项的索引号作为第三结果,以便进行后续的数据修复。
所以,当第三结果中存在用户数据地址时,说明该虚拟磁盘出现了数据丢失的现象,此时,本实施例还提供另一种优选的实施方案,上述方法还包括:返回提示信息;其中,提示信息包括第三结果。
由于数据丢失通常是因为系统断电以及存储装置出现异常所导致的,所以本实施例通过在出现数据丢失时返回提示信息,以告知相关人员及时进行上述问题的排查,进一步保证虚拟磁盘所在系统的平稳运行。另外,本实施例所返回的提示信息还包括第三结果,使得相关人员可以得知出现数据丢失的数据块于二级索引表中的具体位置,进而还可以进行数据的人工修复,进一步保证虚拟磁盘存储数据的准确性。
在上述实施例中,对于一种基于虚拟磁盘的数据修复方法进行了详细描述,本申请还提供一种基于虚拟磁盘的数据修复装置对应的实施例。需要说明的是,本申请从两个角度对装置部分的实施例进行描述,一种是基于功能模块的角度,另一种是基于硬件的角度。
基于功能模块的角度,如图5所示,本实施例提供一种基于虚拟磁盘的数据修复装置,包括:
获取模块31,用于获取集群的大小、L1表的初始地址和L1表的大小;
第一结果确定模块32,用于根据L1表的初始地址和L1表的大小,确定各L1表项,并根据L1表项确定各L2表项,遍历各L2表项,以获取各用户数据地址作为第一结果;
第二结果确定模块33,用于以集群的大小作为偏移量对虚拟磁盘存储的数据进行遍历,以获取各用户数据地址作为第二结果;
第三结果确定模块34,用于判断第一结果中的各用户数据地址是否出现损坏,并获取其中出现损坏的用户数据地址对应的L2表的索引号和L2表项的索引号,将各出现损坏的用户数据地址、以及其对应的L2表的索引号和L2表项的索引号作为第三结果;
第四结果确定模块35,用于将第一结果和第二结果进行比对,去除相同的用户数据地址,将第二结果剩余的用户数据地址作为第四结果;其中,第四结果中的用户数据地址与第三结果中的用户数据地址数量相同;
修复模块36,用于根据第三结果和第四结果,替换出现损坏的用户数据地址。
优选地,还包括:
提示模块,用于在出现数据丢失时返回提示信息。
其中,提示信息包括第三结果。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本申请所提供的一种基于虚拟磁盘的数据修复装置,通过第二结果确定模块获取准确的用户数据地址,再根据第三结果确定模块获取到的损坏的用户数据地址于索引表中的位置,通过修复模块将获取到的准确的用户数据地址替换进去,从而完成丢失数据的修复,使得当系统出现异常断电或存储故障时也能够保证虚拟磁盘中的元数据不会发生丢失。
图6为本申请另一实施例提供的一种基于虚拟磁盘的数据修复装置的结构图,如图6所示,一种基于虚拟磁盘的数据修复装置包括:存储器40,用于存储计算机程序;
处理器41,用于执行计算机程序时实现如上述实施例一种基于虚拟磁盘的数据修复方法的步骤。
本实施例提供的一种基于虚拟磁盘的数据修复装置可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。
其中,处理器41可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器41可以采用数字信号处理器(Digital Signal Processor,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器41也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(CentralProcessing Unit,CPU);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器41可以集成有图像处理器(Graphics Processing Unit,GPU),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器41还可以包括人工智能(Artificial Intelligence,AI)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器40可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器40还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器40至少用于存储以下计算机程序401,其中,该计算机程序被处理器41加载并执行之后,能够实现前述任一实施例公开的一种基于虚拟磁盘的数据修复方法的相关步骤。另外,存储器40所存储的资源还可以包括操作系统402和数据403等,存储方式可以是短暂存储或者永久存储。其中,操作系统402可以包括Windows、Unix、Linux等。数据403可以包括但不限于一种基于虚拟磁盘的数据修复方法等。
在一些实施例中,一种基于虚拟磁盘的数据修复装置还可包括有显示屏42、输入输出接口43、通信接口44、电源45以及通信总线46。
本领域技术人员可以理解,图6中示出的结构并不构成对一种基于虚拟磁盘的数据修复装置的限定,可以包括比图示更多或更少的组件。
本申请实施例提供的一种基于虚拟磁盘的数据修复装置,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如下方法:一种基于虚拟磁盘的数据修复方法。
本申请所提供的一种基于虚拟磁盘的数据修复装置,通过处理器执行存储在存储器中的程序,以实现通过偏移遍历虚拟磁盘中的数据获取准确的用户数据地址,再根据第三结果中的损坏的用户数据地址于索引表中的位置,将准确的用户数据地址替换进去,以实现丢失数据的修复,使得当系统出现异常断电或存储故障时也能够保证虚拟磁盘中的元数据不会丢失。
最后,本申请还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步骤。
可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请所提供的一种计算机可读取存储介质,在其中存储的计算机程序被执行时,可以实现通过偏移遍历虚拟磁盘中的数据获取准确的用户数据地址,再根据损坏的用户数据地址于索引表中的位置,将其中数据替换为准确的用户数据地址,从而完成丢失数据的修复,使得当系统出现异常断电或存储故障时,保证虚拟磁盘中的元数据不会丢失。
以上对本申请所提供的一种基于虚拟磁盘的数据修复方法、装置及其介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (10)

1.一种基于虚拟磁盘的数据修复方法,其特征在于,包括:
获取集群的大小、L1表的初始地址和L1表的大小;
根据所述L1表的初始地址和所述L1表的大小,确定各L1表项,并根据所述L1表项确定各L2表项,根据各所述L2表项获取各用户数据地址作为第一结果;
以所述集群的大小作为偏移量对虚拟磁盘存储的数据进行遍历,以获取各所述用户数据地址作为第二结果;
当所述第一结果中的各所述用户数据地址出现损坏时,获取其中出现损坏的所述用户数据地址,以及其对应的L2表的索引号和L2表项的索引号,作为第三结果;
将所述第一结果和所述第二结果进行比对,去除相同的所述用户数据地址,将所述第二结果剩余的所述用户数据地址作为第四结果;
根据所述第三结果和所述第四结果,替换出现损坏的所述用户数据地址。
2.根据权利要求1所述的基于虚拟磁盘的数据修复方法,其特征在于,判断所述第一结果中的各所述用户数据地址是否出现损坏包括:
分别判断各所述用户数据地址能否被所述集群的大小整除,若否,则当前所述用户数据地址出现损坏;
若是,则判断所述用户数据地址中是否存在数据,若不存在数据,则判断当前所述用户数据地址出现损坏。
3.根据权利要求1所述的基于虚拟磁盘的数据修复方法,其特征在于,所述L1表项和所述L2表项大小为N bits,所述对虚拟磁盘存储的数据进行遍历,以获取各所述用户数据地址作为第二结果包括:
跳过所述虚拟磁盘的表头,获取自当前地址起N bits数据作为待判断数据,且每进行一次偏移都获取自当前地址起N bits数据,作为所述待判断数据;
判断所述待判断数据是否等于qcow2关键字、refcount Table关键字、refcount Block关键字或L1表关键字,若否,则将所述待判断数据作为所述用户数据地址;
将所有所述用户数据地址作为第二结果。
4.根据权利要求1所述的基于虚拟磁盘的数据修复方法,其特征在于,所述对虚拟磁盘存储的数据进行遍历,以获取各所述用户数据地址作为第二结果包括:
以只读的方式打开所述虚拟磁盘,对其中存储的数据进行遍历,以获取各所述用户数据地址作为第二结果。
5.根据权利要求1所述的基于虚拟磁盘的数据修复方法,其特征在于,所述获取集群的大小、L1表的初始地址和L1表的大小包括:
获取所述虚拟磁盘的表头,并解析所述表头以获取所述集群的大小、所述L1表的初始地址和所述L1表的大小。
6.根据权利要求1所述的基于虚拟磁盘的数据修复方法,其特征在于,所述第一结果、所述第二结果、所述第三结果和所述第四结果存储于不同数据库中。
7.根据权利要求1至6任意一项所述的基于虚拟磁盘的数据修复方法,其特征在于,在所述判断各所述用户数据地址是否出现损坏,将其中出现损坏的所述用户数据地址作为第三结果之后,还包括:
返回提示信息;其中,所述提示信息包括所述第三结果。
8.一种基于虚拟磁盘的数据修复装置,其特征在于,包括:
获取模块,用于获取集群的大小、L1表的初始地址和L1表的大小;
第一结果确定模块,用于根据所述L1表的初始地址和所述L1表的大小,确定各L1表项,并根据所述L1表项确定各L2表项,遍历各所述L2表项,以获取各用户数据地址作为第一结果;
第二结果确定模块,用于以所述集群的大小作为偏移量对虚拟磁盘存储的数据进行遍历,以获取各所述用户数据地址作为第二结果;
第三结果确定模块,用于判断所述第一结果中的各所述用户数据地址是否出现损坏,并获取其中出现损坏的所述用户数据地址对应的L2表的索引号和L2表项的索引号,将各出现损坏的所述用户数据地址、以及其对应的L2表的索引号和L2表项的索引号作为第三结果;
第四结果确定模块,用于将所述第一结果和所述第二结果进行比对,去除相同的所述用户数据地址,将所述第二结果剩余的所述用户数据地址作为第四结果;其中,所述第四结果中的所述用户数据地址与所述第三结果中的所述用户数据地址数量相同;
修复模块,用于根据所述第三结果和所述第四结果,替换出现损坏的所述用户数据地址。
9.一种基于虚拟磁盘的数据修复装置,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任意一项所述的基于虚拟磁盘的数据修复方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述的基于虚拟磁盘的数据修复方法的步骤。
CN202210461441.6A 2022-04-28 2022-04-28 一种基于虚拟磁盘的数据修复方法、装置及其介质 Pending CN114840358A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210461441.6A CN114840358A (zh) 2022-04-28 2022-04-28 一种基于虚拟磁盘的数据修复方法、装置及其介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210461441.6A CN114840358A (zh) 2022-04-28 2022-04-28 一种基于虚拟磁盘的数据修复方法、装置及其介质

Publications (1)

Publication Number Publication Date
CN114840358A true CN114840358A (zh) 2022-08-02

Family

ID=82568600

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210461441.6A Pending CN114840358A (zh) 2022-04-28 2022-04-28 一种基于虚拟磁盘的数据修复方法、装置及其介质

Country Status (1)

Country Link
CN (1) CN114840358A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115470049A (zh) * 2022-11-15 2022-12-13 浪潮电子信息产业股份有限公司 一种元数据修复方法、装置、电子设备及存储介质

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115470049A (zh) * 2022-11-15 2022-12-13 浪潮电子信息产业股份有限公司 一种元数据修复方法、装置、电子设备及存储介质
CN115470049B (zh) * 2022-11-15 2023-02-28 浪潮电子信息产业股份有限公司 一种元数据修复方法、装置、电子设备及存储介质
WO2024103596A1 (zh) * 2022-11-15 2024-05-23 浪潮电子信息产业股份有限公司 一种元数据修复方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN110531940B (zh) 视频文件处理方法及装置
CN102929750B (zh) 非易失性介质肮脏区段跟踪
US8463757B2 (en) File repair
US10324794B2 (en) Method for storage management and storage device
CN108959526B (zh) 日志管理方法以及日志管理装置
CN112631516B (zh) 一种具有寿命管理的flash文件管理系统
CN115576505A (zh) 一种数据存储方法、装置、设备及可读存储介质
CN111367926A (zh) 分布式系统的数据处理方法和装置
US8024519B2 (en) Catalog recovery through system management facilities reverse transversal
CN114840358A (zh) 一种基于虚拟磁盘的数据修复方法、装置及其介质
US20150169668A1 (en) Single Pass File System Repair With Copy On Write
CN102629223B (zh) 一种数据修复方法及装置
TWI461904B (zh) Linux FAT檔案系統修復方法及裝置
CN115202589B (zh) 放置组成员选择方法、装置、设备及可读存储介质
US8356230B2 (en) Apparatus to manage data stability and methods of storing and recovering data
US20170337213A1 (en) Metadata regeneration
CN105573862B (zh) 一种恢复文件系统的方法和设备
CN114756523A (zh) 一种分布式存储方法、装置以及介质
US20220413733A1 (en) mon service migration method, apparatus, and device, and readable storage medium
CN114297196A (zh) 元数据存储方法、装置、电子设备及存储介质
CN107301073B (zh) 一种基于固态硬盘系统的配置信息检索方法及其装置
US20240176489A1 (en) Priority based raid (redundant array of independent disks) rebuild for a data storage system
CN115016740B (zh) 一种数据恢复方法、装置、电子设备及存储介质
US11520488B2 (en) Method and apparatus for identifying a device missing from a consistency group
CN117539690B (zh) 多磁盘数据的合并恢复方法、装置、设备、介质和产品

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