一种操作Sparse格式的镜像文件的方法及装置的制造方法

文档序号:9235459阅读:1417来源:国知局
一种操作Sparse格式的镜像文件的方法及装置的制造方法
【技术领域】
[0001]本发明涉及计算机文件系统技术领域,尤其涉及一种操作Sparse格式的镜像文件的方法及装置。
【背景技术】
[0002]Ext4是Linux系统的文件系统格式,对于存储位置不连续的一个文件而言,没有被占用的磁盘空间是“空”的,但对于Ext4格式的文件系统,这些位置被填充“0”,且在文件的传递过程中将这些位置填充的数据“O”读出并进行传递。
[0003]Sparse格式的文件系统是一种Ext4格式的文件系统的变种,Sparse格式的文件系统的磁盘格式如图1所示。对于为文件系统分配了空间但却未使用空间的情况,Sparse文件可以更有效的利用文件系统空间,它通过一些简短的元数据来描述那些“空”的磁盘空间以减少磁盘大小,只有当“空”的磁盘空间写入了真正的文件数据时,才视为磁盘被使用。当读取Sparse格式的文件时,文件系统会根据元数据记载的信息跳过这些“空”的磁盘空间,从而便于网络传输。Sparse文件通常用于磁盘映像、数据库快照、日志文件等场景。
[0004]采用Android操作系统的便携式电子设备如平板,通常采用Ext4格式的System分区文件系统。由于Ext4是Linux的文件系统格式,因此在开发过程中,首先在采用Linux系统的PC机上创建Ext4格式的System分区文件系统。为了实现客户的个性化定制,通常需要多个开发人员在其它PC机上基于Windows平台修改System分区文件,这就涉及到System分区文件的传递。
[0005]为了减少固件尺寸、便于网络传递及缩短量产时间,通常在采用Linux的PC机上对Ext4格式的System分区文件制作Sparse格式的镜像文件,从而将Ext4格式的System分区文件转换为Sparse格式的System分区文件,通过传递Sparse格式的镜像文件从而可以减少分发时的数据传输量,比如:512M的Ext4格式的System分区文件可做成300M的Sparse格式的镜像文件。
[0006]但是在基于Windows平台的PC上,如果涉及到Sparse格式的镜像文件的读写、修改、添加、删除等操作都不方便。基于Windows平台要实现这些功能,需先将system, img(Ext4格式的System分区文件的Sparse格式的镜像文件)由Sparse格式转换成Ext4格式,得到Ext4格式的System分区文件,然后将Ext4格式的System分区文件解开到本地文件夹,从而得到System分区文件的目录信息及位置信息;再进行一系列操作,如修改、添力口、删除等动作后,最后再利用镜像制作工具去除本地文件夹的目录信息及位置信息后制作成Ext4格式的镜像文件,最后再将Ext4格式的镜像文件转换成Sparse格式的镜像文件进行上传。
[0007]上述基于Windows平台操作Sparse格式的镜像文件的方法有如下明显缺点:
[0008]I)将Ext4格式的System分区文件解开到本地文件夹时会造成文件属性、符号链接等信息丢失,必须用临时文件存储这些信息。
[0009]文件属性丢失的原因=Windows与Linux的文件属性机制不同,Linux上的文件有用户权限相关的信息,还有字符设备、块设备、套接字等属性,而Windows只有只读、隐藏等属性。
[0010]符号链接丢失的原因:符号链接symbol link是Ext4格式的文件系统特有的,类似windows上的快捷方式,但又不相同。基于这些差异,Linux上的Ext4格式的文件解到windows上后,再做成Ext4格式的文件属性时符号链接就和原来的对应不上了,导致挂载到Linux系统时无法挂载或者文件无法识别。
[0011]2)实际应用场景都是修改或替换镜像内的一个或几个文件,有些时候文件大小都没有变化,但上述过程针对整个sparse格式的镜像文件,不能单独对其中的某个文件条目进行编辑,效率低下,耗时也久。
[0012]基于以上缺陷,需要考虑如何实现在Windows平台上直接快速操作Sparse格式的镜像文件。

【发明内容】

