CN109710581B - 一种解压qcow镜像文件中压缩数据的方法 - Google Patents
一种解压qcow镜像文件中压缩数据的方法 Download PDFInfo
- 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
Links
Images
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
- 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镜像文件中压缩数据的方法。
背景技术
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的值大于簇大小。
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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110647753B (zh) * | 2019-09-30 | 2021-04-16 | Oppo广东移动通信有限公司 | 内核文件的获取方法、装置、设备及存储介质 |
Citations (2)
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)
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格式的多线程压缩与解压方法及装置 |
-
2018
- 2018-12-25 CN CN201811594980.7A patent/CN109710581B/zh active Active
Patent Citations (2)
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 |