CN104951482A - 一种操作Sparse格式的镜像文件的方法及装置 - Google Patents
一种操作Sparse格式的镜像文件的方法及装置 Download PDFInfo
- Publication number
- CN104951482A CN104951482A CN201410128612.9A CN201410128612A CN104951482A CN 104951482 A CN104951482 A CN 104951482A CN 201410128612 A CN201410128612 A CN 201410128612A CN 104951482 A CN104951482 A CN 104951482A
- Authority
- CN
- China
- Prior art keywords
- block
- chunk
- file
- image file
- numbering
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种操作Sparse格式的镜像文件的方法及装置,该方法包括:解析Sparse格式的镜像文件,创建用于索引Sparse格式的镜像文件中每个block的chunk索引表;确定将Sparse格式的镜像文件转换为Ext4格式时,Ext4格式的文件中文件位置和目录信息所在block的编号,根据chunk索引表确定该编号的block的地址,并读取文件位置和目录信息;调用Ext4格式文件系统操作模块由其根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据chunk索引表确定该编号的block的地址,并对相应的地址中内容进行操作,本发明不需要格式转换,可以快速无损实现文件操作。
Description
技术领域
本发明涉及计算机文件系统技术领域,尤其涉及一种操作Sparse格式的镜像文件的方法及装置。
背景技术
Ext4是Linux系统的文件系统格式,对于存储位置不连续的一个文件而言,没有被占用的磁盘空间是“空”的,但对于Ext4格式的文件系统,这些位置被填充“0”,且在文件的传递过程中将这些位置填充的数据“0”读出并进行传递。
Sparse格式的文件系统是一种Ext4格式的文件系统的变种,Sparse格式的文件系统的磁盘格式如图1所示。对于为文件系统分配了空间但却未使用空间的情况,Sparse文件可以更有效的利用文件系统空间,它通过一些简短的元数据来描述那些“空”的磁盘空间以减少磁盘大小,只有当“空”的磁盘空间写入了真正的文件数据时,才视为磁盘被使用。当读取Sparse格式的文件时,文件系统会根据元数据记载的信息跳过这些“空”的磁盘空间,从而便于网络传输。Sparse文件通常用于磁盘映像、数据库快照、日志文件等场景。
采用Android操作系统的便携式电子设备如平板,通常采用Ext4格式的System分区文件系统。由于Ext4是Linux的文件系统格式,因此在开发过程中,首先在采用Linux系统的PC机上创建Ext4格式的System分区文件系统。为了实现客户的个性化定制,通常需要多个开发人员在其它PC机上基于Windows平台修改System分区文件,这就涉及到System分区文件的传递。
为了减少固件尺寸、便于网络传递及缩短量产时间,通常在采用Linux的PC机上对Ext4格式的System分区文件制作Sparse格式的镜像文件,从而将Ext4格式的System分区文件转换为Sparse格式的System分区文件,通过传递Sparse格式的镜像文件从而可以减少分发时的数据传输量,比如:512M的Ext4格式的System分区文件可做成300M的Sparse格式的镜像文件。
但是在基于Windows平台的PC上,如果涉及到Sparse格式的镜像文件的读写、修改、添加、删除等操作都不方便。基于Windows平台要实现这些功能,需先将system.img(Ext4格式的System分区文件的Sparse格式的镜像文件)由Sparse格式转换成Ext4格式,得到Ext4格式的System分区文件,然后将Ext4格式的System分区文件解开到本地文件夹,从而得到System分区文件的目录信息及位置信息;再进行一系列操作,如修改、添加、删除等动作后,最后再利用镜像制作工具去除本地文件夹的目录信息及位置信息后制作成Ext4格式的镜像文件,最后再将Ext4格式的镜像文件转换成Sparse格式的镜像文件进行上传。
上述基于Windows平台操作Sparse格式的镜像文件的方法有如下明显缺点:
1)将Ext4格式的System分区文件解开到本地文件夹时会造成文件属性、符号链接等信息丢失,必须用临时文件存储这些信息。
文件属性丢失的原因:Windows与Linux的文件属性机制不同,Linux上的文件有用户权限相关的信息,还有字符设备、块设备、套接字等属性,而Windows只有只读、隐藏等属性。
符号链接丢失的原因:符号链接symbol link是Ext4格式的文件系统特有的,类似windows上的快捷方式,但又不相同。基于这些差异,Linux上的Ext4格式的文件解到windows上后,再做成Ext4格式的文件属性时符号链接就和原来的对应不上了,导致挂载到Linux系统时无法挂载或者文件无法识别。
2)实际应用场景都是修改或替换镜像内的一个或几个文件,有些时候文件大小都没有变化,但上述过程针对整个sparse格式的镜像文件,不能单独对其中的某个文件条目进行编辑,效率低下,耗时也久。
基于以上缺陷,需要考虑如何实现在Windows平台上直接快速操作Sparse格式的镜像文件。
发明内容
本发明提供一种操作Sparse格式的镜像文件的方法及装置,能够实现在Windows平台上直接快速操作Sparse格式的镜像文件。
一种操作Sparse格式的镜像文件的方法,包括:
按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,根据解析结果在内存中创建用于索引Sparse格式的镜像文件中每个block的chunk索引表;
确定将Sparse格式的镜像文件转换为Ext4格式的文件时,Ext4格式的文件中文件位置和目录信息所在block的编号,根据所述chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,并从相应的地址读取文件位置和目录信息;
调用Ext4格式文件系统操作模块,所述Ext4格式文件系统操作模块根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,并对相应的地址中内容进行操作。
优选地,创建用于索引Sparse格式的镜像文件中每个block的chunk索引表之后,还包括:
利用所述chunk索引表得到对应的地址映射表,所述地址映射表包括Sparse格式的镜像文件中所有block的地址;
确定Ext4格式的文件中文件位置和目录信息所在block的编号之后,根据chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中该编号的block的地址;
确定需操作的文件所在的block编号之后,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址。
优选地,根据chunk索引表确定Sparse格式镜像文件中一个block的地址,具体包括:
根据chunk索引表确定block的大小及该block的编号所在的chunk的编号y;
根据chunk索引表确定该block在编号y的chunk内的block数目偏移及编号y的chunk的累计字节数偏移量;
根据该block在编号y的chunk内的block数目偏移及block的大小,确定该block在编号y的chunk内的字节数偏移量;
根据该block在编号y的chunk内的字节数偏移量,及编号y的chunk的累计字节数偏移量,确定该block的字节数偏移量;
根据该block的字节数偏移量及block大小确定block的地址。
优选地,对相应地址中内容进行操作之后,还包括:
确定文件位置和目录信息发生内容更新时,对相应地址的文件位置和目录信息进行更新;
所述Sparse格式的镜像文件包括至少一个数据单元chunk,每个chunk包括头部chunk header和数据部分chunk data,对相应的地址中内容进行操作之后,还包括:
确定发生chunk data更新时,对发生更新的chunk data所在的chunk中的chunk header的内容进行更新。
优选地,按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,具体包括:
导入并存储Sparse格式的镜像文件之后,或者操作Sparse格式的镜像文件之后,或者Sparse格式的镜像文件中的内容更新时,或者收到对存储的Sparse格式的镜像文件的操作指令时,或者创建Sparse格式的镜像文件时,按照二进制文件解析方式解析Sparse格式的镜像文件。
本发明还提供一种操作Sparse格式的镜像文件的装置,包括:
chunk索引建立单元,用于按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,根据解析结果在内存中创建用于索引Sparse格式的镜像文件中每个block的chunk索引表;
管理信息读取单元,用于确定将Sparse格式的镜像文件转换为Ext4格式的文件时,Ext4格式的文件中文件位置和目录信息所在block的编号,根据所述chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,并从相应的地址读取文件位置和目录信息;
操作单元,用于调用Ext4格式文件系统操作模块,所述Ext4格式文件系统操作模块根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,并对相应的地址中内容进行操作。
优选地,chunk索引建立单元创建用于索引Sparse格式的镜像文件中每个block的chunk索引表之后,还用于:
利用所述chunk索引表得到对应的地址映射表,所述地址映射表包括Sparse格式的镜像文件中所有block的地址;
管理信息读取单元根据chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中该编号的block的地址;
操作单元根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址。
优选地,管理信息读取单元或操作单元根据chunk索引表确定Sparse格式的镜像文件中一个block的地址,具体包括:
根据chunk索引表确定block的大小及该block的编号所在的chunk的编号y;
根据chunk索引表确定该block在编号y的chunk内的block数目偏移及编号y的chunk的累计字节数偏移量;
根据该block在编号y的chunk内的block数目偏移及block的大小,确定该block在编号y的chunk内的字节数偏移量;
根据该block在编号y的chunk内的字节数偏移量,及编号y的chunk的累计字节数偏移量,确定该block的字节数偏移量;
根据该block的字节数偏移量及block大小确定block的地址。
优选地,操作单元对相应地址的内容进行操作之后,还用于:
确定文件位置和目录信息发生内容更新时,对相应地址的文件位置和目录信息进行更新;
所述Sparse格式的镜像文件包括至少一个数据单元chunk,每个chunk包括头部chunk header和数据部分chunk data,操作单元对相应的地址中内容进行操作之后,还用于:
确定发生chunk data更新时,对发生更新的chunk data所在的chunk中的chunk header的内容进行更新。
优选地,chunk索引建立单元按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,具体包括:
导入并存储Sparse格式的镜像文件之后,或者操作Sparse格式的镜像文件之后,或者Sparse格式的镜像文件中的内容更新时,或者收到对存储的Sparse格式的镜像文件的操作指令时,或者创建Sparse格式的镜像文件时,按照二进制文件解析方式解析Sparse格式的镜像文件。
利用本发明提供的一种操作Sparse格式的镜像文件的方法及装置,具有以下有益效果:
由于可以通过chunk索引表定位Ext4文件中每个block的位置,因此不需要将Sparse格式的镜像文件转换为Ext4格式,也就不需要将Ext4文件进行解开以得到相应的文件位置和目录信息,因此也就不存在上述文件属性丢失等问题;同时基于Windows平台调用现有的Ext4文件系统操作模块,由于不需要进行格式转换及解开操作,可以提高操作效率。
附图说明
图1为Sparse文件系统的磁盘格式示意图;
图2为Ext4文件系统的格式示意图;
图3为Sparse文件和Ext4文件数据结构图;
图4为本发明实施例操作Sparse格式的镜像文件的方法流程图;
图5为本发明实施例确定Sparse格式的镜像文件中一个block的地址流程图;
图6为本发明实施例操作Sparse格式的镜像文件的方法详细流程图;
图7为本发明实施例操作Sparse格式的镜像文件的装置示意图。
具体实施方式
下面结合附图和实施例对本发明提供的操作Sparse格式的镜像文件的方法及装置进行更详细地说明。
申请人研究发现,Ext4格式和Sparse格式具体如下相通点和联系点:
Ext4文件系统格式如图2所示,可以看出Ext4格式是以block来作为分配单元的,一般为1024、2048、4096等字节,block的大小由超级块super block指定。文件位置和目录信息管理是通过数据块位图(data block bitmap)、inode位图(inode bitmap)、inode表(inode table)进行的,文件的数据存储在数据块内(data blocks)。
如图3所示,chunk是Sparse格式的基本数据结构,一个Sparse格式的镜像文件包含至少一个chunk,依次从0开始编号即为chunk号。通过SparseHeader记录block的大小,之后的每个chunk包括chunk header和chunk data,chunk data通过block的形式记录数据,chunk Header的主要结构成员为:
chunk类型;
block数,本chunk的block个数
字节数,本chunk的字节数,包括chunk header自身。
chunk类型有以下四种:
1)RAW类型
该类型的chunk内的元数据记录了block个数(通过chunk header记录)及原始逻辑数据(即占用物理磁盘空间的数据,通过chunk data记录)。
2)FILL类型
该类型的chunk用于记录相同的原始逻辑数据,由于数据相同,chunk内元数据只记录其包含的block个数以及一个U32长度的逻辑数据(通过chunkheader记录),通过chunk data记录相同的数据。
U32长度即这个chunk包含的数据长度可以用无符号32个比特位来表示。
通过这些数据可以知道重复哪些数据及数据的长度,从而还原原始逻辑数据,显然节省了物理磁盘空间。
3)DON’T CARE类型
该类型chunk内的元数据只记录其包含的block个数(通过chunk header记录),不包含逻辑数据(即chunk data内无数据),转换成Ext4时对应的blocks空间填充0。
由于chunk data内无数据,因此不会占用物理磁盘,从而节省了物理磁盘空间。
4)CRC类型
CRC类型的chunk内的元数据包含CRC校验信息,但Android系统的system分区文件system.img没有使用该类型的Chunk,对此类型本发明不做详细介绍。
block是Ext4的术语和数据单位,在Sparse文件中也同样被使用,且Ext4和Sparse文件所使用的block号相同,进行格式转换时,相同的block号内的原始逻辑数据相同,不同的是在Ext4中被填充0的非占用物理磁盘空间被转换为空的磁盘空间,从而节省了存储空间。
基于以上研究的Ext4格式和Sparse格式的相通点和联系点,本发明提供一种适于应用于Windows平台操作Sparse格式的镜像文件的方法,如图4所示,该方法包括:
步骤401,按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,根据解析结果在内存中创建用于索引Sparse格式的镜像文件中每个block的chunk索引表;
根据图3所示的Sparse格式的镜像文件的格式,基于Windows平台自带的二进制文件解析方式,可以解析出哪些部分是sparse header,哪些部分是chunk header,哪些部分是chunk data,从而可以解析出sparse header的长度,根据chunk header的内容解析出block及chunk的字节数等,从而得到Sparse格式的镜像文件的各种索引信息,创建chunk索引表,创建chunk索引表的目的是定位Sparse格式的镜像文件中每个block的位置,具体需要解析出哪些信息,可以根据需要设定,这里不做具体限定。
步骤402,确定将Sparse格式的镜像文件转换为Ext4格式的文件时,Ext4格式的文件中文件位置和目录信息所在block的编号,根据所述chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,并从相应的地址读取文件位置和目录信息;
Sparse格式的镜像文件和Ext4格式的文件的block是对应的,由于基于Windows平台操作Ext4格式的文件时需要知道文件位置和目录信息,根据图3,前m+k+3个block存放了文件位置和目录信息,因此根据chunk索引表可以定位到这些block,从而读出Ext4格式文件的文件位置和目录信息。
步骤403,调用Ext4格式文件系统操作模块,所述Ext4格式文件系统操作模块根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,并对相应的地址中内容进行操作。
Ext4格式文件系统操作模块为现有模块,可以根据文件位置和目录信息实现对文件的各种操作,如读、写、新增和删除等,详细过程这里不再详述。
本发明提供的操作Sparse格式的镜像文件的方法,由于可以通过chunk索引表定位Ext4格式文件中每个block的位置,因此不需要将Sparse格式的镜像文件转换为Ext4格式,也就不需要将Ext4格式文件进行解开以得到相应的文件位置和目录信息,因此也就不存在上述文件属性丢失等问题;同时基于Windows平台调用现有的Ext4格式文件系统操作模块,由于不需要进行格式转换及解开操作,可以提高操作效率。
根据chunk索引表可以确定Sparse格式镜像文件中一个block的地址,则确定Ext4格式的文件中文件位置和目录信息所在block的编号之后,可以采用如下任一方式确定Sparse格式的镜像文件中该编号的block的地址,或者确定需操作的文件所在的block编号之后,可以采用如下任一方式确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址:
1)在创建用于索引Sparse格式的镜像文件中每个block的chunk索引表之后,利用chunk索引表得到对应的地址映射表,地址映射表包括Sparse格式的镜像文件中所有block的地址,则确定Ext4格式的文件中文件位置和目录信息所在block的编号之后,或者确定需操作的文件所在的block编号之后,直接使用地址映射表定位block的地址;
2)不建立地址映射表,则确定Ext4格式的文件中文件位置和目录信息所在block的编号之后,实时根据chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,或者确定需操作的文件所在的block编号之后,实时根据chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址。即确定需要哪些编号的block地址时再在chunk索引表中查找。
Ext4格式文件和Sparse格式的镜像文件所使用的block号相同,block号都是从0开始进行的编号。比如,Sparse格式镜像文件中有3个chunk,编号分别为0、1、2,分别包含3、5、8个block,要把Sparse格式的文件当作Ext4格式的文件来直接访问,Ext4格式的文件的超级块位于0号block,那就需要找到0号block所在的chunk就能拿到0号block的数据。基于Ext4格式的文件和Sparse格式的镜像文件的关联关系,不管是实时查找,还是事先建立地址映射表,本发明实施例根据chunk索引表确定Sparse格式的镜像文件中一个block(编号为x)的地址,如图5所示,优选采用如下方式:
步骤501,根据chunk索引表确定block的大小及该block的编号x所在的chunk的编号y;
在二进制文件解析时,可以根据sparse header的内容解析出block的大小、chunk的编号及每个chunk内的block数,可以在chunk索引表中记录这些信息,这样,可以根据要定位的block号确定其所在的chunk号。
步骤502,根据chunk索引表确定该block在编号y的chunk内的block数目偏移及编号y的chunk的累计字节数偏移量Sbyte;
在二进制文件解析时,可以根据chunk header的内容解析出每个chunk的字节数,在索引表记录这些信息,根据chunk号可以确定其面前有多少chunk,从而可以确定编号y的chunk的累计字节数偏移量,可以根据前面有几个chunk及每个chunk内的block数目,确定编号y的chunk内第一个block的编号(累计block偏移量Sblock),从而可以确定在chunk内的偏移x-Sblock。
步骤503,根据该block在编号y的chunk内的block数目偏移及block的大小,确定该block在编号y的chunk内的字节数偏移量;
block x的总字节偏移量:Sx=Sbyte+(x-Sblock)×Bbyte,Bbyte是block的大小,以字节为单位,从sparse header中得到。
步骤504,根据该block在编号y的chunk内的字节数偏移量,及编号y的chunk的累计字节数偏移量,确定该block的字节数偏移量;
Sparse格式的镜像文件包括至少一个数据单元chunk,每个chunk包括头部chunk header和数据部分chunk data,调用Ext4文件系统模块对Sparse格式的镜像文件进行操作,主要是对chunk内block data部分的操作,在完成一次文件操作后,为了保证Sparse格式的镜像文件的正确性,需要在调用Ext4文件系统操作完成操作后,单独更新chunk header,如更新字节数等内容,优选地,还进一步包括:确定发生chunk data更新时,对发生更新的chunk data所在的chunk中的chunk header的内容进行更新。
用户对Sparse格式的镜像文件进行操作,可能通过一次操作可以完成,可能需要进行多次操作。为了保证在下次操作时各种信息的正确性,优选地,本发明实施例对相应地址的文件进行操作之后,还包括:确定文件位置和目录信息发生内容更新时,对相应地址的文件位置和目录信息进行更新。
对应触发按照二进制文件解析方式解析Sparse格式的镜像文件创建chunk索引表的方式,可以采用如下任一触发条件:
1)导入并存储Sparse格式的镜像文件时
如从其他PC机上新接收到一个Sparse格式的镜像文件并存储时,自动进行解析从而创建chunk索引表。
2)操作Sparse格式的镜像文件之后Sparse格式的镜像文件中的内容更新时
完成Sparse格式的镜像文件的操作,Sparse格式的镜像文件的内容发生了更新,因此chunk索引表有可能改变,需要重新解析。
3)收到对存储的Sparse格式的镜像文件的操作指令时
如从其他PC机上新接收到一个Sparse格式的镜像文件并存储时,不会主动解析,待收到对存储的Sparse格式的镜像文件的操作指令时再进行解析。
4)创建Sparse格式的镜像文件时,按照二进制文件解析方式解析Sparse格式的镜像文件。
Sparse格式的镜像文件有可能不是从其他PC机上导入而是在本地新创建的,则在完成本地创建后,按照二进制文件解析方式解析Sparse格式的镜像文件。
本发明实施例把Sparse格式的文件视作Ext4格式的文件,那么只需要关心Sparse格式的镜像文件内每个block在文件内的偏移量即可。可以利用Ext4文件系统直接操作Sparse格式的镜像文件,如创建、读、写、新增、删除。
如图6所示,本发明实施例操作Sparse格式的镜像文件的详细流程如下:
步骤601,收到用户要进行Sparse格式的镜像文件操作的文件名;
用户想要操作某个文件,通常先输入文件名。
步骤602,根据文件名确定是否存在该文件,若不存在执行步骤603,若存在执行步骤604;
步骤603,文件不存在时,创建空白的Sparse格式的镜像文件,即创建一个DON’T CARE类型的chunk;
如果文件不存在,创建Sparse格式的镜像文件时,创建一个DON’T CARE类型的chunk,即只需要在sparse header中记录block的大小,在chunk header内写入block数,在0号chunk的0号block内写入用于记录block大小的超级块。
步骤604,文件存在时,进行镜像文件格式检查,确定是Sparse格式时执行步骤605;
存在Sparse格式的镜像文件,说明之前已经导入过Sparse格式的镜像文件,这里要对镜像文件进行操作。由于本地磁盘上存在了很多文件,因此每次输入文件名时除了进行磁盘上是否有文件检查外,还要根据文件检查输入的文件是否为Sparse文件。
步骤605,按照二进制文件解析方式解析Sparse格式的镜像文件,根据解析结果在内存中创建用于索引Sparse格式的镜像文件中每个block的chunk索引表,并加载Ext4文件系统操作模块;
步骤606,利用chunk索引表得到对应的地址映射表,地址映射表包括Sparse格式的镜像文件中所有block的地址;
步骤607,确定将Sparse格式的镜像文件转换为Ext4文件时,Ext4文件中文件位置和目录信息所在block的编号,根据地址映射表确定Sparse格式的镜像文件中该编号的block的地址,并从相应的地址读取文件位置和目录信息,即读超级块、块组描述符、块位图、inode位图。
步骤608,调用Ext4文件系统操作模块,Ext4文件系统操作模块根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,并对相应的地址中内容进行操作,实现对文件、目录操作(读、写、增加、删除)。
步骤609,确定文件位置和目录信息发生内容更新时,对相应地址的文件位置和目录信息进行更新。
重新读取超级块、块组描述符、块位图、inode位图。
步骤610,确定发生chunk data更新时,对发生更新的chunk data所在的chunk中的chunk header的内容进行更新,从而重构Sparse格式的镜像文件,根据block的使用状态,如果发生了内容更新,则返回步骤605创建新的chunk索引表。
本发明实施例Sparse格式的镜像文件当作Ext4格式的文件来处理,Ext4文件以block为单位操作,从0号block开始;而0号block在ext4中的偏移是0,但在Sparse中的偏移显然不是0,这就需要将偏移信息进行一次转换。打开Sparse格式的镜像时,遍历整个文件得到所有的chunk信息以及其偏移来建立索引表,根据索引表就可以很方便的计算出每个block在索引表中对应的chunk号,也就知道了该block在Sparse内的偏移,接下来读写就与Ext4相同了。本发明实施例直接读写,更安全,效率更高。
基于同一发明构思,本发明实施例中还提供了一种操作Sparse格式的镜像文件的装置,由于该装置解决问题的原理与一种操作Sparse格式的镜像文件的方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
本发明实施例提供的操作Sparse格式的镜像文件的装置,如图7所示,包括:
chunk索引建立单元701,用于按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,根据解析结果在内存中创建用于索引Sparse格式的镜像文件中每个block的chunk索引表;
管理信息读取单元702,用于确定将Sparse格式的镜像文件转换为Ext4格式的文件时,Ext4格式的文件中文件位置和目录信息所在block的编号,根据所述chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,并从相应的地址读取文件位置和目录信息;
操作单元703,用于调用Ext4格式文件系统操作模块,所述Ext4格式文件系统操作模块根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,并对相应的地址中内容进行操作。
优选地,chunk索引建立单元创建用于索引Sparse格式的镜像文件中每个block的chunk索引表之后,还用于:
利用所述chunk索引表得到对应的地址映射表,所述地址映射表包括Sparse格式的镜像文件中所有block的地址;
管理信息读取单元根据chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中该编号的block的地址;
操作单元根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址。
优选地,管理信息读取单元或操作单元根据chunk索引表确定Sparse格式的镜像文件中一个block的地址,具体包括:
根据chunk索引表确定block的大小及该block的编号所在的chunk的编号y;
根据chunk索引表确定该block在编号y的chunk内的block数目偏移及编号y的chunk的累计字节数偏移量;
根据该block在编号y的chunk内的block数目偏移及block的大小,确定该block在编号y的chunk内的字节数偏移量;
根据该block在编号y的chunk内的字节数偏移量,及编号y的chunk的累计字节数偏移量,确定该block的字节数偏移量;
根据该block的字节数偏移量及block大小确定block的地址。
优选地,操作单元对相应地址的内容进行操作之后,还用于:
确定文件位置和目录信息发生内容更新时,对相应地址的文件位置和目录信息进行更新;
所述Sparse格式的镜像文件包括至少一个数据单元chunk,每个chunk包括头部chunk header和数据部分chunk data,操作单元对相应的地址中内容进行操作之后,还用于:
确定发生chunk data更新时,对发生更新的chunk data所在的chunk中的chunk header的内容进行更新。
优选地,chunk索引建立单元按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,具体包括:
导入并存储Sparse格式的镜像文件之后,或者操作Sparse格式的镜像文件之后,或者Sparse格式的镜像文件中的内容更新时,或者收到对存储的Sparse格式的镜像文件的操作指令时,或者创建Sparse格式的镜像文件时,按照二进制文件解析方式解析Sparse格式的镜像文件。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种操作Sparse格式的镜像文件的方法,其特征在于,包括:
按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,根据解析结果在内存中创建用于索引Sparse格式的镜像文件中每个block的chunk索引表;
确定将Sparse格式的镜像文件转换为Ext4格式的文件时,Ext4格式的文件中文件位置和目录信息所在block的编号,根据所述chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,并从相应的地址读取文件位置和目录信息;
调用Ext4格式文件系统操作模块,所述Ext4格式文件系统操作模块根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,并对相应的地址中内容进行操作。
2.如权利要求1所述的方法,其特征在于,创建用于索引Sparse格式的镜像文件中每个block的chunk索引表之后,还包括:
利用所述chunk索引表得到对应的地址映射表,所述地址映射表包括Sparse格式的镜像文件中所有block的地址;
确定Ext4格式的文件中文件位置和目录信息所在block的编号之后,根据chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中该编号的block的地址;
确定需操作的文件所在的block编号之后,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址。
3.如权利要求1或2所述的方法,其特征在于,根据chunk索引表确定Sparse格式镜像文件中一个block的地址,具体包括:
根据chunk索引表确定block的大小及该block的编号所在的chunk的编号y;
根据chunk索引表确定该block在编号y的chunk内的block数目偏移及编号y的chunk的累计字节数偏移量;
根据该block在编号y的chunk内的block数目偏移及block的大小,确定该block在编号y的chunk内的字节数偏移量;
根据该block在编号y的chunk内的字节数偏移量,及编号y的chunk的累计字节数偏移量,确定该block的字节数偏移量;
根据该block的字节数偏移量及block大小确定block的地址。
4.如权利要求1或2所述的方法,其特征在于,对相应地址中内容进行操作之后,还包括:
确定文件位置和目录信息发生内容更新时,对相应地址的文件位置和目录信息进行更新;
所述Sparse格式的镜像文件包括至少一个数据单元chunk,每个chunk包括头部chunk header和数据部分chunk data,对相应的地址中内容进行操作之后,还包括:
确定发生chunk data更新时,对发生更新的chunk data所在的chunk中的chunk header的内容进行更新。
5.如权利要求1或2所述的方法,其特征在于,按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,具体包括:
导入并存储Sparse格式的镜像文件之后,或者操作Sparse格式的镜像文件之后,或者Sparse格式的镜像文件中的内容更新时,或者收到对存储的Sparse格式的镜像文件的操作指令时,或者创建Sparse格式的镜像文件时,按照二进制文件解析方式解析Sparse格式的镜像文件。
6.一种操作Sparse格式的镜像文件的装置,其特征在于,包括:
chunk索引建立单元,用于按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,根据解析结果在内存中创建用于索引Sparse格式的镜像文件中每个block的chunk索引表;
管理信息读取单元,用于确定将Sparse格式的镜像文件转换为Ext4格式的文件时,Ext4格式的文件中文件位置和目录信息所在block的编号,根据所述chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,并从相应的地址读取文件位置和目录信息;
操作单元,用于调用Ext4格式文件系统操作模块,所述Ext4格式文件系统操作模块根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,并对相应的地址中内容进行操作。
7.如权利要求6所述的装置,其特征在于,chunk索引建立单元创建用于索引Sparse格式的镜像文件中每个block的chunk索引表之后,还用于:
利用所述chunk索引表得到对应的地址映射表,所述地址映射表包括Sparse格式的镜像文件中所有block的地址;
管理信息读取单元根据chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中该编号的block的地址;
操作单元根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,包括:
根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址。
8.如权利要求6或7所述的装置,其特征在于,管理信息读取单元或操作单元根据chunk索引表确定Sparse格式的镜像文件中一个block的地址,具体包括:
根据chunk索引表确定block的大小及该block的编号所在的chunk的编号y;
根据chunk索引表确定该block在编号y的chunk内的block数目偏移及编号y的chunk的累计字节数偏移量;
根据该block在编号y的chunk内的block数目偏移及block的大小,确定该block在编号y的chunk内的字节数偏移量;
根据该block在编号y的chunk内的字节数偏移量,及编号y的chunk的累计字节数偏移量,确定该block的字节数偏移量;
根据该block的字节数偏移量及block大小确定block的地址。
9.如权利要求6或7所述的装置,其特征在于,操作单元对相应地址的内容进行操作之后,还用于:
确定文件位置和目录信息发生内容更新时,对相应地址的文件位置和目录信息进行更新;
所述Sparse格式的镜像文件包括至少一个数据单元chunk,每个chunk包括头部chunk header和数据部分chunk data,操作单元对相应的地址中内容进行操作之后,还用于:
确定发生chunk data更新时,对发生更新的chunk data所在的chunk中的chunk header的内容进行更新。
10.如权利要求6或7所述的装置,其特征在于,chunk索引建立单元按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,具体包括:
导入并存储Sparse格式的镜像文件之后,或者操作Sparse格式的镜像文件之后,或者Sparse格式的镜像文件中的内容更新时,或者收到对存储的Sparse格式的镜像文件的操作指令时,或者创建Sparse格式的镜像文件时,按照二进制文件解析方式解析Sparse格式的镜像文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410128612.9A CN104951482B (zh) | 2014-03-31 | 2014-03-31 | 一种操作Sparse格式的镜像文件的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410128612.9A CN104951482B (zh) | 2014-03-31 | 2014-03-31 | 一种操作Sparse格式的镜像文件的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104951482A true CN104951482A (zh) | 2015-09-30 |
CN104951482B CN104951482B (zh) | 2018-09-25 |
Family
ID=54166145
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410128612.9A Active CN104951482B (zh) | 2014-03-31 | 2014-03-31 | 一种操作Sparse格式的镜像文件的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104951482B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105704558A (zh) * | 2016-03-17 | 2016-06-22 | 四川长虹电器股份有限公司 | 智能电视在线播放局域网中iso影片的方法 |
CN105975567A (zh) * | 2016-05-03 | 2016-09-28 | 青岛海信移动通信技术股份有限公司 | 一种应用程序的内部文件的处理方法及装置 |
CN106709014A (zh) * | 2016-12-26 | 2017-05-24 | 华为技术有限公司 | 一种文件系统转换方法及装置 |
CN107341072A (zh) * | 2016-11-18 | 2017-11-10 | 新华三技术有限公司 | 一种数据备份方法及装置 |
WO2018014801A1 (zh) * | 2016-07-19 | 2018-01-25 | 紫光华山信息技术有限公司 | 镜像文件的处理 |
CN111984450A (zh) * | 2020-08-17 | 2020-11-24 | 成都安恒信息技术有限公司 | 一种基于镜像二进制比对的配置故障定位方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120167074A1 (en) * | 2010-12-24 | 2012-06-28 | Microsoft Corporation | On-demand or incremental remote data copy |
CN103530894A (zh) * | 2013-10-25 | 2014-01-22 | 合肥工业大学 | 一种基于多尺度块稀疏表示的视频目标追踪方法及其系统 |
CN103605540A (zh) * | 2013-11-18 | 2014-02-26 | 四川长虹电器股份有限公司 | 基于安卓系统的快速写入flash镜像的方法 |
-
2014
- 2014-03-31 CN CN201410128612.9A patent/CN104951482B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120167074A1 (en) * | 2010-12-24 | 2012-06-28 | Microsoft Corporation | On-demand or incremental remote data copy |
CN103530894A (zh) * | 2013-10-25 | 2014-01-22 | 合肥工业大学 | 一种基于多尺度块稀疏表示的视频目标追踪方法及其系统 |
CN103605540A (zh) * | 2013-11-18 | 2014-02-26 | 四川长虹电器股份有限公司 | 基于安卓系统的快速写入flash镜像的方法 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105704558A (zh) * | 2016-03-17 | 2016-06-22 | 四川长虹电器股份有限公司 | 智能电视在线播放局域网中iso影片的方法 |
CN105975567A (zh) * | 2016-05-03 | 2016-09-28 | 青岛海信移动通信技术股份有限公司 | 一种应用程序的内部文件的处理方法及装置 |
CN105975567B (zh) * | 2016-05-03 | 2019-12-20 | 青岛海信移动通信技术股份有限公司 | 一种应用程序的内部文件的处理方法及装置 |
WO2018014801A1 (zh) * | 2016-07-19 | 2018-01-25 | 紫光华山信息技术有限公司 | 镜像文件的处理 |
CN107341072A (zh) * | 2016-11-18 | 2017-11-10 | 新华三技术有限公司 | 一种数据备份方法及装置 |
CN106709014A (zh) * | 2016-12-26 | 2017-05-24 | 华为技术有限公司 | 一种文件系统转换方法及装置 |
CN106709014B (zh) * | 2016-12-26 | 2020-08-25 | 华为技术有限公司 | 一种文件系统转换方法及装置 |
CN111984450A (zh) * | 2020-08-17 | 2020-11-24 | 成都安恒信息技术有限公司 | 一种基于镜像二进制比对的配置故障定位方法及系统 |
CN111984450B (zh) * | 2020-08-17 | 2024-07-09 | 成都安恒信息技术有限公司 | 一种基于镜像二进制比对的配置故障定位方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104951482B (zh) | 2018-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102508784B (zh) | 视频监控设备中闪存卡的数据存储方法及其系统 | |
CN110531940B (zh) | 视频文件处理方法及装置 | |
CN104951482A (zh) | 一种操作Sparse格式的镜像文件的方法及装置 | |
CN102436420B (zh) | 使用辅助存储器的低ram空间、高吞吐量的持久键值存储 | |
CN113424144A (zh) | 计算数据存储系统 | |
US20160110109A1 (en) | Using scratch extents to facilitate copying operations in an append-only storage system | |
CN105740303B (zh) | 改进的对象存储的方法及装置 | |
JP2017091548A (ja) | 分散格納システム及び分散格納方法並びに分散施設 | |
CN107479922A (zh) | 一种闪存数据管理方法、装置及计算机可读存储介质 | |
CN110347651A (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN108399072A (zh) | 应用页面更新方法和装置 | |
CN105159800A (zh) | 数据恢复方法、数据备份方法及相关设备、系统 | |
US20160139980A1 (en) | Erasure-coding extents in an append-only storage system | |
CN109885577A (zh) | 数据处理方法、装置、终端及存储介质 | |
CN105843554B (zh) | 基于对象存储的数据迁移的方法及其系统 | |
CN105160018A (zh) | 一种复制/粘贴图片的方法、装置和系统 | |
CN107798063A (zh) | 快照处理方法和快照处理装置 | |
CN108241676A (zh) | 实现数据同步的方法及设备 | |
CN108255938A (zh) | 一种机载嵌入式内存数据库映像生成和加载方法 | |
CN110990356B (zh) | 一种用于逻辑镜像的实时自动扩容方法和系统 | |
CN110633261A (zh) | 一种图片存储方法、图片查询方法及装置 | |
CN100489855C (zh) | 使用最少的日志条目将数据库更改记入日志的设备和方法 | |
US7548927B2 (en) | Abstracted metadata policy component and related architecture | |
CN113688139A (zh) | 对象存储方法、网关、设备及介质 | |
CN111414339B (zh) | 一种文件的处理方法、系统、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 519085 High-tech Zone, Tangjiawan Town, Zhuhai City, Guangdong Province Patentee after: ACTIONS TECHNOLOGY Co.,Ltd. Address before: 519085 High-tech Zone, Tangjiawan Town, Zhuhai City, Guangdong Province Patentee before: ACTIONS (ZHUHAI) TECHNOLOGY Co.,Ltd. |