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

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

Info

Publication number
CN109710581B
CN109710581B CN201811594980.7A CN201811594980A CN109710581B CN 109710581 B CN109710581 B CN 109710581B CN 201811594980 A CN201811594980 A CN 201811594980A CN 109710581 B CN109710581 B CN 109710581B
Authority
CN
China
Prior art keywords
qcow
image file
compressed data
cluster
size
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
Application number
CN201811594980.7A
Other languages
English (en)
Other versions
CN109710581A (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 Masterpiece Precision Equipment LLC
Original Assignee
Sichuan Masterpiece Precision Equipment LLC
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 Masterpiece Precision Equipment LLC filed Critical Sichuan Masterpiece Precision Equipment LLC
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

Images

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

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

Abstract

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

Description

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

Claims (4)

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

Families Citing this family (1)

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

Citations (2)

* 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 华为技术有限公司 一种文件压缩方法、文件解压缩方法、装置及服务器

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5826114B2 (ja) * 2012-05-25 2015-12-02 クラリオン株式会社 データ解凍装置、データ圧縮装置、データの解凍プログラム、データの圧縮プログラム、及び、圧縮データ配信システム
US9135049B2 (en) * 2012-10-16 2015-09-15 Red Hat Israel, Ltd. Performing thin-provisioning operations on virtual disk images using native features of the storage domain
CN103970585B (zh) * 2013-01-31 2017-10-27 新华三技术有限公司 创建虚拟机的方法及装置
US9842032B2 (en) * 2013-08-27 2017-12-12 Red Hat, Inc. Memory first live snapshot
CN105487984B (zh) * 2014-09-17 2020-04-03 中兴通讯股份有限公司 一种主机系统对虚拟机磁盘数据的动态压缩方法及装置
CN107241608B (zh) * 2017-05-05 2021-08-27 新岸线(北京)科技集团有限公司 一种用于帧缓存解压的硬件容错方法和装置
CN108134609A (zh) * 2017-12-21 2018-06-08 深圳大学 一种通用数据gz格式的多线程压缩与解压方法及装置

Patent Citations (2)

* 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 华为技术有限公司 一种文件压缩方法、文件解压缩方法、装置及服务器

Also Published As

Publication number Publication date
CN109710581A (zh) 2019-05-03

Similar Documents

Publication Publication Date Title
Jones et al. Compression of next-generation sequencing reads aided by highly efficient de novo assembly
CN102231117B (zh) 一种在嵌入式平台安装软件的方法和系统
JP3337633B2 (ja) データ圧縮方法及びデータ復元方法並びにデータ圧縮プログラム又はデータ復元プログラムを記録したコンピュータ読み取り可能な記録媒体
US9529873B2 (en) Enhancing performance of extract, transform, and load (ETL) jobs
US20030212712A1 (en) Byte-level file differencing and updating algorithms
US20090060047A1 (en) Data compression using an arbitrary-sized dictionary
US9041567B2 (en) Using variable encodings to compress an input data stream to a compressed output data stream
US8937563B2 (en) Using variable length encoding to compress an input data stream to a compressed output data stream
CN108650287B (zh) 物联网中的终端设备的升级方法、设备及计算机可读介质
CN104391728A (zh) 软件升级差量包获取方法和相应的升级方法以及装置
CN105846825A (zh) 压缩方法、解压缩方法、压缩装置以及解压缩装置
JP2005044360A (ja) データのパッケージ内デルタ圧縮(intra−packetdeltacompression)のためのシステムおよび方法
US20130179413A1 (en) Compressed Distributed Storage Systems And Methods For Providing Same
KR20150125012A (ko) 저장된 데이터 유닛들의 동작 관리
KR20150125010A (ko) 저장된 데이터 유닛들의 동작 관리
KR101882759B1 (ko) 안정된 바이너리 식별 방법 및 장치
CN109710581B (zh) 一种解压qcow镜像文件中压缩数据的方法
KR20080032100A (ko) 통합 저장 보안 모델
JP3488160B2 (ja) 命令セットの拡張を通じて、risc実行可能コードを圧縮する方法及びシステム
US20040114808A1 (en) Compressing a firmware image
KR20150126667A (ko) 저장된 데이터 유닛들의 동작 관리
US6694393B1 (en) Method and apparatus for compressing information for use in embedded systems
CN116303297A (zh) 文件压缩处理方法、装置、设备及介质
US20220350576A1 (en) Compression Of Firmware Updates
US20190312590A1 (en) Computer system supporting migration between hardware accelerators through software interfaces

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