CN109271209A - 一种解析并提取qcow2及qcow3镜像文件的方法 - Google Patents
一种解析并提取qcow2及qcow3镜像文件的方法 Download PDFInfo
- Publication number
- CN109271209A CN109271209A CN201811125331.2A CN201811125331A CN109271209A CN 109271209 A CN109271209 A CN 109271209A CN 201811125331 A CN201811125331 A CN 201811125331A CN 109271209 A CN109271209 A CN 109271209A
- Authority
- CN
- China
- Prior art keywords
- cluster
- file
- address
- qcow3
- qcow2
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4416—Network booting; Remote initial program loading [RIPL]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于包括以下步骤:S100:查找并解析磁盘中qcow2及qcow3镜像文件的头文件,获取头文件信息;S200:根据所述头文件信息,获取并解析所述一级表,根据解析所述一级表的结果,获取并解析所述二级表,根据解析所述二级表的结果,获取簇地址;S300:根据所述步骤S200的方法,遍历所述qcow2及qcow3镜像文件的所述一级表及所述二级表,获取各个簇地址各自对应的簇数据并顺序保存为***文件;S400:根据指定文件在所述***文件中的绝对偏移地址及所述指定文件的大小,计算出所述指定文件在所述qcow2及qcow3镜像文件中的地址,并获取所述指定文件的内容。
Description
技术领域
本发明属于数据恢复领域,涉及一种解析并提取qcow2及qcow3镜像文件的方法。
背景技术
Qemu发源码的模拟处理器,与其他模拟处理器相比有开源、可移植、仿真速度快的等优点,在GNU/Linux平台上使用广泛。qcow2及qcow3是其扩展镜像文件的后缀,qcow2及qcow3镜像文件具有相同的数据结构,但与qcow镜像文件的数据结构不同。qcow2及qcow3文件***不支持空洞,拥有更小的文件占用、支持写时拷贝、支持快照、可以选择际遇zlib的压缩方式以及AES加密,qcow2及qcow3镜像被使用广泛。
那么,如何把镜像文件里面的内容提取出来、并获取qcow2及qcow3镜像文件中的用户数据呢?当前主流方法有两种:网络传输或者使用9psetup协议实现虚拟机与宿主之间的文件传输,但它们在提取数据上存在如下弊端:
1.利用网络来进行文件提取,需要先在宿主机上配置网络桥架,在qemu-kvm启动配置网卡。这种方法受网络限制特别大,且文件的传输速度也比较慢。
2.9psetup协议需先让宿主机在内核中配9p选项,同时qemu在编译时需要支持ATTR/XATTR。
3.需要使用工具打开qcow2及qcow3镜像里的虚拟机。
4.不能同时获得多个用户数据。
5.只能获取当前虚拟机所展现的数据,不能获取误删数据。
以上操作复杂,需要专业人员才能完成数据提取,不利于简单快速高效的提取数据。
发明内容
本发明针对现有技术的不足问题,提出了一种解析并提取qcow2及qcow3镜像文件的方法,通过直接解析qcow2及qcow3镜像文件的存储结构,对qcow2及qcow3镜像文件里的数据进行直接提取,包括以下步骤:
S100:查找并解析磁盘中qcow2及qcow3镜像文件的头文件,获取头文件信息,其中,所述头文件信息包含所述头文件的标识、版本、簇位移数、镜像文件的容量、簇位移数、加密标识、一级表的项数及所述一级表的起始地址;
S200:根据所述头文件信息,获取并解析所述一级表,根据解析所述一级表的结果,获取并解析所述二级表,根据解析所述二级表的结果,获取簇地址;
S300:根据所述步骤S200的方法,遍历所述qcow2及qcow3镜像文件的所述一级表及所述二级表,获取各个簇地址各自对应的簇数据并顺序保存为***文件;
S400:根据指定文件在所述***文件中的绝对偏移地址及所述指定文件的大小,计算出所述指定文件在所述qcow2及qcow3镜像文件中的地址,并获取所述指定文件的内容。
优选地,所述步骤S100中所述头文件信息的数据结构如下:
0x0至0x3字节:所述头文件信息的标识0x514649FB
0x4至0x7字节:版本
0x14至0x17字节:簇位移数,表示将二进制数“1”向左移的位数,左移完毕后的二进制数的大小为簇大小
0x18至0x1F字节:镜像文件的容量
0x20至0x23字节:加密标识,0表示未加密,1表示加密
0x24至0x27字节:一级表的项数
0x28至0x2F字节:一级表的起始地址。
优选地,所述步骤S200的具体步骤如下:
S201:根据簇位移数,计算簇大小;具体地,将二进制数“1”向左移,左移的位数等于所述簇位移数,左移完毕后的二进制数的大小为所述簇大小;
S202:根据所述头文件信息的数据结构,读取所述一级表的项数;
S203:根据所述头文件信息的数据结构,读取所述一级表的起始地址,寻址所述起始地址并以8字节为一项分别读取各个项,读取所述项的个数为所述二级表的项数,其中,所述二级表的项数=所述簇大小/8;以所述一级表的起始地址为首地址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为所述二级表的起始地址;如果读取所述项的内容为零,则不做解析;
S204:寻址所述二级表,判断当前二级表中当前项的首字节的次高位是否为1,如果是,表示当前二级表中当前项的内容所表示的簇数据为压缩数据,执行步骤S205,否则,表示当前二级表中当前项的内容为非压缩数据,执行步骤S206;
S205:解压所述压缩数据作为当前二级表中当前项表示的簇数据,执行所述步骤S300;
S206:将当前所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为大端存储的簇地址并进行保存,用以寻址并读取当前二级表中当前项对应的簇数据。
优选地,所述步骤S300的具体步骤如下:
S301:遍历所述一级表;
S302:判断是否完成所述一级表的遍历,如果是,执行步骤S400,否则,执行步骤S303;
S303:判断当前一级表中当前项的内容是否为零,如果是,执行步骤S304,否则,执行步骤S305;
S304:将当前一级表对应的二级表中所有项的内容填零,执行步骤S305;
S305:遍历所述二级表;
S306:判断是否完成所述二级表的遍历,如果是,执行步骤S301,否则,执行步骤S307;
S307:根据所述步骤S200的方法,获取当前簇地址;
S308:根据当前簇地址进行寻址并读取当前二级表中当前项对应的簇数据,如果当前二级表中当前项的内容为零,则对应簇的存储空间顺序填零,执行步骤S306。
优选地,所述步骤S400包含以下具体步骤:
S401:计算指定文件的地址在所述***文件中簇的位置,具体地,所述簇的位置=ceil(指定文件在所述***文件中的绝对偏移地址/簇大小),其中,ceil运算符代表向上取整,余数代表指定文件在当前簇内的偏移地址;
S402:计算指定文件的地址在所述一级表中的项数,具体地,所述项数=ceil(所述簇的位置/二级表的项数),其中,ceil运算符代表向上取整,余数代表指定文件在所述一级表中的项数;
S403:获取指定文件;具体地,根据所述步骤S401、S402的计算结果以及所述文件头信息包含的所述一级表的起始地址、作为所述二级表的起始地址的所述一级表的项的内容、作为簇地址的所述二级表的项的内容,获得指定文件在所述qcow2及qcow3镜像文件的绝对偏移地址,并根据所述指定文件的大小,在所述qcow2及qcow3镜像文件中寻址并获取指定文件;
S404:判断当前获取的指定文件大小加上簇内的偏移地址是否大于簇大小,如果是,在当前簇中读取字节长度为簇大小-簇内的偏移地址的内容,并执行步骤S405,否则,结束流程;
S405:对指定文件在所述***文件中的绝对偏移地址及指定文件大小重新赋值,并执行步骤S401;
具体地,指定文件在所述***文件中的绝对偏移地址=指定文件在所述***文件中的绝对偏移地址+(簇大小-指定文件在当前簇内的偏移地址),指定文件大小=指定文件大小-(簇大小-指定文件在当前簇内的偏移地址),其中,簇大小-指定文件在当前簇内的偏移地址为已读取指定文件的大小。
优选地,所述步骤S205包含以下具体步骤:
S2051:以所述二级表的起始地址为首地址,对所述二级表寻址,将当前二级表中当前项的8字节内容转换为二进制数;
S2052:所述二进制数的第62比特位至第54比特位作为所述压缩数据的大小,其单位为扇区;所述二进制数的第53比特位至第1比特位作为所述压缩数据在qcow2及qcow3镜像文件中的偏移地址;
S2053:根据所述压缩数据的在qcow2及qcow3镜像文件中的偏移地址及所述压缩数据的大小,寻址并获取所述压缩数据;
S2054:解压所述压缩数据作为当前二级表中当前项表示的簇数据,执行所述步骤S300。
优选地,所述步骤S206包含以下具体步骤:
S2061:以各个二级表的起始地址为首地址,对二级表寻址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为非压缩数据在qcow2及qcow3镜像文件中的偏移地址;
S2062:根据非压缩数据的在qcow2及qcow3镜像文件中的偏移地址及非压缩数据的大小,寻址并获取非压缩数据,其中,非压缩数据的大小等于所述簇大小。
优选地,qcow2及qcow3镜像文件具有相同的数据结构。
本发明的有益效果是:
1.不需要依赖网络传输或者9psetup协议;
2.支持其压缩的qcow2及qcow3镜像文件的提取;
3.提取文件速度快于主流方法;
4.不需要启动虚拟机,可以直接提取文件;
5.不需要切换身份,可获取当前虚拟机上所有用户的数据;
6.同时能够提取误删的数据。
对本发明出现的术语作出以下解释:
向上取整:比自己大的最小整数;
项:item,组成一级表、二级表中数据的最小单位;
附图说明
图1为本发明所提供的方法的总流程图;
图2为本发明实施例中qcow3镜像文件的数据结构图,包括一级表、二级表及簇之间的寻址及映射关系;
图3为本发明实施例中头文件信息的数据结构图;
图4为本发明一个实施例中的一级表的数据结构图;
图5为本发明一个实施例中包含二级表的数据结构图;
图6为本发明一个实施例中簇数据的数据结构图;
图7为本发明另一实施例中包含头文件信息及一级表的数据结构图;
图8为本发明另一实施例中包含二级表的数据结构图;
图9为本发明另一实施例中簇数据的数据结构图;
图10为本发明中获取簇数据并顺序保存为***文件的具体流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步阐述。
图1示出了本发明所提供的方法的总流程图;值得注意的是,qcow2及qcow3镜像文件具有相同的数据结构,因此,解析并提取qcow2镜像文件的方法与此相同。
图2示出了本发明实施例中qcow3镜像文件的数据结构图,包括一级表、二级表及簇之间的寻址及映射关系;如图2所示,qcow3镜像文件是由多个固定单元结构,即,簇(cluster)构成的,簇的地址存储在二级表中并由二级表来管理,二级表的地址存储在一级表上并由一级表来管理。为了说明本申请所提供的方法,在本实施例中,以512字节为一个扇区,把簇分成如图2所示的若干个数据块。获取簇数据,需要解析一级表、二级表的信息以寻址簇数据。
如图1所示,本发明的方法包括以下步骤:
S100:查找并解析磁盘中qcow3镜像文件的头文件,获取头文件信息,其中,头文件信息包含头文件的标识、版本、簇位移数、镜像文件的容量、簇位移数、加密标识、一级表的项数及一级表的起始地址;如图3所示,头文件信息的数据结构如下:
0x0至0x3字节:头文件信息的标识0x514649FB,如图3中细黑下划线部分所示,与此相对应的ASCII码为“QFI”;
0x4至0x7字节:版本,本实施例中为0x00000003,即,版本为3,表示该镜像文件为qcow3镜像文件;
0x14至0x17字节:簇位移数,表示将二进制数“1”向左移的位数,左移完毕后的二进制数的大小为簇大小;
如图3中粗黑下划线部分所示的0x00000010,0x10表示将二进制数“1”向左移0x10位,即,左移16位,得到二进制数10000000000000000,即十进制数65536,由此可以计算出簇大小为65536字节。
0x18至0x1F字节:镜像文件的容量;
0x20至0x23字节:加密标识,0表示未加密,1表示加密
0x24至0x27字节:一级表的项数,如图3中圆角矩形框部分所示的0x00000080,即,一级表的项数为0x00000080,即,一级表的项数为128个;
0x28至0x2F字节:一级表的起始地址;如图3中矩形框部分所示的0x0000000000030000,即,一级表的起始地址为0x00030000。
S200:根据头文件信息,获取并解析一级表,根据解析一级表的结果,获取并解析二级表,根据解析二级表的结果,获取簇地址,步骤S200的具体步骤如下:
S201:根据簇位移数,计算簇大小;如图3中粗黑下划线部分所示的0x00000010,0x10表示将二进制数“1”向左移0x10位,即,左移16位,得到二进制数10000000000000000,即十进制数65536,由此可以计算出簇大小为65536字节;
S202:根据头文件信息的数据结构,读取一级表的项数;如图3中圆角矩形框部分所示的0x00000080,即,一级表的项数为0x00000080,即,一级表的项数为128个;
S203:根据头文件信息的数据结构,读取一级表的起始地址;如图3中矩形框部分所示的0x0000000000030000,即,一级表的起始地址为0x00030000。
寻址起始地址并以8字节为一项分别读取各个项,读取项的个数为二级表的项数,其中,二级表的项数=65536/8=8192个;如果读取项的内容为零,则不做解析;图4示出了本发明一个实施例中一级表的数据结构图,寻址一级表的起始地址0x00030000,以8字节为一项,读取第一个8字节的第一项0x80000000040000,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为二级表的起始地址;
具体地,以图4所示的第一项内容0x8000000000040000为例,将0x8000000000040000转换为二进制数1000000000000000000000000000000000000000000001000000000000000000,该二进制数的第62比特位至第1比特位的内容00000000000000000000000000000000000000000001000000000000000000作为二级表的起始地址,将该二进制数表示的二级表的起始地址转换为十六进制数为0x00040000;
S204:寻址所述二级表,判断当前二级表中当前项的首字节的次高位是否为1,如果是,表示当前二级表中当前项的内容所表示的簇数据为压缩数据,执行步骤S205,否则,表示当前二级表中当前项的内容为非压缩数据,执行步骤S206;
S205:解压压缩数据作为当前二级表中当前项表示的簇数据,执行步骤S300;步骤S205包含以下具体步骤:
S2051:图4示出了本发明一个实施例中的一级表的数据结构图,如图4中细黑下划线部分所示,以一级表的起始地址0x00030000为首地址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为所述二级表的起始地址;
以图4所示的第一项内容0x8000000000040000为例,将0x8000000000040000转换为二进制数1000000000000000000000000000000000000000000001000000000000000000,该二进制数的第62比特位至第1比特位的内容00000000000000000000000000000000000000000001000000000000000000作为二级表的起始地址,将该二进制数表示的二级表的起始地址转换为十六进制数为0x00040000;
以0x00040000为首地址,对二级表寻址;图5示出了本发明一个实施例中包含二级表的数据结构图;读取地址0x00040000为首地址的8字节内容0x4600000000050000,将该8字节内容0x4600000000050000转换为二进制数为0100011000000000000000000000000000000000000001010000000000000000;
S2052:上述二进制数的次高位(即第63比特位)为“1”,即为压缩标识,表示该二级表的此项对应的簇数据为压缩数据;
二进制数的第62比特位至第54比特位(000110000)作为压缩数据的大小,其单位为扇区;即,压缩数据的大小为48(即,二进制数000110000)扇区;
二进制数的第53比特位至第1比特位(00000000000000000000000000000000001010000000000000000)作为压缩数据在qcow3镜像文件中的偏移地址;即,该压缩数据在qcow3镜像文件中的偏移地址为0x50000;
S2053:根据压缩数据的在qcow3镜像文件中的偏移地址0x50000及压缩数据的大小48扇区,寻址并获取压缩数据;
图6示出了本发明一个实施例中簇数据的数据结构图,如图6所示,从地址0x50000开始后的连续48个扇区的内容即为该压缩数据,为简洁起见,图6仅仅示出了该压缩数据的部分数据;
S2054:解压压缩数据作为当前二级表中当前项表示的簇数据,执行步骤S300。
S206:将当前所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为大端存储的簇地址并进行保存,用以寻址并读取当前二级表中当前项对应的簇数据,步骤S206包含以下具体步骤:
S2061:图7示出了本发明另一实施例中的一级表的数据结构图,如图7细黑下划线部分所示,以一级表的起始地址0x00030000为首地址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为所述二级表的起始地址;
以图7所示的第一项内容0x8000000000040000为例,将0x8000000000040000转换为二进制数1000000000000000000000000000000000000000000001000000000000000000,该二进制数的第62比特位至第1比特位的内容00000000000000000000000000000000000000000001000000000000000000作为二级表的起始地址,将该二进制数表示的二级表的起始地址转换为十六进制数为0x00040000;
以0x00040000为首地址,对二级表寻址;
图8示出了本发明另一实施例中包含二级表的数据结构图;如图8粗黑下划线部分所示,读取地址0x00040000为首地址的8字节内容0x8000000000050000,将该8字节内容0x8000000000050000转换为二进制数1000000000000000000000000000000000000000000001010000000000000000;
上述二进制数的次高位(即第63比特位)为“0”,即为非压缩标识
二进制数的第62比特位至第1比特位(00000000000000000000000000000000000000000001010000000000000000)作为非压缩数据在qcow3镜像文件中的偏移地址;即,该非压缩数据在qcow3镜像文件中的偏移地址为0x50000;
S2062:根据非压缩数据的在qcow3镜像文件中的偏移地址0x50000及非压缩数据的大小,寻址并获取非压缩数据,其中,非压缩数据的大小等于簇大小65536字节,即0x10000字节;
图9示出了本发明另一实施例中簇数据的数据结构图,如图9所示,从地址0x50000开始的连续65536(即,十六进制数0x10000)字节的内容即为该非压缩数据,为简洁起见,图9仅仅示出了该非压缩数据的部分数据。
S300:根据步骤S200的方法,遍历qcow3镜像文件的一级表及二级表,获取各个簇地址各自对应的簇数据并顺序保存为***文件,如图10所示,步骤S300的具体步骤如下:
S301:遍历一级表;
S302:判断是否完成一级表的遍历,如果是,执行步骤S400,否则,执行步骤S303;
S303:判断当前一级表中当前项的内容是否为零,如果是,执行步骤S304,否则,执行步骤S305;
S304:将当前一级表对应的二级表中所有项的内容填零,执行步骤S305;
S305:遍历二级表;
S306:判断是否完成二级表的遍历,如果是,执行步骤S301,否则,执行步骤S307;
S307:根据步骤S200的方法,获取当前簇地址;
S308:根据当前簇地址进行寻址并读取当前二级表中当前项对应的簇数据,如果当前二级表中当前项的内容为零,则对应簇的存储空间顺序填零,执行步骤S306。
S400:根据指定文件在***文件中的绝对偏移地址及指定文件的大小,计算出指定文件在qcow3镜像文件中的地址,并获取指定文件的内容,步骤S400包含以下具体步骤:
S401:计算指定文件的地址在***文件中簇的位置,具体地,簇的位置=ceil(指定文件在***文件中的绝对偏移地址/簇大小),其中,ceil运算符代表向上取整,余数代表指定文件在当前簇内的偏移地址;
S402:计算指定文件的地址在一级表中的项数,具体地,项数=ceil(簇的位置/二级表的项数),其中,ceil运算符代表向上取整,余数代表指定文件在一级表中的项数;
S403:获取指定文件;具体地,根据步骤S401、S402的计算结果以及文件头信息包含的一级表的起始地址、作为二级表的起始地址的一级表的项的内容、作为簇地址的二级表的项的内容,获得指定文件在qcow3镜像文件的绝对偏移地址,并根据指定文件的大小,在qcow3镜像文件中寻址并获取指定文件。
S404:判断当前获取的指定文件大小加上簇内的偏移地址是否大于簇大小,如果是,在当前簇中读取字节长度为簇大小-簇内的偏移地址的内容,并执行步骤S405,否则,结束流程;
S405:对指定文件在***文件中的绝对偏移地址及指定文件大小重新赋值,并执行步骤S401;
具体地,指定文件在***文件中的绝对偏移地址=指定文件在***文件中的绝对偏移地址+(簇大小-指定文件在当前簇内的偏移地址),指定文件大小=指定文件大小-(簇大小-指定文件在当前簇内的偏移地址),其中,簇大小-指定文件在当前簇内的偏移地址为已读取指定文件的大小。
通过本发明提供的方法,解决了现有技术中尚无一种通过直接解析qcow2及qcow3的文件存储结构并对qcow2及qcow3镜像文件里的数据进行直接提取的方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (8)
1.一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于包括以下步骤:
S100:查找并解析磁盘中qcow2及qcow3镜像文件的头文件,获取头文件信息,其中,所述头文件信息包含所述头文件的标识、版本、簇位移数、镜像文件的容量、簇位移数、加密标识、一级表的项数及所述一级表的起始地址;
S200:根据所述头文件信息,获取并解析所述一级表,根据解析所述一级表的结果,获取并解析所述二级表,根据解析所述二级表的结果,获取簇地址;
S300:根据所述步骤S200的方法,遍历所述qcow2及qcow3镜像文件的所述一级表及所述二级表,获取各个簇地址各自对应的簇数据并顺序保存为***文件;
S400:根据指定文件在所述***文件中的绝对偏移地址及所述指定文件的大小,计算出所述指定文件在所述qcow2及qcow3镜像文件中的地址,并获取所述指定文件的内容。
2.根据权利要求1所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S100中所述头文件信息的数据结构如下:
0x0至0x3字节:所述头文件信息的标识0x514649FB
0x4至0x7字节:版本
0x14至0x17字节:簇位移数,表示将二进制数“1”向左移的位数,左移完毕后的二进制数的大小为簇大小
0x18至0x1F字节:镜像文件的容量
0x20至0x23字节:加密标识,0表示未加密,1表示加密
0x24至0x27字节:一级表的项数
0x28至0x2F字节:一级表的起始地址。
3.根据权利要求1所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S200的具体步骤如下:
S201:根据簇位移数,计算簇大小;具体地,将二进制数“1”向左移,左移的位数等于所述簇位移数,左移完毕后的二进制数的大小为所述簇大小;
S202:根据所述头文件信息的数据结构,读取所述一级表的项数;
S203:根据所述头文件信息的数据结构,读取所述一级表的起始地址,寻址所述起始地址并以8字节为一项分别读取各个项,读取所述项的个数为所述二级表的项数,其中,所述二级表的项数=所述簇大小/8;以所述一级表的起始地址为首地址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为所述二级表的起始地址;如果读取所述项的内容为零,则不做解析;
S204:寻址所述二级表,判断当前二级表中当前项的首字节的次高位是否为1,如果是,表示当前二级表中当前项的内容所表示的簇数据为压缩数据,执行步骤S205,否则,表示当前二级表中当前项的内容为非压缩数据,执行步骤S206;
S205:解压所述压缩数据作为当前二级表中当前项表示的簇数据,执行所述步骤S300;
S206:将当前所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为大端存储的簇地址并进行保存,用以寻址并读取当前二级表中当前项对应的簇数据。
4.根据权利要求2所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S300的具体步骤如下:
S301:遍历所述一级表;
S302:判断是否完成所述一级表的遍历,如果是,执行步骤S400,否则,执行步骤S303;
S303:判断当前一级表中当前项的内容是否为零,如果是,执行步骤S304,否则,执行步骤S305;
S304:将当前一级表对应的二级表中所有项的内容填零,执行步骤S305;
S305:遍历所述二级表;
S306:判断是否完成所述二级表的遍历,如果是,执行步骤S301,否则,执行步骤S307;
S307:根据所述步骤S200的方法,获取当前簇地址;
S308:根据当前簇地址进行寻址并读取当前二级表中当前项对应的簇数据,如果当前二级表中当前项的内容为零,则对应簇的存储空间顺序填零,执行步骤S306。
5.根据权利要求4所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S400包含以下具体步骤:
S401:计算指定文件的地址在所述***文件中簇的位置,具体地,所述簇的位置=ceil(指定文件在所述***文件中的绝对偏移地址/簇大小),其中,ceil运算符代表向上取整,余数代表指定文件在当前簇内的偏移地址;
S402:计算指定文件的地址在所述一级表中的项数,具体地,所述项数=ceil(所述簇的位置/二级表的项数),其中,ceil运算符代表向上取整,余数代表指定文件在所述一级表中的项数;
S403:获取指定文件;具体地,根据所述步骤S401、S402的计算结果以及所述文件头信息包含的所述一级表的起始地址、作为所述二级表的起始地址的所述一级表的项的内容、作为簇地址的所述二级表的项的内容,获得指定文件在所述qcow2及qcow3镜像文件的绝对偏移地址,并根据所述指定文件的大小,在所述qcow2及qcow3镜像文件中寻址并获取指定文件;
S404:判断当前获取的指定文件大小加上簇内的偏移地址是否大于簇大小,如果是,在当前簇中读取字节长度为簇大小-簇内的偏移地址的内容,并执行步骤S405,否则,结束流程;
S405:对指定文件在所述***文件中的绝对偏移地址及指定文件大小重新赋值,并执行步骤S401;
具体地,指定文件在所述***文件中的绝对偏移地址=指定文件在所述***文件中的绝对偏移地址+(簇大小-指定文件在当前簇内的偏移地址),指定文件大小=指定文件大小-(簇大小-指定文件在当前簇内的偏移地址),其中,簇大小-指定文件在当前簇内的偏移地址为已读取指定文件的大小。
6.根据权利要求3所述的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,所述步骤S205包含以下具体步骤:
S2051:以所述二级表的起始地址为首地址,对所述二级表寻址,将当前二级表中当前项的8字节内容转换为二进制数;
S2052:所述二进制数的第62比特位至第54比特位作为所述压缩数据的大小,其单位为扇区;所述二进制数的第53比特位至第1比特位作为所述压缩数据在qcow2及qcow3镜像文件中的偏移地址;
S2053:根据所述压缩数据的在qcow2及qcow3镜像文件中的偏移地址及所述压缩数据的大小,寻址并获取所述压缩数据;
S2054:解压所述压缩数据作为当前二级表中当前项表示的簇数据,执行所述步骤S300。
7.根据权利要求3的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,步骤S206包含以下具体步骤:
S2061:以各个二级表的起始地址为首地址,对二级表寻址,以8字节为一项,寻址并读取各个项,将所读取各个项的8字节内容中的第62比特位至第1比特位的内容作为非压缩数据在qcow2及qcow3镜像文件中的偏移地址;
S2062:根据非压缩数据的在qcow2及qcow3镜像文件中的偏移地址及非压缩数据的大小,寻址并获取非压缩数据,其中,非压缩数据的大小等于所述簇大小。
8.根据权利要求1的一种解析并提取qcow2及qcow3镜像文件的方法,其特征在于,qcow2及qcow3镜像文件具有相同的数据结构。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811125331.2A CN109271209A (zh) | 2018-09-26 | 2018-09-26 | 一种解析并提取qcow2及qcow3镜像文件的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811125331.2A CN109271209A (zh) | 2018-09-26 | 2018-09-26 | 一种解析并提取qcow2及qcow3镜像文件的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109271209A true CN109271209A (zh) | 2019-01-25 |
Family
ID=65197731
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811125331.2A Pending CN109271209A (zh) | 2018-09-26 | 2018-09-26 | 一种解析并提取qcow2及qcow3镜像文件的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109271209A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111008378A (zh) * | 2019-11-29 | 2020-04-14 | 四川效率源信息安全技术股份有限公司 | 一种清洗希捷硬盘固件区恶意代码的方法 |
CN115514498A (zh) * | 2022-09-27 | 2022-12-23 | 四川长虹电器股份有限公司 | 快速检测安卓电视***镜像文件中签名信息的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103095834A (zh) * | 2013-01-16 | 2013-05-08 | 中国科学院计算技术研究所 | 一种跨虚拟化数据中心的虚拟机在线迁移方法 |
CN105528237A (zh) * | 2015-12-10 | 2016-04-27 | 国云科技股份有限公司 | 一种基于openstack的物理机***打包方法 |
CN105912428A (zh) * | 2016-05-20 | 2016-08-31 | 上海数腾软件科技股份有限公司 | 实现源数据实时转化为虚拟机镜像的***及方法 |
US20170024260A1 (en) * | 2015-07-21 | 2017-01-26 | Cisco Technology, Inc. | Workload migration across cloud providers and data centers |
-
2018
- 2018-09-26 CN CN201811125331.2A patent/CN109271209A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103095834A (zh) * | 2013-01-16 | 2013-05-08 | 中国科学院计算技术研究所 | 一种跨虚拟化数据中心的虚拟机在线迁移方法 |
US20170024260A1 (en) * | 2015-07-21 | 2017-01-26 | Cisco Technology, Inc. | Workload migration across cloud providers and data centers |
CN105528237A (zh) * | 2015-12-10 | 2016-04-27 | 国云科技股份有限公司 | 一种基于openstack的物理机***打包方法 |
CN105912428A (zh) * | 2016-05-20 | 2016-08-31 | 上海数腾软件科技股份有限公司 | 实现源数据实时转化为虚拟机镜像的***及方法 |
Non-Patent Citations (2)
Title |
---|
(美)ED TAYLOR: "《网络互联技术指南》", 31 August 2001 * |
LUO_MINGHAO: "qcow2镜像格式解析", 《HTTPS://BLOG.CSDN.NET/U013472064/ARTICLE/DETAILS/47954583?UTM_SOURCE=BLOGXGWZ6》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111008378A (zh) * | 2019-11-29 | 2020-04-14 | 四川效率源信息安全技术股份有限公司 | 一种清洗希捷硬盘固件区恶意代码的方法 |
CN111008378B (zh) * | 2019-11-29 | 2023-08-01 | 四川效率源信息安全技术股份有限公司 | 一种清洗硬盘固件区恶意代码的方法 |
CN115514498A (zh) * | 2022-09-27 | 2022-12-23 | 四川长虹电器股份有限公司 | 快速检测安卓电视***镜像文件中签名信息的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110019004B (zh) | 一种数据处理方法、装置及*** | |
JP2009539169A5 (zh) | ||
US20130006981A1 (en) | Storage device and data processing device utilizing determined dictionary compression | |
US9509333B2 (en) | Compression device, compression method, decompression device, decompression method, information processing system, and recording medium | |
JP5753946B2 (ja) | フォントファイルをダウンロードする方法およびシステム | |
CN105446975B (zh) | 一种文件打包方法及装置 | |
US10166467B2 (en) | Information processing device, data structure of game data, and recording medium | |
US10311034B2 (en) | Computer-readable recording medium | |
CN109271209A (zh) | 一种解析并提取qcow2及qcow3镜像文件的方法 | |
CN106445616B (zh) | 终端设备从多***至单***的升级方法及装置 | |
EP2878348A1 (en) | Information processing device, data structure of game data, program, and recording medium | |
CN109298894A (zh) | 一种提取qcow镜像文件的方法 | |
CN106354746B (zh) | 搜索方法和搜索设备 | |
JP2007080240A (ja) | ファイル割り当てテーブルのアクセス手法 | |
CN116894016A (zh) | 轨道交通信号的日志压缩方法及装置 | |
US8463759B2 (en) | Method and system for compressing data | |
US20160139819A1 (en) | Computer-readable recording medium, encoding device and encoding method | |
CN111414339A (zh) | 一种文件的处理方法、***、装置、设备及介质 | |
JP6931442B2 (ja) | 符号化プログラム、インデックス生成プログラム、検索プログラム、符号化装置、インデックス生成装置、検索装置、符号化方法、インデックス生成方法および検索方法 | |
EP3404839A1 (en) | Encoding program, encoding device, and encoding method | |
CN107026888B (zh) | 大容量数据传送装置及方法 | |
US9496895B2 (en) | Compression method and decompression method | |
CN109271463A (zh) | 一种恢复MySQL数据库的innodb压缩数据的方法 | |
CN113384872A (zh) | 在微端中处理信息资源的方法、装置、电子设备及存储介质 | |
JP6512294B2 (ja) | 圧縮プログラム、圧縮方法および圧縮装置 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190125 |
|
RJ01 | Rejection of invention patent application after publication |