CN109710581A - 一种解压qcow镜像文件中压缩数据的方法 - Google Patents
一种解压qcow镜像文件中压缩数据的方法 Download PDFInfo
- 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
Links
Classifications
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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镜像文件中压缩数据的方法。
背景技术
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镜像文件中压缩数据。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110647753A (zh) * | 2019-09-30 | 2020-01-03 | Oppo广东移动通信有限公司 | 内核文件的获取方法、装置、设备及存储介质 |
Citations (9)
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格式的多线程压缩与解压方法及装置 |
-
2018
- 2018-12-25 CN CN201811594980.7A patent/CN109710581B/zh active Active
Patent Citations (9)
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)
Title |
---|
JOACHIMMETZ: "QEMU Copy-On-Write file format.asciidoc", 《GITHUB》 * |
LUO_MINGHAO: "qcow2镜像格式解析", 《CSDN》 * |
陈鹤年等: "支持Gzip压缩和编码转换的网络爬虫设计", 《电脑知识与技术》 * |
Cited By (2)
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 |