[0013]本发明提供一种操作Sparse格式的镜像文件的方法及装置,能够实现在Windows平台上直接快速操作Sparse格式的镜像文件。
[0014]一种操作Sparse格式的镜像文件的方法,包括:
[0015]按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,根据解析结果在内存中创建用于索引Sparse格式的镜像文件中每个block的chunk索引表;
[0016]确定将Sparse格式的镜像文件转换为Ext4格式的文件时,Ext4格式的文件中文件位置和目录信息所在block的编号,根据所述chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,并从相应的地址读取文件位置和目录信息;
[0017]调用Ext4格式文件系统操作模块,所述Ext4格式文件系统操作模块根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,并对相应的地址中内容进行操作。
[0018]优选地,创建用于索引Sparse格式的镜像文件中每个block的chunk索引表之后,还包括:
[0019]利用所述chunk索引表得到对应的地址映射表,所述地址映射表包括Sparse格式的镜像文件中所有block的地址;
[0020]确定Ext4格式的文件中文件位置和目录信息所在block的编号之后,根据chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,包括:
[0021]根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中该编号的block的地址;
[0022]确定需操作的文件所在的block编号之后,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,包括:
[0023]根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址。
[0024]优选地,根据chunk索引表确定Sparse格式镜像文件中一个block的地址,具体包括:
[0025]根据chunk索引表确定block的大小及该block的编号所在的chunk的编号y ;
[0026]根据chunk索引表确定该block在编号y的chunk内的block数目偏移及编号y的chunk的累计字节数偏移量;
[0027]根据该block在编号y的chunk内的block数目偏移及block的大小,确定该block在编号y的chunk内的字节数偏移量;
[0028]根据该block在编号y的chunk内的字节数偏移量,及编号y的chunk的累计字节数偏移量,确定该block的字节数偏移量;
[0029]根据该block的字节数偏移量及block大小确定block的地址。
[0030]优选地,对相应地址中内容进行操作之后,还包括:
[0031]确定文件位置和目录信息发生内容更新时,对相应地址的文件位置和目录信息进行更新;
[0032]所述Sparse格式的镜像文件包括至少一个数据单元chunk,每个chunk包括头部chunk header和数据部分chunk data,对相应的地址中内容进行操作之后,还包括:
[0033]确定发生chunk data更新时,对发生更新的chunk data所在的chunk中的chunkheader的内容进行更新。
[0034]优选地,按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,具体包括:
[0035]导入并存储Sparse格式的镜像文件之后,或者操作Sparse格式的镜像文件之后,或者Sparse格式的镜像文件中的内容更新时,或者收到对存储的Sparse格式的镜像文件的操作指令时,或者创建Sparse格式的镜像文件时,按照二进制文件解析方式解析Sparse格式的镜像文件。
[0036]本发明还提供一种操作Sparse格式的镜像文件的装置,包括:
[0037]chunk索引建立单元,用于按照二进制文件解析方式解析包括至少一个块block的Sparse格式的镜像文件,根据解析结果在内存中创建用于索引Sparse格式的镜像文件中每个block的chunk索引表;
[0038]管理信息读取单元,用于确定将Sparse格式的镜像文件转换为Ext4格式的文件时,Ext4格式的文件中文件位置和目录信息所在block的编号,根据所述chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,并从相应的地址读取文件位置和目录信息;
[0039]操作单元,用于调用Ext4格式文件系统操作模块,所述Ext4格式文件系统操作模块根据读取的文件位置和目录信息,确定需操作的文件所在的block编号,根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,并对相应的地址中内容进行操作。
[0040]优选地,chunk索引建立单元创建用于索引Sparse格式的镜像文件中每个block的chunk索弓I表之后,还用于:
[0041]利用所述chunk索引表得到对应的地址映射表,所述地址映射表包括Sparse格式的镜像文件中所有block的地址;
[0042]管理信息读取单元根据chunk索引表确定Sparse格式的镜像文件中该编号的block的地址,包括:
[0043]根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中该编号的block的地址;
[0044]操作单元根据所述chunk索引表确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址,包括:
[0045]根据chunk索引表对应的地址映射表,确定Sparse格式的镜像文件中需操作的文件所在的block编号的block的地址。
[0046]优选地,管理信息读取单元或操作单元根据chunk索引表确定Sparse格式的镜像文件中一个block的地址,具体包括:
[0047]根据chunk索引表确定block的大小及该block的编号所在的chunk的编号y ;
[0048]根据chunk索引表确定该block在编号y的chunk内的block数目偏移及编号y的chunk的累计字节数偏移量;
[0049]根据该block在编号y的chunk内的block数目偏移及block的大小,确定该block在编号y的chunk内的字节数偏移量;
[0050]根据该block在编号y的chunk内的字节数偏移量,及编号y的chunk的累计字节数偏移量,确定该block的字节数偏移量;
[0
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1