CN109710581A - 一种解压qcow镜像文件中压缩数据的方法 - Google Patents

一种解压qcow镜像文件中压缩数据的方法 Download PDF

Info

Publication number
CN109710581A
CN109710581A CN201811594980.7A CN201811594980A CN109710581A CN 109710581 A CN109710581 A CN 109710581A CN 201811594980 A CN201811594980 A CN 201811594980A CN 109710581 A CN109710581 A CN 109710581A
Authority
CN
China
Prior art keywords
qcow
image file
compressed data
cluster
compressed
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.)
Granted
Application number
CN201811594980.7A
Other languages
English (en)
Other versions
CN109710581B (zh
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.)
Sichuan Art Beats Nature Information Security Intelligent Equipment Co Ltd
Original Assignee
Sichuan Art Beats Nature Information Security Intelligent Equipment 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 Sichuan Art Beats Nature Information Security Intelligent Equipment Co Ltd filed Critical Sichuan Art Beats Nature Information Security Intelligent Equipment Co Ltd
Priority to CN201811594980.7A priority Critical patent/CN109710581B/zh
Publication of CN109710581A publication Critical patent/CN109710581A/zh
Application granted granted Critical
Publication of CN109710581B publication Critical patent/CN109710581B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Compression Of Band Width Or Redundancy In Fax (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种解压qcow镜像文件中压缩数据的方法,其特征在于包括以下步骤:S100:查找并解析磁盘中qcow镜像文件,获取所述qcow镜像文件中压缩数据;S200:获取zlib库中压缩数据的头部;S300:解压所述qcow镜像文件的压缩数据。本发明利用zlib库,对压缩的qcow1镜像文件及压缩的qcow2镜像文件能够进行无损解压,对应各个版本的zlib库适应性良好,解决了现有技术中尚无一种解压qcow镜像文件中压缩数据的方法的技术问题。

Description

一种解压qcow镜像文件中压缩数据的方法
技术领域
本发明属于数据解压领域,涉及一种解压qcow镜像文件中压缩数据的方法。
背景技术
Qemu发源码的模拟处理器,与其他模拟处理器相比有开源、可移植、仿真速度快的等优点,在GNU/Linux平台上使用广泛。qcow镜像文件包括qcow 1、qcow2及qcow3三种版本,其中,qcow 1、qcow2及qcow3是其扩展镜像文件的后缀。qcow2及qcow3镜像文件具有相同的数据结构,但又与qcow1镜像文件的数据结构不同,qcow2及qcow3文件系统不支持空洞,拥有更小的文件占用、支持写时拷贝、支持快照、可以选择基于zlib的压缩方式以及AES加密,目前,在现有技术中使用qcow镜像文件的同时,qcow2镜像文件及qcow3镜像文件正被越来越多地使用。
在提取、解析qcow镜像文件过程中,还需要对压缩的qcow 1、qcow2及qcow3镜像文件进行解压,以便正常地读取qcow 1、qcow2及qcow3镜像文件。但是,qcow镜像文件是基于zlib的方式并以簇为单位分别进行压缩,而使用zlib库却不能直接解压,如果使用zlib库直接解压,将会出现“数据源错误”,而zlib库官网并没有公开具体的解压方式。因此,现有技术中尚无一种解压qcow镜像文件中压缩数据的有效方法。
发明内容
本发明针对现有技术的不足问题,提出了一种解压qcow镜像文件中压缩数据的方法,通过查找并解析磁盘中qcow镜像文件,获取所述qcow镜像文件中压缩数据,在此基础上获取zlib库中压缩数据的头部,并将该头部与待解压的qcow镜像文件的压缩数据进行合并,最终实现qcow镜像文件的解压,包括以下步骤:
S100:查找并解析磁盘中qcow镜像文件,获取所述qcow镜像文件中压缩数据,包含以下步骤:
S101:获取所述qcow镜像文件中头文件信息的第4至第7字节的内容作为版本,第32字节的内容0xXY作为簇位移数,其中,X、Y为大于零的自然数;
S102:判断所述qcow镜像文件的版本是否为1,如果是,执行步骤S103,否则执行步骤S105;
S103:解析对应的二级表中当前项的前8字节内容,判断最高bit位是否为1,如果是,执行步骤S104,否则,结束流程;
S104:最高bit位后的连续0xXY bit位表示簇压缩后的大小,单位为byte,其余bit位表示簇地址,执行步骤S110;
S105:解析对应的二级表中当前项的前8字节内容,判断次高bit位是否为1,如果是,执行步骤S106,否则,结束流程;
S106:次高bit位后的连续0xXY bit位代表簇压缩后的大小,单位为扇区,其余bit位表示簇地址;
S107:判断二级表中当前项的下一项表示的簇是否为压缩数据,如果是,执行步骤S108,否则,执行步骤S109;
S108:当前地址减下一地址的差,与所述簇压缩后的大小乘以512的积进行比较,较大者的值加512的和作为簇压缩后的大小,其单位为byte,执行S110;
S109:簇压缩后的大小等于所述簇压缩后的大小乘以512的积,再加512的和,其单位为byte,执行步骤S110;
S110:根据获取到的簇地址及簇压缩后的大小,从所述qcow镜像文件中读取压缩数据,执行步骤S200。
S200:获取zlib库中压缩数据的头部;
S300:解压所述qcow镜像文件的压缩数据。
优选地,所述步骤S200包括以下步骤:
S201:下载zlib库;
S202:使用zlib库中函数压缩任一数据;
S203:获取所述步骤S202中压缩后的数据中前两个字节作为所述头部。
优选地,所述zlib库中函数为ZEXTERN int ZEXPORT compress OF((Bytef*dest,uLongf*destLen,const Bytef*source,uLong sourceLen))。
优选地,所述步骤S300包括以下步骤:
S301:将所述步骤S200所获取的所述头部添加至所述步骤S100所获取的压缩数据前,作为被解压数据;
S302:采用所述函数ZEXTERN int ZEXPORT compress OF((Bytef*dest,uLongf*destLen,const Bytef*source,uLong sourceLen))解压所述被解压文件,获取所述qcow镜像文件中压缩数据。
本发明的有益效果是:解决了现有技术中尚无一种解压qcow镜像文件中压缩数据的方法的技术问题。
附图说明
图1为本发明所提供的方法的总流程图;
图2为本发明中获取qcow镜像文件中压缩数据的具体流程图。
具体实施方式
题为“一种提取qcow镜像文件的方法”、申请号为201811126716.0、申请日为2018年9月26日以及题为“一种解析并提取qcow2及qcow3镜像文件的方法”、申请号为201811125331.2、申请日为2018年9月26日的两篇发明申请分别公开了qcow镜像文件的提取和解析的方法,在此通过引用方式将其全文内容纳入本申请作为参考。
下面结合附图和实施例对本发明作进一步阐述。
图1示出了本发明所提供的方法的总流程图,如图1所示,本发明的方法包括以下步骤:
S100:查找并解析磁盘中qcow镜像文件,获取qcow镜像文件中压缩数据,包含如图2所示的以下步骤:
S101:获取qcow镜像文件中头文件信息的第4至第7字节的内容作为版本,第32字节的内容0xXY作为簇位移数,其中,X、Y为大于零的自然数;通过结合上述两篇发明申请的全文内容,本领域技术人员可以理解步骤S101的具体方法,在此不做赘述。
S102:判断所述qcow镜像文件的版本是否为1,如果是,执行步骤S103,否则执行步骤S105;
通过步骤S101,能够获取该qcow镜像文件的版本,如果版本为1,则表示该qcow镜像文件为qcow1镜像文件,否则为qcow2镜像文件或qcow3镜像文件,因为qcow2镜像文件与qcow3镜像文件具有相同的数据结构,因此,将qcow2镜像文件及qcow3镜像文件当做同一情况处理。
S103:解析对应的二级表中当前项的前8字节内容,判断最高bit位是否为1,如果是,执行步骤S104,否则,结束流程;
通过结合上述两篇发明申请的全文内容,本领域技术人员可以理解步骤S103的具体方法,在此不做赘述。
在本发明的一个实施例中,二级表中当前项的前8字节内容为0x8EC8000000016000,将该8字节内容转换为二进制为1000111011001000000000000000000000000000000000010110000000000000,由上此可见,最高bit位为1,表示对应的簇为压缩数据。
S104:最高bit位后的连续0xXY bit位表示簇压缩后的大小,单位为byte,其余bit位表示簇地址,执行步骤S110;
本实施例中,簇位移数为0x0C,即十进制数12,如下划线部分所示,
1000111011001 00000000000000000000000000000000010110000000000000
换言之,最高bit位后的连续0x0C(即12个)bit位000111011001表示表示簇压缩后的大小,单位为byte,转换为十六进制为0x1D9。其余bit位00000000000000000000000000000000010110000000000000表示簇地址,转换为十六进制为0x16000。
S105:解析对应的二级表中当前项的前8字节内容,判断次高bit位是否为1,如果是,执行步骤S106,否则,结束流程;
在本发明的另一实施例中,二级表中当前项的前8字节内容为0x4600000000050000,将该8字节内容转换为二进制为0100011000000000000000000000000000000000000001010000000000000000,由上此可见,次高bit位为1,表示对应的簇为压缩数据。
S106:次高bit位后的连续0xXY bit位代表簇压缩后的大小,单位为扇区,其余bit位表示簇地址;
在本发明的另一实施例中,簇位移数为0x08,即十进制数8,如下划线部分所示,
0100011000 00000000000000000000000000000000001010000000000000000
换言之,次高bit位后的连续0x08(即8个)bit位00011000表示簇压缩后的大小,单位为扇区,转换为十六进制为0x18,由于该0x18以扇区为单位,因此,需将该值乘以0x200(即十进制数512)后的积作为簇压缩后的大小,值得注意的是的是,乘以0x200(即十进制数512)后的值以byte为单位。其余bit位00000000000000000000000000000000001010000000000000000表示簇地址,转换为十六进制为0x50000。
S107:判断二级表中当前项的下一项表示的簇是否为压缩数据,如果是,执行步骤S108,否则,执行步骤S109;
同理,通过上述方法,能够判断二级表中当前项的下一项表示的簇是否为压缩数据,在此不做赘述。
S108:当前地址减下一地址的差,与所述簇压缩后的大小乘以512的积进行比较,较大者的值加512的和作为簇压缩后的大小,其单位为byte,执行S110;
S109:簇压缩后的大小等于所述簇压缩后的大小乘以512的积,再加512的和,其单位为byte,执行步骤S110;
S110:根据获取到的簇地址及簇压缩后的大小,从所述qcow镜像文件中读取压缩数据,执行步骤S200。
S200:获取zlib库中压缩数据的头部,步骤S200包括以下步骤:
S201:下载zlib库;
S202:使用zlib库的函数ZEXTERN int ZEXPORT compress OF((Bytef*dest,uLongf*destLen,const Bytef*source,uLong sourceLen)),用以压缩任一数据;值得注意的是,函数ZEXTERN int ZEXPORT compress OF((Bytef*dest,uLongf*destLen,constBytef*source,uLong sourceLen))中,destLen的值必须大于簇大小。
S203:获取步骤S202中压缩后的数据中前两个字节作为头部。
S300:解压qcow镜像文件的压缩数据,步骤S300包括以下步骤:
S301:将步骤S200所获取的头部添加至步骤S100所获取的压缩数据前,作为被解压数据;
S302:采用函数ZEXTERN int ZEXPORT compress OF((Bytef*dest,uLongf*destLen,const Bytef*source,uLong sourceLen))解压被解压文件,获取qcow镜像文件中压缩数据,实现qcow镜像文件的正常读取。
通过本发明提供的方法,解决了现有技术中尚无一种解压qcow镜像文件中压缩数据的有效方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (5)

1.一种解压qcow镜像文件中压缩数据的方法,其特征在于包括以下步骤:
S100:查找并解析磁盘中qcow镜像文件,获取所述qcow镜像文件中压缩数据,包含以下步骤:
S101:获取所述qcow镜像文件中头文件信息的第4至第7字节的内容作为版本,第32字节的内容0xXY作为簇位移数,其中,X、Y为大于零的自然数;
S102:判断所述qcow镜像文件的版本是否为1,如果是,执行步骤S103,否则执行步骤S105;
S103:解析对应的二级表中当前项的前8字节内容,判断最高bit位是否为1,如果是,执行步骤S104,否则,结束流程;
S104:最高bit位后的连续0xXY bit位表示簇压缩后的大小,单位为byte,其余bit位表示簇地址,执行步骤S110;
S105:解析对应的二级表中当前项的前8字节内容,判断次高bit位是否为1,如果是,执行步骤S106,否则,结束流程;
S106:次高bit位后的连续0xXY bit位代表簇压缩后的大小,单位为扇区,其余bit位表示簇地址;
S107:判断二级表中当前项的下一项表示的簇是否为压缩数据,如果是,执行步骤S108,否则,执行步骤S109;
S108:当前地址减下一地址的差,与所述簇压缩后的大小乘以512的积进行比较,较大者的值加512的和作为簇压缩后的大小,其单位为byte,执行S110;
S109:簇压缩后的大小等于所述簇压缩后的大小乘以512的积,再加512的和,其单位为byte,执行步骤S110;
S110:根据获取到的簇地址及簇压缩后的大小,从所述qcow镜像文件中读取压缩数据,执行步骤S200;
S200:获取zlib库中压缩数据的头部;
S300:解压所述qcow镜像文件的压缩数据。
2.根据权利要求1所述的一种解压qcow镜像文件中压缩数据的方法,其特征在于,所述步骤S200包括以下步骤:
S201:下载zlib库;
S202:使用zlib库中函数压缩任一数据;
S203:获取所述步骤S202中压缩后的数据中前两个字节作为所述头部。
3.根据权利要求2所述的一种解压qcow镜像文件中压缩数据的方法,其特征在于,所述zlib库中函数为ZEXTERN int ZEXPORT compress OF((Bytef*dest,uLongf*destLen,const Bytef*source,uLong sourceLen))。
4.根据权利要求3所述的一种解压qcow镜像文件中压缩数据的方法,其特征在于,所述函数ZEXTERN int ZEXPORT compress OF((Bytef*dest,uLongf*destLen,const Bytef*source,uLong sourceLen))中,destLen的值大于簇大小。
5.根据权利要求4所述的一种解压qcow镜像文件中压缩数据的方法,其特征在于,所述步骤S300包括以下步骤:
S301:将所述步骤S200所获取的所述头部添加至所述步骤S100所获取的压缩数据前,作为被解压数据;
S302:采用所述函数ZEXTERN int ZEXPORT compress OF((Bytef*dest,uLongf*destLen,const Bytef*source,uLong sourceLen))解压所述被解压文件,获取所述qcow镜像文件中压缩数据。
CN201811594980.7A 2018-12-25 2018-12-25 一种解压qcow镜像文件中压缩数据的方法 Active CN109710581B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811594980.7A CN109710581B (zh) 2018-12-25 2018-12-25 一种解压qcow镜像文件中压缩数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811594980.7A CN109710581B (zh) 2018-12-25 2018-12-25 一种解压qcow镜像文件中压缩数据的方法

Publications (2)

Publication Number Publication Date
CN109710581A true CN109710581A (zh) 2019-05-03
CN109710581B CN109710581B (zh) 2023-05-30

Family

ID=66258259

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811594980.7A Active CN109710581B (zh) 2018-12-25 2018-12-25 一种解压qcow镜像文件中压缩数据的方法

Country Status (1)

Country Link
CN (1) CN109710581B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110647753A (zh) * 2019-09-30 2020-01-03 Oppo广东移动通信有限公司 内核文件的获取方法、装置、设备及存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708187A (zh) * 2012-05-14 2012-10-03 成都信息工程学院 基于Hbase数据库的倒排索引混合压缩及解压方法
CN103384884A (zh) * 2012-12-11 2013-11-06 华为技术有限公司 一种文件压缩方法、文件解压缩方法、装置及服务器
US20140109086A1 (en) * 2012-10-16 2014-04-17 Red Hat Israel, Ltd. Virtual disk image manager supporting pluggable storage domains
CN103970585A (zh) * 2013-01-31 2014-08-06 杭州华三通信技术有限公司 创建虚拟机的方法及装置
US20150066859A1 (en) * 2013-08-27 2015-03-05 Red Hat. Inc. Memory first live snapshot
US20150100556A1 (en) * 2012-05-25 2015-04-09 Clarion Co., Ltd. Data Compression/Decompression Device
CN105487984A (zh) * 2014-09-17 2016-04-13 中兴通讯股份有限公司 一种主机系统对虚拟机磁盘数据的动态压缩方法及装置
CN107241608A (zh) * 2017-05-05 2017-10-10 北京普及芯科技有限公司 一种用于帧缓存解压的硬件容错方法和装置
CN108134609A (zh) * 2017-12-21 2018-06-08 深圳大学 一种通用数据gz格式的多线程压缩与解压方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102708187A (zh) * 2012-05-14 2012-10-03 成都信息工程学院 基于Hbase数据库的倒排索引混合压缩及解压方法
US20150100556A1 (en) * 2012-05-25 2015-04-09 Clarion Co., Ltd. Data Compression/Decompression Device
US20140109086A1 (en) * 2012-10-16 2014-04-17 Red Hat Israel, Ltd. Virtual disk image manager supporting pluggable storage domains
CN103384884A (zh) * 2012-12-11 2013-11-06 华为技术有限公司 一种文件压缩方法、文件解压缩方法、装置及服务器
CN103970585A (zh) * 2013-01-31 2014-08-06 杭州华三通信技术有限公司 创建虚拟机的方法及装置
US20150066859A1 (en) * 2013-08-27 2015-03-05 Red Hat. Inc. Memory first live snapshot
CN105487984A (zh) * 2014-09-17 2016-04-13 中兴通讯股份有限公司 一种主机系统对虚拟机磁盘数据的动态压缩方法及装置
CN107241608A (zh) * 2017-05-05 2017-10-10 北京普及芯科技有限公司 一种用于帧缓存解压的硬件容错方法和装置
CN108134609A (zh) * 2017-12-21 2018-06-08 深圳大学 一种通用数据gz格式的多线程压缩与解压方法及装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
JOACHIMMETZ: "QEMU Copy-On-Write file format.asciidoc", 《GITHUB》 *
LUO_MINGHAO: "qcow2镜像格式解析", 《CSDN》 *
陈鹤年等: "支持Gzip压缩和编码转换的网络爬虫设计", 《电脑知识与技术》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110647753A (zh) * 2019-09-30 2020-01-03 Oppo广东移动通信有限公司 内核文件的获取方法、装置、设备及存储介质
CN110647753B (zh) * 2019-09-30 2021-04-16 Oppo广东移动通信有限公司 内核文件的获取方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN109710581B (zh) 2023-05-30

Similar Documents

Publication Publication Date Title
CN110032392B (zh) 服务治理方法及装置、存储介质和电子设备
CN108650287B (zh) 物联网中的终端设备的升级方法、设备及计算机可读介质
US8164490B2 (en) Data compression/decompression method and computer readable storage medium storing compression/decompression program
US20130103982A1 (en) Log file compression
CN104391728A (zh) 软件升级差量包获取方法和相应的升级方法以及装置
CN102231117A (zh) 一种在嵌入式平台安装软件的方法和系统
GB2437684A (en) Data processor adapted for efficient digital signal processing and method therefor
KR20110025359A (ko) 블록 단위 데이터 압축 및 복원 방법 및 그 장치
US20070011686A1 (en) Changing code execution path using kernel mode redirection
US20070124302A1 (en) Mapping a Source File From a Source System To a Target System
US20220075940A1 (en) Efficient storage and retrieval of resource data
CN105208135A (zh) 一种文件传输方法和设备
CN112181471A (zh) 差分升级方法及装置、存储介质、计算机设备
CN109710581A (zh) 一种解压qcow镜像文件中压缩数据的方法
CN101135978B (zh) 压缩版应用程序生成、执行方法与装置及应用方法与系统
EP3119002B1 (en) Encoding program, encoding method, information processsing device, replacement program, and replacement method
US6195743B1 (en) Method and system for compressing reduced instruction set computer (RISC) executable code through instruction set expansion
CN113741954A (zh) 系统软件生成方法、装置、电子设备及存储介质
CN109313562A (zh) 用于nand存储设备的抢占式解压调度
CN102360381A (zh) 一种对嵌入式程序进行无损压制的装置和方法
CN109271209A (zh) 一种解析并提取qcow2及qcow3镜像文件的方法
CN114911533A (zh) 基于NorFlash接口的芯片启动方法
CN109634823B (zh) 一种解析Windows操作系统的休眠数据的方法
CN110109698B (zh) 按键板配置方法、装置、计算机设备及可读存储介质
CN107835158B (zh) Sna网络体系下交互数据的传输方法及装置

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
GR01 Patent grant
GR01 Patent grant