生成OTA数据包的方法、用于更新系统的方法及相关产品与流程
未命名
10-21
阅读:54
评论:0
生成ota数据包的方法、用于更新系统的方法及相关产品
技术领域:
:1.本发明的实施方式涉及信息处理
技术领域:
:,更具体地,本发明的实施方式涉及生成ota数据包的方法,用于更新系统的方法以及执行前述方法的电子设备和计算机可读存储介质。
背景技术:
::2.本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述可包括可以探究的概念,但不一定是之前已经想到或者已经探究的概念。因此,除非在此指出,否则在本部分中描述的内容对于本技术的说明书和权利要求书而言不是现有技术,并且并不因为包括在本部分中就承认是现有技术。3.目前系统固件升级的方式主要包括全量升级和差分升级。其中,差分升级是指只对两个版本的差异部分进行升级,即升级包只包含差异部分,在升级时借助一些逻辑,使得系统可以安全的升级为新的版本。差分包机制可以很大的节省所需的空间和升级的时间。4.然而,目前的生成空中下载技术(over-the-airtechnology,简称ota)差分包方案是在检测到文件有更新时,就会将整个文件都放入ota差分包。由此,当比较大的文件中仅有部分内容更新时,也需要把整个文件都复制到差分包里。另外,在linux文件系统较多的情况下,只要重新编译,很多工具内部的宏(例如,__data__,__time__等)就会更新。即便完全没有修改过,也会因为重新编译造成文件的内容有变化,此时也需要将文件整个复制到差分包内。可以看出,基于当前方案所生成的ota差分包尺寸大,不仅占用过多空间,且会在后续系统更新时,因ota差分包下载时间长、安装速度慢等因素影响系统更新效果,进而影响用户使用体验。技术实现要素:5.已知的大尺寸ota差分包导致整个系统升级效果不理想,这是非常令人烦恼的过程。6.为此,非常需要一种改进的生成ota数据包的方案,能够缩减ota数据包尺寸,降低其对空间的占用以及有利于提高系统更新效率。7.在本上下文中,本发明的实施方式期望提供一种生成ota数据包的方法及相关产品。8.在本发明实施方式的第一方面中,提出了一种生成ota数据包的方法,包括:响应于待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下,获取所述第一镜像和所述第二镜像在所述不同路径下的块粒度内容差异,其中所述待升级固件和所述新固件包含文件系统;基于所述块粒度内容差异,确定所述第一镜像与所述第二镜像之间的差异部分的数据量;基于所述差异部分的数据量,构建差分数据文件,其中所述差分数据文件中包含块粒度的所述差异部分;以及基于所述差分数据文件生成所述ota数据包。9.在本发明的一个实施例中,构建差分数据文件包括:构建一空镜像文件,其中所述空镜像文件的大小为所述差异部分的数据量的大小;基于所述第一镜像和所述空镜像文件构建快照snapshot型虚拟设备;以及基于所述快照snapshot型虚拟设备实现所述差分数据文件的构建。10.在本发明的另一个实施例中,基于所述第一镜像和所述空镜像文件构建快照snapshot型虚拟设备包括:基于所述第一镜像构建所述快照snapshot型虚拟设备中的基础base层;以及基于所述空镜像文件构建所述快照snapshot型虚拟设备中的写时复制cow层。11.在本发明的又一个实施例中,基于所述快照snapshot型虚拟设备实现所述差分数据文件的构建包括:将块粒度的所述差异部分写入所述快照snapshot型虚拟设备中的写时复制cow层,使得所述空镜像文件中保存有块粒度的所述差异部分;以及基于保存有块粒度的所述差异部分的空镜像文件,确定所述差分数据文件。12.在本发明的再一个实施例中,所述方法还包括:在完成所述差分数据文件的构建之后,拆除所述快照snapshot型虚拟设备。13.在本发明的一个实施例中,基于所述差分数据文件生成所述ota数据包包括:获取所述待升级固件和所述新固件之间的无文件系统镜像和所述ota数据包所需的安装脚本;基于所述差分数据文件、所述无文件系统镜像和所述安装脚本,生成所述ota数据包。14.在本发明实施方式的第二方面中,提供了一种用于更新系统的方法,所述系统具备第一系统空间和第二系统空间,所述方法包括:获取待安装的ota数据包,其中所述ota数据包是基于差分数据包文件生成的,且所述差分数据文件中包含块粒度的差异部分,所述差异部分为待升级固件的第一镜像与新固件的第二镜像之间的差异部分;以及响应于所述第一系统空间处于启用状态,在所述第一系统空间中对所述ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的所述第二系统空间中,以对所述第二系统空间进行更新。15.在本发明的一个实施例中,其中所述ota数据包包括无文件系统镜像、安装脚本和所述差分数据包文件,所述方法具体包括:在所述第一系统空间中运行解压出的所述安装脚本,以将所述无文件系统镜像和所述差分数据包文件写入所述第二系统空间中。16.在本发明的另一个实施例中,将所述差分数据包文件写入所述第二系统空间中包括:基于所述第二系统空间创建快照源类型的虚拟存储;基于所述第二系统空间和所述差分数据包文件创建快照合并类型的虚拟存储,其中所述第二系统空间为所述快照合并类型的虚拟存储中的基础base层,所述差分数据包文件为所述快照合并类型的虚拟存储中的写时复制cow层;以及基于合并操作将所述cow层中的差分数据包文件写入所述base层中,并无效所述cow层所存储的差分数据包文件。17.在本发明的又一个实施例中,所述方法还包括:在构建所述快照合并类型的虚拟存储之前,对所述快照源类型的虚拟存储的io进行冻结处理,以及在完成所述快照合并类型的虚拟存储的构建之后,对已冻结的io进行解冻处理。18.在本发明的再一个实施例中,所述方法还包括:对所述第一系统空间和所述第二系统空间进行对齐处理。19.在本发明的一个实施例中,对所述第一系统空间和所述第二系统空间进行对齐处理包括:获取所述第一系统空间和所述第二系统空间之间的块粒度差异数据,并将所述块粒度差异数据写入所述第一系统空间中;或者对所述ota数据包进行备份,以及根据备份的ota数据包对所述第一系统空间进行更新。20.在本发明实施方式的第三方面中,提供了一种电子设备,包括:处理器;以及存储器,其存储有生成ota数据包的计算机指令或者用于更新系统的计算机指令,当所述计算机指令由所述处理器运行时,使得所述电子设备执行第一方面或者第二方面的实施例所述的方法。21.在本发明实施方式的第四方面中,提供了一种计算机可读存储介质,包含有生成ota数据包的程序指令或者用于更新系统的程序指令,当所述程序指令由处理器执行时,使得实现第一方面或者第二方面的实施例所述的方法。22.根据本发明实施方式的生成ota数据包的方法及相关产品,可以利用待升级固件的第一镜像和新固件的第二镜像之间的块粒度内容差异构建差分数据文件,并基于该块粒度的差分数据文件来生成差分数据文件。可以看出,本发明的方案在生成ota数据包过程中,能够以小尺寸的块粒度来统计固件不同版本内容之间的差异,使得当文件的部分内容有变化时,可以仅将文件中的差异部分放在ota数据包,而非将整个文件都放在ota数据包。由此,不仅突破了传统以文件粒度生成ota数据包的惯性思维,并且有效缩减ota数据包尺寸,降低其对空间的占用,以及有利于缩短后续ota数据包的下载时间以及提高安装速度等,从而提高系统更新效率。23.另外,本发明实施方式的生用于更新系统的方法,可以利用小尺寸的ota数据包提高系统更新效率。在一些实施例中,可以利用不同系统空间之间的块粒度差异数据来实现不同系统空间的对齐处理,或者利用备份的ota数据包实现不同系统空间的对齐处理,由此提高不同系统空间的对齐速度,优化整个系统性能。附图说明24.通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:25.图1示意性地示出了适于实现本发明实施方式的示例性计算系统100的框图;26.图2示意性地示出了根据本发明一个实施例的生成ota数据包的方法的流程示意图;27.图3示意性地示出了根据本发明另一个实施例的生成ota数据包的方法的流程示意图;28.图4示意性地示出了根据本发明再一个实施例的生成ota数据包的方法的流程示意图;29.图5示意性地示出了根据本发明一个实施例的用于更新系统的方法的流程示意图;30.图6示意性地示出了根据本发明另一个实施例的用于更新系统的方法的流程示意图;31.图7示意性地示出了根据本发明再一个实施例的用于更新系统的方法的流程示意图;32.图8示意性地示出了根据本发明实施例的设备映射devicemapper的技术框架的示意图;33.图9示意性地示出了根据本发明实施例的快照snapshot逻辑设备的框架示意图;34.图10示意性地示出了根据本发明实施例的基于merge操作的文件更新过程的示意图;以及35.图11示意性地示出了根据本发明实施例的电子设备的结构示意图。36.在附图中,相同或对应的标号表示相同或对应的部分。具体实施方式37.下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。38.图1示出了适于实现本发明实施方式的示例性计算系统100的框图。如图1所示,计算系统100可以包括:中央处理单元(cpu)101、随机存取存储器(ram)102、只读存储器(rom)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。这些设备中,与系统总线104耦合的有cpu101、ram102、rom103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图1所述的结构框图仅仅是为了示例的目的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况增加或减少某些设备。39.本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式,本文一般称为“电路”、“模块”、“单元”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。40.可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举示例)例如可以包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。41.计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。42.计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、rf等等,或者上述的任意合适的组合。43.可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络(包括局域网(lan)或广域网(wan))连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。44.下面将参照本发明实施例的方法的流程图和设备(或系统)的框图描述本发明的实施方式。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。45.也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置的产品。46.也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。47.根据本发明的实施方式,提出了一种生成ota数据包的方法、用于更新系统的方法及相关产品。48.在本文中,需要理解的是,系统在本质上可以理解为是软件,系统空间可以理解为是系统所占用空间。另外,本文中双系统空间(a/b空间,也即第一系统空间和第二系统空间)可以理解为是设备中的系统占用两份系统空间,且两份空间中的初始系统数据保持一致。固件可以理解是写入可擦写可编程只读存储器(简称eprom)或电可擦可编程只读存储器(简称eeprom)中的程序。而镜像则可以理解为是一种文件存储形式。一般系统在有升级需求时,可以以固件的升级包形式进行升级,而固件的升级包中可以包括无文件系统的镜像和/或有文件系统的镜像。此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。49.下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。发明概述50.发明人发现,目前基于ota数据包升级系统的效果不理性。具体地,目前一些设备(例如词典笔等)上的系统会占用两份空间,且两份空间(例如a空间和b空间)的系统数据一致。当a空间系统异常时,可以用b空间的系统来启动。那么在ota升级时,可以在a空间的系统运行的时候,对b空间的系统升级。升级完成后下次重启可直接使用升级完毕的b空间的系统,对用户来说就是感知不到升级过程对使用的影响,用这种方式来实现用户的无感系统升级。51.目前系统固件升级主要采用差分升级的方式。该差分升级方式在服务器侧,会将新旧版本的固件进行拆包。然后,针对无文件系统的镜像,会将更新的镜像(例如linuxkernel)整个放入差分包打包目录中。针对有文件系统的镜像,则需要对镜像文件内部做遍历对比,将新增的文件/目录整个放入差分包打包目录中,并生成add_list.txt清单,以及将有变化的文件/目录整个放入差分包打包目录中,并生成modify_list.txt清单,且将删除的文件和目录写入del_list.txt清单。最后,将安装脚本、list清单文件和、无文件系统镜像的压缩包和文件系统文件的差分包一起打包成ota差分包。在设备端侧,会下载该ota差分包,并解压该ota差分包。该设备端具备有ab两套空间且互为备份,a空间作为正在运行的系统时,则执行解压出来的安装脚本,将ota差分包写入此时作为备份的b空间(如果b为运行系统,则写入a空间)。其中,在ota差分包写入过程中,会根据add/modify/del三个list文件,将文件差分包的内容写入对应b空间,以及将无文件系统的压缩包直接写入b空间。在校验完更新后的文件后,下次启动就会切入b空间进行启动,以进入更新后的系统。52.另外,升级完成并重启后,需要对a、b空间进行对齐。具体地,刚升级的b空间可以启动后,需要将a空间也同步升级成新的。目前采用的对齐方式是将b空间同步写到a空间做全盘复制。53.可以看出,上述系统升级过程存在一些痛点。例如,服务器侧在检测到文件有更新时,就会将整个文件都放入ota差分包。特别是,当比较大的文件中仅有部分内容更新时,也需要把整个文件都复制到差分包里。另外,在linux文件系统较多的情况下,只要重新编译,很多工具内部的宏(例如,__data__,__time__等)就会更新。即便完全没有修改过,也会因为重新编译造成文件的内容有变化,此时也需要将文件整个复制到差分包内。因此,基于当前方案所生成的ota差分包尺寸大,不仅占用过多空间,且会在后续系统更新时,因ota差分包下载时间长、安装速度慢等因素影响系统更新效果,进而影响用户使用体验。又例如,写入ota差分包到设备的速度慢。若有很多小文件变更且需要频繁地遍历文件系统,设备端复制这些小文件的操作会比较耗时,且在被异常断电打断操作时,因为文件系统存在概率受损,较难实现断点继续,只能从头开始。此时频繁的io操作会拖慢正在运行的系统,给用户造成体验到影响。还例如,目前全盘复制方案需要将所有数据写一遍,全盘复制的io很高,使得a、b空间对齐速度较慢,且影响系统性能。54.对此,发明人进一步分析发现,在固件不同版本更新时,很多情况仅涉及文件中部分内容的更新或者变化。基于此,发明人经研究发现,可以突破传统以文件粒度生成ota差分包的惯性思维,优化新旧固件之间的差异区分粒度,使得ota差分包可以依据小于文件粒度的其他差异区分粒度来生成。由此,可以有效缩减ota数据包尺寸,降低其对空间的占用,以及有利于缩短后续ota数据包的下载时间以及提高安装速度等,从而提高系统更新效率。55.在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。示例性方法56.下面参考图2来描述根据本发明示例性实施方式的生成ota数据包的方法。需要注意的是,本发明的实施方式可以应用于适用的任何场景。57.图2示意性地示出了根据本发明一个实施例的生成ota数据包的方法200的流程示意图。需要说明的是,方法200可以由支持ota数据包生成的设备来执行,例如编译服务器等。58.如图2所示,在步骤s201处,响应于待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下,获取前述第一镜像和第二镜像在不同路径下的块粒度内容差异。当不同版本的固件需要升级时,需要针对新旧固件(即待升级固件和新固件)生成ota数据包。其中,待升级固件和新固件可能会包括无文件系统(例如linuxkernel等)和有文件系统(例如根文件系统rootfs等)的内容。其中,在至少包含文件系统的固件有升级需求时,可将待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下。例如,可以将第一镜像和第二镜像都mount到服务器的两个不同路径。59.此时,可以获取第一镜像和第二镜像在不同路径下的块粒度内容差异。这里,可以以小于文件粒度的块粒度作为差异区分粒度,以块粒度来比对第一镜像和第二镜像在不同路径下的内容差异。例如,可以利用支持块粒度分析的工具(例如devicemapper工具等)比较第一镜像和第二镜像在不同路径下内容差异,以获取不同路径下的块粒度内容差异。需要说明得是,对获取块粒度内容差异的细节性描述仅是示例性说明。本发明的方案并不局限于此,例如还可以采用其他块粒度分析手段或工具来支持内容的块粒度化分析。60.接着,在步骤s202处,可以基于块粒度内容差异,确定第一镜像与第二镜像之间的差异部分的数据量。在比较第一镜像和第二镜像在不同路径下的块粒度内容差异过程中,可以对得到的块粒度内容差异进行统计,以确定第一镜像与第二镜像之间的差异部分的数据量。61.接着,在步骤s203处,可以基于前述的差异部分的数据量,构建差分数据文件。其中,该差分数据文件中包含块粒度的差异部分。这里的差分数据文件是基于所统计的块粒度内容差异得到的,其完全不同于传统的以文件粒度统计的文件系统文件差分包,且该差分数据文件的尺寸远小于文件系统文件差分包。62.最后,在步骤s204处,可以基于前述的差分数据文件生成ota数据包。以包含块粒度的差异部分的差分数据文件生成ota数据包,所生成的ota数据包的尺寸明显小于包含整个文件的ota数据包。63.由此,在生成ota数据包过程中,能够以小尺寸的块粒度来统计固件不同版本内容之间的差异,使得当文件的部分内容有变化或更新时,可以仅将文件中的差异部分放在ota数据包,而非将整个文件都放在ota数据包。这不仅突破了传统以文件粒度生成ota数据包的惯性思维,并且有效缩减ota数据包尺寸,降低其对空间的占用,以及有利于缩短后续ota数据包的下载时间以及提高安装速度等,从而提高系统更新效率。64.图3示意性地示出了根据本发明另一个实施例的生成ota数据包的方法300的流程示意图。可以理解的是,方法300是对图2中方法200的进一步限定和/或拓展。因此,前文结合图2的相关细节性描述同样也适用于下文。65.如图3所示,在步骤s301处,可以获取待升级固件的第一镜像和新固件的第二镜像在不同路径下的块粒度内容差异。如前文所述,可以将待升级固件的第一镜像和新固件的第二镜像挂载到服务器的两个不同路径下,其中该服务器为支持ota生成的设备。然后,以块粒度作为差异区分粒度来对比第一镜像和第二镜像在不同路径下的块粒度内容差异。在一些实施例中,可以通过操作粒度为块粒度(例如chunk粒度)的devicemapper来对比第一镜像和第二镜像在不同路径下的块粒度内容差异。需要说明的是,这里对块粒度内容差异过程的细节性描述仅是示例性说明,本发明的方案并不局限于此。例如,还可以通过其他支持块粒度分析的工具来实现块粒度内容差异的获取。66.在步骤s302处,可以基于前述的块粒度内容差异确定第一镜像与第二镜像之间的差异部分的数据量。在对比第一镜像和第二镜像在不同路径下的块粒度内容差异时,可以基于该块粒度内容差异统计第一镜像与第二镜像之间的差异部分的数据量。67.接着,在步骤s303处,可以构建一空镜像文件。其中,该空镜像文件的大小为前述第一镜像与第二镜像之间的差异部分的数据量。68.接着,在步骤s304处,可以基于第一镜像和空镜像文件构建快照snapshot型虚拟设备。具体地,可以基于第一镜像构建该快照snapshot型虚拟设备中的基础base层,以及基于空镜像文件构建快照snapshot型虚拟设备中的写时复制cow层。69.接着,在步骤s305处,可以基于快照snapshot型虚拟设备实现差分数据文件的构建。具体地,可以将块粒度的差异部分写入快照snapshot型虚拟设备中的写时复制cow层,使得空镜像文件中保存有块粒度的差异部分,并且基于保存有块粒度的差异部分的镜像文件,来确定差分数据文件。例如,将保存有块粒度的差异部分的镜像文件直接作为该差分数据文件。70.在步骤s306处,可以获取待升级固件和新固件之间的无文件系统镜像和ota数据包所需的安装脚本。如前文所述,待升级固件和新固件中还可能包含linuxkernel等无文件系统的内容。因此,可以将新固件中的无文件系统的镜像作为待更新的无文件系统镜像,并以镜像的压缩包(例如无文件系统的img等)形式对其进行保存。需要说明的是,这里对步骤306的执行时机不进行限制。例如,步骤306可以发生在步骤s301之前,也可以在步骤s305之后,或者在步骤s301~步骤s305过程中。71.然后,在步骤s307处,可以基于差分数据文件、无文件系统镜像和安装脚本生成ota数据包。在该ota数据包中,差分数据文件包含块粒度的差异部分,其文件尺寸相对传统的文件粒度的文件系统文件差分包要小很多。另外,无文件系统镜像体积本身就较小。由此,所生成的ota数据包的尺寸整体较小,可以有效降低对空间的占用。72.图4示意性地示出了根据本发明再一个实施例的生成ota数据包的方法400的流程图。可以理解的是,方法400是图2中方法200和方法300的一种具体技术实现。因此,前文结合图2和图3的相关细节性描述同样也适用于下文。73.本实施例中,以支持块粒度分析的devicemapper工具为例来详细说明方法400的具体实现过程。devicemapper不同于aufs、ext4、nfs等文件系统,因为它并不是一个文件系统(filesystem),而是linux内核映射块设备的一种技术框架。devicemapper提供的一种从逻辑设备(即虚拟设备)到物理设备的映射框架机制。在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略,在构建了devicemapper后,操作的是虚拟存储设备,不直接操作物理设备。74.其中,devicemapper的操作粒度可以是chunk粒度,而非file粒度,其允许用户配置最小的写入的chunk尺寸。这个chunk可以是若干扇区sector(512byte),具体可以由用户指定,也可以根据devicemapper的目标target配置。例如可以不小于一个kernelpage(4kbyte),也可以不小于128kbyte。不管哪种情况,都比file操作粒度的io要少的多。75.下面先结合图8、图9和图10对devicemapper工具进行详细介绍。76.devicemapper作为linux块设备映射技术框架,向外部提供逻辑设备。图8示出了一种devicemapper的技术框架。如图8所示,该devicemapper框架包括包含映射设备(mappeddevice)、映射表(maptable)和目标设备(targetdevice)。其中,映射设备即对外提供的逻辑设备,且映射设备向下寻找能够找到支撑的目标设备。映射表用于存储映射设备和目标设备的映射关系。目标设备可以是映射设备或者物理设备,如果目标设备是一块映射设备(例如图8中的targeta),则属于嵌套,理论上可以无限迭代下去。77.需要说明的是,devicemapper的多种目标设备可以分别应用于不同的场景,在本实施例中,可以采用快照snapshot作为目标。快照snapshot主要支持快照snapshot操作和合并merge操作。其中,为了支持工作场景,snapshot设计了三个目标(target),分别是源快照snapshot-origin、快照snapshottarget、快照合并snapshot-merge。78.其中,如图9所示,snapshot逻辑设备是由两个逻辑或者物理设备堆叠在一起的,下边一层一般叫基础(简称base),上边一层叫写时复用(copyonwrite,简称cow)。snapshottarget是将base和cow两个物理设备堆叠成一个虚拟设备。而snapshot-origin是为了在snapshot存在时,允许用户去操作base物理设备的一种机制。79.具体地,可以将图9所示的/dev/loop0和/dev/loop1分别作为snapshot的base和cow,然后创建snapshot-origin虚拟设备指向/dev/loop0。此时可以看到/dev/mapper/vdisk-xxx(例如vdisk-snapshot)和/dev/mapper/vdisk-base两个设备。对vdisk-snapshot设备去访问,数据都会优先读写cow设备,这与文件系统服务overlayfs特性一致。例如,在读写机制中,访问的是堆叠后的虚拟设备(如图9所示的vdisk-xxx),而不去访问物理设备loop0或loop1。具体地,发起read操作的话,数据先看上层的cow里有没有,有的话取cow的数据,没有就从base里读取。发起write操作的话,数据写入cow层,base保持不变。80.另外,前述的snapshot-merge是将cow设备的内容写入base设备的一种机制。该merge操作具体是将cow层存储的数据,以块粒度(例如chunk粒度)写入base里,并无效掉cow中的数据。具体地,如图10所示,在对快照snapshot类型的虚拟设备的某文件进行更新时,可以将更新数据写入cow中,然后将虚拟设备重新配置成快照合并snapshot-merge类型,此时cow所存储的更新数据以chunk粒度写入base中,并且cow所存储的更新数据会被无效掉。当然,这一数据更新操作也可以理解为是将base中旧数据升级为新数据。81.在实际应用中,可以将上述devicemapper所涉及的技术应用于编译服务器生成ota数据包的应用场景中。其中,新旧固件升级时,可能会涉及无文件系统的镜像的更新以及有文件系统镜像的更新。其中,无文件系统的镜像体积本身较小,因此可以直接使用无文件系统镜像的压缩包(例如无文件系统镜像的img)。而图4所示的方法400可以理解为是针对有文件系统的镜像的优化,具体以含文件系统的根文件系统(简称rootfs)的镜像从旧版本升级到新版本的过程为例来说明ota数据包的生成过程。82.具体地,如图4所示,旧固件和新固件包含无文件系统的内核kernel和含文件系统的根文件系统rootfs。针对包含rootfs的旧固件(也即待升级固件),在步骤s401处,可以将旧固件的镜像(也即前文所述的第一镜像)mount到编译服务器的路径下。针对包含rootfs的新固件,在步骤s402处,可以将新固件的镜像(也即前文所述的第二镜像)mount到编译服务器的路径下。也即需要将新旧两个rootfs镜像都mount到编译服务器的两个不同路径。然后,比对第一镜像和第二镜像在两个路径下的块粒度内容差异,以获得第一镜像与第二镜像之间的差异部分的数据量。83.接着,可以建立一个空镜像文件(如图4中的空镜像文件e)。该空镜像文件e文件件的大小为上述获取的差异部分的数据量的大小。然后,可以将第一镜像和空镜像文件e,用devicemapper工具构建一个快照snapshot型的虚拟设备。具体地,在步骤s403处,可以将空镜像文件作为snapshot型的虚拟设备的cow层,以及在步骤s404处,可以将第一镜像作为snapshot型的虚拟设备的base层。在一些实施例中,可以利用支持数据备份的命令仅将块粒度的差异部分写入snapshot型的虚拟设备中。具体地,可以按照devicemappersnapshot的机制,以chunk为粒度将数据写入cow层,那么e文件里就会保存下来第二镜像相对于第一镜像的差异部分。例如,可以采用rsync命令加上‑‑inplace和‑‑checksum两个参数后,就可以只复制文件中的差异部分。需要说明的是,这里对rsync命令的相关细节性描述仅是示例性说明,还可以采用其他支持块粒度的数据备份命令来实现。84.最后,可以将安装脚本+无文件系统镜像的img+差分数据文件一起打包成ota数据包。具体地,在步骤s405处可以将保留有差异部分的镜像文件e作为差分数据文件放入ota数据包中,在步骤s406处,可以将新固件中的内核kernel作为无文件系统镜像的img放入ota数据包中。85.此外,在一些实施例中,可以对所建立的snapshot型的虚拟设备进行拆除,以避免对后续其他版本固件的升级造成影响。例如,可以使用可以利用devicemapper工具将本次固件升级时所建立的snapshot虚拟设备拆除掉。86.在编译服务器侧完成ota数据包的生成之后,设备端可以根据需求来下载该ota数据包进行系统升级。以下结合图5~7对设备端系统升级过程进行说明。87.图5示意性地示出了根据本发明一个实施例的用于更新系统的方法500的流程示意图。需要说明的是,在本实施例中,系统可以包括第一系统空间和第二系统空间,进一步地,该第一系统空间和第二系统空间可以互为备份空间,且具备一致的系统数据。88.如图5所示,在步骤s501处,可以获取待安装的ota数据包。其中,该ota数据包可以是通过方法200、方法300或方法400生成的。具体地,该ota数据包是基于差分数据包文件生成的,且所述差分数据文件中包含块粒度的差异部分,且该差异部分为待升级固件的第一镜像与新固件的第二镜像之间的差异部分。该ota数据包相对于传统方式生成的ota差分包尺寸更小。89.在实际应用中,可以通过多种方式来获取小尺寸的ota数据包。例如,在编译服务器侧生成该ota数据包之后,可以向设备端推送该ota数据包。又例如,设备端可以主动向编译服务器侧发送请求,以获取该ota数据包。需要说明的是,这里对ota数据包的获取过程的描述仅是示例性说明。90.在步骤s502处,响应于第一系统空间处于启用状态,可以在第一系统空间中对该ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的第二系统空间中,以对第二系统空间进行更新。91.其中,第一系统空间和第二系统空间可以互为备份,即当第一系统空间或第二系统空间中任一系统空间处于启用状态时,可以在启用状态的系统空间中对该ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的系统空间中,以对备份状态的系统空间进行更新。由此,利用ota数据包升级系统过程中,小尺寸的ota数据包更有利于下载、安装以及数据写入,由此可以有效提高系统更新效率。92.图6示意性地示出了根据本发明另一个实施例的用于更新系统的方法600的流程示意图。可以理解的是,方法600是对图5中方法500的进一步限定和/或拓展。因此,前文结合图5的相关细节性描述同样也适用于下文。93.如图6所示,在步骤s601处,可以获取包含无文件系统镜像、安装脚本和差分数据文件的ota数据包。前文所述,可以是编译服务器侧生成该ota数据包之后,向设备端推送该ota数据包,还可以是设备端主动向编译服务器侧请求该ota数据包等多种方式来获取该ota数据包。94.在步骤s602处,可以响应于第一系统空间处于启用状态,在第一系统空间中对ota数据包进行解压,并运行解压出的安装脚本。95.然后,将无文件系统镜像和差分数据包文件写入第二系统空间中。具体地,在步骤s603处,可以基于第二系统空间创建快照源类型的虚拟存储。在步骤s604处,可以基于第二系统空间和差分数据包文件创建快照合并类型的虚拟存储,其中第二系统空间为快照合并类型的虚拟存储中的基础base层,差分数据包文件为快照合并类型的虚拟存储中的写时复制cow层。在步骤s605处,可以基于合并操作将cow层中的差分数据包文件写入base层中,并无效cow层所存储的差分数据包文件。在一些实施例中,可以利用devicemapper工具来构建快照源类型的虚拟存储和快照合并类型的虚拟存储,并基于merge操作实现将cow层中的差分数据包文件写入base层中,并无效cow层所存储的差分数据包文件。96.进一步地,在一些实施例中,在升级过程中可能会出现有一些读写操作的异常情况。为了避免这些异常情况的发生,可以在构建快照合并类型的虚拟存储之前,对快照源类型的虚拟存储的io进行冻结处理,以及在完成快照合并类型的虚拟存储的构建之后,对已冻结的io进行解冻处理。97.在步骤s606处,可以对第一系统空间和第二系统空间进行对齐处理。在一些实施例中,在完成第二系统空间的更新之后,可以获取第一系统空间和第二系统空间之间的块粒度差异数据,并将块粒度差异数据写入第一系统空间中,以完成对第一系统空间的更新。在另一些实施例中,还可以对ota数据包进行备份,利用备份的ota数据包重复执行类似步骤s602~s605,以对第一系统空间进行更新。98.图7示意性地示出了根据本发明再一个实施例的用于更新系统的方法700的流程示意图。可以理解的是,方法700是图5中方法500和方法600的一种具体技术实现。因此,前文结合图5和图6的相关细节性描述同样也适用于下文。99.如图7所示,在步骤s701处,可以下载以及解压ota数据包。本实例中的ota数据包以通过方法400生成的ota数据包为例进行说明。该ota数据包包括内核kernel等无文件系统的镜像、包含根文件系统rootfs等文件系统差异部分的镜像文件e以及安装脚本(图7中未示出)。另外,本实施例中,系统包括空间a(即前文中的第一系统空间)和空间b(即前文中的第二系统空间),其中空间a被启用,而空间b作为空间a的备份。a空间在运行中,可以在a空间中执行被解压出的安装脚本以及将ota数据包写入此时作为备份的b空间中(当然,若此时b空间为运行系统,可以将ota数据包写入作为备份的a空间)。100.具体地,在步骤s702处,可以将无文件系统镜像的img写入b空间中。例如,可以将linuxkernel‑‑boot.img直接写入b空间的boot_b区域。101.然后,可以利用devicemapper工具执行以下操作:102.1)用devicemapper工具将b空间创建为snapshot-origin类型的虚拟存储。103.2)用devicemapper工具将shapshot-origin类型的虚拟存储的io冻结。104.3)用devicemapper工具将b空间+差分数据文件(例如镜像文件e)构建成snapshot-merge型的虚拟存储。例如,在步骤s703处,基于b空间(即前文的第二系统空间)构建snapshot-merge型的虚拟存储中的基础base层。在步骤s704处,可基于镜像文件e构建snapshot-merge型的虚拟存储中的cow层。在步骤s705处,通过merge操作将cow中的差分数据包文件写入base层中,并无效cow层所存储的差分数据包文件。105.4)用devicemapper工具将shapshot-origin类型的虚拟存储的io解冻。106.5)等待合并操作(例如merge操作)完成。期间可以通过devicemapper工具查看merge操作进度。在合并过程中,可以利用扇区的相关参数来了解merge操作进度。具体地,分配的扇区数量会越来越少,当持有数据的扇区数为零时,则表示合并已完成。107.需要说明的是,merge机制支持续传功能,也即merge过程在cow文件里会有记录,所以不担心断电打断更新,重新执行时可以根据cow文件中的记录进行断点续传。但是当cow文件里的数据写入了底层base,cow文件内这部分数据会被清空,也就是说cow文件不能多次merge。换而言之,也就是一份ota数据包仅支持一次merge操作。108.然后,可以校验更后的文件。如果ok,可以写一个ota完成标志。下次启动就会切入b空间进行启动,进入更新后的系统。109.进一步地,在完成b空间的系统更新之后,可以对a、b空间进行对齐处理。不同于传统全盘复制的方式,本实例可以采用对比a、b空间中每个数据块block的数据差异,并仅对不一致的block进行写入,这种操作的io请求远低于全盘复制,可快速完成a、b空间的对齐。而在另一些实例中,还可以使用ota数据包再次对a空间进行升级。因为devices-mapper的merge机制的特性,升级用的ota数据包只能merge一次。所以如果对a空间再执行一次merge,需要提前对下载的ota数据包进行备份,利用备份的ota数据包来更新a空间。110.以“杏仁”almond的3.2.0版本升级到3.3.3版本为例来验证本实施的ota数据包的生成以及系统更新过程。其中,在编译服务器侧生成ota数据包时,利用方法200、方法300或方法400所生成的ota数据包的空间大小相对传统方案生成的ota数据包缩小大约11%、生成ota数据包时间大约提高了70%。在设备端合入ota数据包时,利用方法500、方法600或方法700更新系统的时长相对传统的更新时长大约降低11%。另外,本实施例的方案还支持断电重启续传。此外,本实施例中ab空间对齐的方案相对于传统全盘复制的方案,能够大幅度提高对齐速度(例如,采用前述实施例中的a、b空间的对齐方案可以提速大约50%或78%)。示例性设备111.在介绍了本发明示例性实施方式的方法之后,接下来,参考图11对本发明示例性实施方式的生成ota数据包的方法或用于更新系统的方法的相关产品进行描述。112.图11示意性地示出了根据本发明实施例的电子设备1100的示意框图。如图11所示,电子设备1100可以包括处理器1101和存储器1102。其中存储器1102存储有生成ota数据包的计算机指令,当所述计算机指令由处理器1101运行时,使得便电子设备1100执行根据前文结合图2至图4所描述的方法。例如,在一些实施例中,电子设备1100可以比对待升级固件的第一镜像和新固件的第二镜像在不同路径下的块粒度内容差异、确定第一镜像与第二镜像之间的差异部分的数据量、基于差异部分的数据量构建差分数据文件、基于差分数据文件生成ota数据包等等。基于此,通过电子设备1100可以依据小于文件粒度的块粒度来区分文件之间的差异并生成ota数据包,从而缩小ota数据包尺寸,降低其对空间的占用。需要说明的是,在该场景下,电子设备1100可以是编译服务器或者其他能够生成ota数据包的设备。113.在发明的另一方面中,电子设备1100的存储器1102存储有用于更新系统的计算机指令,当所述计算机指令由处理器1101运行时,使得便电子设备1100执行根据前文结合图5至图7所描述的方法。例如,在一些实施例中,电子设备1100可以获取待安装的ota数据包、在启用状态的第一系统空间中对ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的第二系统空间中、对不同系统空间进行快速对齐处理等等。基于此,通过电子设备1100可以利用小尺寸的ota数据包提高系统更新效率。需要说明的是,在该场景下,电子设备1100可以是词典笔或者其他支持双系统空间的设备。114.应当注意,尽管在上文详细描述中提及了设备的若干装置或子装置,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。115.申请文件中提及的动词“包括”、“包含”及其词形变化的使用不排除除了申请文件中记载的那些元素或步骤之外的元素或步骤的存在。元素前的冠词“一”或“一个”不排除多个这种元素的存在。116.虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。当前第1页12当前第1页12
技术特征:
1.一种生成ota数据包的方法,其特征在于,包括:响应于待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下,获取所述第一镜像和所述第二镜像在所述不同路径下的块粒度内容差异,其中所述待升级固件和所述新固件包含文件系统;基于所述块粒度内容差异,确定所述第一镜像与所述第二镜像之间的差异部分的数据量;基于所述差异部分的数据量,构建差分数据文件,其中所述差分数据文件中包含块粒度的所述差异部分;以及基于所述差分数据文件生成所述ota数据包。2.根据权利要求1所述的方法,其特征在于,构建差分数据文件包括:构建一空镜像文件,其中所述空镜像文件的大小为所述差异部分的数据量的大小;基于所述第一镜像和所述空镜像文件构建快照snapshot型虚拟设备;以及基于所述快照snapshot型虚拟设备实现所述差分数据文件的构建。3.根据权利要求2所述的方法,其特征在于,基于所述第一镜像和所述空镜像文件构建快照snapshot型虚拟设备包括:基于所述第一镜像构建所述快照snapshot型虚拟设备中的基础base层;以及基于所述空镜像文件构建所述快照snapshot型虚拟设备中的写时复制cow层。4.根据权利要求3所述的方法,其特征在于,基于所述快照snapshot型虚拟设备实现所述差分数据文件的构建包括:将块粒度的所述差异部分写入所述快照snapshot型虚拟设备中的写时复制cow层,使得所述空镜像文件中保存有块粒度的所述差异部分;以及基于保存有块粒度的所述差异部分的空镜像文件,确定所述差分数据文件。5.根据权利要求1~4中任意项所述的方法,其特征在于,基于所述差分数据文件生成所述ota数据包包括:获取所述待升级固件和所述新固件之间的无文件系统镜像和所述ota数据包所需的安装脚本;基于所述差分数据文件、所述无文件系统镜像和所述安装脚本,生成所述ota数据包。6.一种用于更新系统的方法,其特征在于,所述系统具备第一系统空间和第二系统空间,所述方法包括:获取待安装的ota数据包,其中所述ota数据包是基于差分数据包文件生成的,且所述差分数据文件中包含块粒度的差异部分,所述差异部分为待升级固件的第一镜像与新固件的第二镜像之间的差异部分;以及响应于所述第一系统空间处于启用状态,在所述第一系统空间中对所述ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的所述第二系统空间中,以对所述第二系统空间进行更新。7.根据权利要求6所述的方法,其特征在于,其中所述ota数据包包括无文件系统镜像、安装脚本和所述差分数据包文件,所述方法具体包括:在所述第一系统空间中运行解压出的所述安装脚本,以将所述无文件系统镜像和所述差分数据包文件写入所述第二系统空间中。
8.根据权利要求7所述的方法,其特征在于,将所述差分数据包文件写入所述第二系统空间中包括:基于所述第二系统空间创建快照源类型的虚拟存储;基于所述第二系统空间和所述差分数据包文件创建快照合并类型的虚拟存储,其中所述第二系统空间为所述快照合并类型的虚拟存储中的基础base层,所述差分数据包文件为所述快照合并类型的虚拟存储中的写时复制cow层;以及基于合并操作将所述cow层中的差分数据包文件写入所述base层中,并无效所述cow层所存储的差分数据包文件。9.一种电子设备,其特征在于,包括:处理器;以及存储器,其存储有生成ota数据包的计算机指令或者用于更新系统的计算机指令,当所述计算机指令由所述处理器运行时,使得所述电子设备执行根据权利要求1-9的任意一项所述的方法。10.一种计算机可读存储介质,其特征在于,包含有生成ota数据包的程序指令或者用于更新系统的程序指令,当所述程序指令由处理器执行时,使得实现根据权利要求1-9的任意一项所述的方法。
技术总结
本发明的实施方式提供了一种生成OTA数据包的方法、用于更新系统的方法及相关产品。其中,所述生成OTA数据包的方法包括:响应于待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下,获取第一镜像和第二镜像在所述不同路径下的块粒度内容差异,其中所述待升级固件和新固件包含文件系统;基于块粒度内容差异,确定第一镜像与第二镜像之间的差异部分的数据量;基于差异部分的数据量,构建差分数据文件,其中差分数据文件中包含块粒度的所述差异部分;以及基于差分数据文件生成OTA数据包。通过本发明的技术方案,可以突破传统以文件粒度生成OTA数据包的惯性思维,并且有效缩减OTA数据包尺寸,降低其对空间的占用。降低其对空间的占用。降低其对空间的占用。
技术研发人员:张睿博
受保护的技术使用者:网易有道(杭州)智能科技有限公司
技术研发日:2023.07.20
技术公布日:2023/10/19
技术领域:
:1.本发明的实施方式涉及信息处理
技术领域:
:,更具体地,本发明的实施方式涉及生成ota数据包的方法,用于更新系统的方法以及执行前述方法的电子设备和计算机可读存储介质。
背景技术:
::2.本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述可包括可以探究的概念,但不一定是之前已经想到或者已经探究的概念。因此,除非在此指出,否则在本部分中描述的内容对于本技术的说明书和权利要求书而言不是现有技术,并且并不因为包括在本部分中就承认是现有技术。3.目前系统固件升级的方式主要包括全量升级和差分升级。其中,差分升级是指只对两个版本的差异部分进行升级,即升级包只包含差异部分,在升级时借助一些逻辑,使得系统可以安全的升级为新的版本。差分包机制可以很大的节省所需的空间和升级的时间。4.然而,目前的生成空中下载技术(over-the-airtechnology,简称ota)差分包方案是在检测到文件有更新时,就会将整个文件都放入ota差分包。由此,当比较大的文件中仅有部分内容更新时,也需要把整个文件都复制到差分包里。另外,在linux文件系统较多的情况下,只要重新编译,很多工具内部的宏(例如,__data__,__time__等)就会更新。即便完全没有修改过,也会因为重新编译造成文件的内容有变化,此时也需要将文件整个复制到差分包内。可以看出,基于当前方案所生成的ota差分包尺寸大,不仅占用过多空间,且会在后续系统更新时,因ota差分包下载时间长、安装速度慢等因素影响系统更新效果,进而影响用户使用体验。技术实现要素:5.已知的大尺寸ota差分包导致整个系统升级效果不理想,这是非常令人烦恼的过程。6.为此,非常需要一种改进的生成ota数据包的方案,能够缩减ota数据包尺寸,降低其对空间的占用以及有利于提高系统更新效率。7.在本上下文中,本发明的实施方式期望提供一种生成ota数据包的方法及相关产品。8.在本发明实施方式的第一方面中,提出了一种生成ota数据包的方法,包括:响应于待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下,获取所述第一镜像和所述第二镜像在所述不同路径下的块粒度内容差异,其中所述待升级固件和所述新固件包含文件系统;基于所述块粒度内容差异,确定所述第一镜像与所述第二镜像之间的差异部分的数据量;基于所述差异部分的数据量,构建差分数据文件,其中所述差分数据文件中包含块粒度的所述差异部分;以及基于所述差分数据文件生成所述ota数据包。9.在本发明的一个实施例中,构建差分数据文件包括:构建一空镜像文件,其中所述空镜像文件的大小为所述差异部分的数据量的大小;基于所述第一镜像和所述空镜像文件构建快照snapshot型虚拟设备;以及基于所述快照snapshot型虚拟设备实现所述差分数据文件的构建。10.在本发明的另一个实施例中,基于所述第一镜像和所述空镜像文件构建快照snapshot型虚拟设备包括:基于所述第一镜像构建所述快照snapshot型虚拟设备中的基础base层;以及基于所述空镜像文件构建所述快照snapshot型虚拟设备中的写时复制cow层。11.在本发明的又一个实施例中,基于所述快照snapshot型虚拟设备实现所述差分数据文件的构建包括:将块粒度的所述差异部分写入所述快照snapshot型虚拟设备中的写时复制cow层,使得所述空镜像文件中保存有块粒度的所述差异部分;以及基于保存有块粒度的所述差异部分的空镜像文件,确定所述差分数据文件。12.在本发明的再一个实施例中,所述方法还包括:在完成所述差分数据文件的构建之后,拆除所述快照snapshot型虚拟设备。13.在本发明的一个实施例中,基于所述差分数据文件生成所述ota数据包包括:获取所述待升级固件和所述新固件之间的无文件系统镜像和所述ota数据包所需的安装脚本;基于所述差分数据文件、所述无文件系统镜像和所述安装脚本,生成所述ota数据包。14.在本发明实施方式的第二方面中,提供了一种用于更新系统的方法,所述系统具备第一系统空间和第二系统空间,所述方法包括:获取待安装的ota数据包,其中所述ota数据包是基于差分数据包文件生成的,且所述差分数据文件中包含块粒度的差异部分,所述差异部分为待升级固件的第一镜像与新固件的第二镜像之间的差异部分;以及响应于所述第一系统空间处于启用状态,在所述第一系统空间中对所述ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的所述第二系统空间中,以对所述第二系统空间进行更新。15.在本发明的一个实施例中,其中所述ota数据包包括无文件系统镜像、安装脚本和所述差分数据包文件,所述方法具体包括:在所述第一系统空间中运行解压出的所述安装脚本,以将所述无文件系统镜像和所述差分数据包文件写入所述第二系统空间中。16.在本发明的另一个实施例中,将所述差分数据包文件写入所述第二系统空间中包括:基于所述第二系统空间创建快照源类型的虚拟存储;基于所述第二系统空间和所述差分数据包文件创建快照合并类型的虚拟存储,其中所述第二系统空间为所述快照合并类型的虚拟存储中的基础base层,所述差分数据包文件为所述快照合并类型的虚拟存储中的写时复制cow层;以及基于合并操作将所述cow层中的差分数据包文件写入所述base层中,并无效所述cow层所存储的差分数据包文件。17.在本发明的又一个实施例中,所述方法还包括:在构建所述快照合并类型的虚拟存储之前,对所述快照源类型的虚拟存储的io进行冻结处理,以及在完成所述快照合并类型的虚拟存储的构建之后,对已冻结的io进行解冻处理。18.在本发明的再一个实施例中,所述方法还包括:对所述第一系统空间和所述第二系统空间进行对齐处理。19.在本发明的一个实施例中,对所述第一系统空间和所述第二系统空间进行对齐处理包括:获取所述第一系统空间和所述第二系统空间之间的块粒度差异数据,并将所述块粒度差异数据写入所述第一系统空间中;或者对所述ota数据包进行备份,以及根据备份的ota数据包对所述第一系统空间进行更新。20.在本发明实施方式的第三方面中,提供了一种电子设备,包括:处理器;以及存储器,其存储有生成ota数据包的计算机指令或者用于更新系统的计算机指令,当所述计算机指令由所述处理器运行时,使得所述电子设备执行第一方面或者第二方面的实施例所述的方法。21.在本发明实施方式的第四方面中,提供了一种计算机可读存储介质,包含有生成ota数据包的程序指令或者用于更新系统的程序指令,当所述程序指令由处理器执行时,使得实现第一方面或者第二方面的实施例所述的方法。22.根据本发明实施方式的生成ota数据包的方法及相关产品,可以利用待升级固件的第一镜像和新固件的第二镜像之间的块粒度内容差异构建差分数据文件,并基于该块粒度的差分数据文件来生成差分数据文件。可以看出,本发明的方案在生成ota数据包过程中,能够以小尺寸的块粒度来统计固件不同版本内容之间的差异,使得当文件的部分内容有变化时,可以仅将文件中的差异部分放在ota数据包,而非将整个文件都放在ota数据包。由此,不仅突破了传统以文件粒度生成ota数据包的惯性思维,并且有效缩减ota数据包尺寸,降低其对空间的占用,以及有利于缩短后续ota数据包的下载时间以及提高安装速度等,从而提高系统更新效率。23.另外,本发明实施方式的生用于更新系统的方法,可以利用小尺寸的ota数据包提高系统更新效率。在一些实施例中,可以利用不同系统空间之间的块粒度差异数据来实现不同系统空间的对齐处理,或者利用备份的ota数据包实现不同系统空间的对齐处理,由此提高不同系统空间的对齐速度,优化整个系统性能。附图说明24.通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:25.图1示意性地示出了适于实现本发明实施方式的示例性计算系统100的框图;26.图2示意性地示出了根据本发明一个实施例的生成ota数据包的方法的流程示意图;27.图3示意性地示出了根据本发明另一个实施例的生成ota数据包的方法的流程示意图;28.图4示意性地示出了根据本发明再一个实施例的生成ota数据包的方法的流程示意图;29.图5示意性地示出了根据本发明一个实施例的用于更新系统的方法的流程示意图;30.图6示意性地示出了根据本发明另一个实施例的用于更新系统的方法的流程示意图;31.图7示意性地示出了根据本发明再一个实施例的用于更新系统的方法的流程示意图;32.图8示意性地示出了根据本发明实施例的设备映射devicemapper的技术框架的示意图;33.图9示意性地示出了根据本发明实施例的快照snapshot逻辑设备的框架示意图;34.图10示意性地示出了根据本发明实施例的基于merge操作的文件更新过程的示意图;以及35.图11示意性地示出了根据本发明实施例的电子设备的结构示意图。36.在附图中,相同或对应的标号表示相同或对应的部分。具体实施方式37.下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。38.图1示出了适于实现本发明实施方式的示例性计算系统100的框图。如图1所示,计算系统100可以包括:中央处理单元(cpu)101、随机存取存储器(ram)102、只读存储器(rom)103、系统总线104、硬盘控制器105、键盘控制器106、串行接口控制器107、并行接口控制器108、显示控制器109、硬盘110、键盘111、串行外部设备112、并行外部设备113和显示器114。这些设备中,与系统总线104耦合的有cpu101、ram102、rom103、硬盘控制器105、键盘控制器106、串行控制器107、并行控制器108和显示控制器109。硬盘110与硬盘控制器105耦合,键盘111与键盘控制器106耦合,串行外部设备112与串行接口控制器107耦合,并行外部设备113与并行接口控制器108耦合,以及显示器114与显示控制器109耦合。应当理解,图1所述的结构框图仅仅是为了示例的目的,而不是对本发明范围的限制。在某些情况下,可以根据具体情况增加或减少某些设备。39.本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式,本文一般称为“电路”、“模块”、“单元”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。40.可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举示例)例如可以包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。41.计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。42.计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、rf等等,或者上述的任意合适的组合。43.可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络(包括局域网(lan)或广域网(wan))连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。44.下面将参照本发明实施例的方法的流程图和设备(或系统)的框图描述本发明的实施方式。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。45.也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置的产品。46.也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。47.根据本发明的实施方式,提出了一种生成ota数据包的方法、用于更新系统的方法及相关产品。48.在本文中,需要理解的是,系统在本质上可以理解为是软件,系统空间可以理解为是系统所占用空间。另外,本文中双系统空间(a/b空间,也即第一系统空间和第二系统空间)可以理解为是设备中的系统占用两份系统空间,且两份空间中的初始系统数据保持一致。固件可以理解是写入可擦写可编程只读存储器(简称eprom)或电可擦可编程只读存储器(简称eeprom)中的程序。而镜像则可以理解为是一种文件存储形式。一般系统在有升级需求时,可以以固件的升级包形式进行升级,而固件的升级包中可以包括无文件系统的镜像和/或有文件系统的镜像。此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。49.下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。发明概述50.发明人发现,目前基于ota数据包升级系统的效果不理性。具体地,目前一些设备(例如词典笔等)上的系统会占用两份空间,且两份空间(例如a空间和b空间)的系统数据一致。当a空间系统异常时,可以用b空间的系统来启动。那么在ota升级时,可以在a空间的系统运行的时候,对b空间的系统升级。升级完成后下次重启可直接使用升级完毕的b空间的系统,对用户来说就是感知不到升级过程对使用的影响,用这种方式来实现用户的无感系统升级。51.目前系统固件升级主要采用差分升级的方式。该差分升级方式在服务器侧,会将新旧版本的固件进行拆包。然后,针对无文件系统的镜像,会将更新的镜像(例如linuxkernel)整个放入差分包打包目录中。针对有文件系统的镜像,则需要对镜像文件内部做遍历对比,将新增的文件/目录整个放入差分包打包目录中,并生成add_list.txt清单,以及将有变化的文件/目录整个放入差分包打包目录中,并生成modify_list.txt清单,且将删除的文件和目录写入del_list.txt清单。最后,将安装脚本、list清单文件和、无文件系统镜像的压缩包和文件系统文件的差分包一起打包成ota差分包。在设备端侧,会下载该ota差分包,并解压该ota差分包。该设备端具备有ab两套空间且互为备份,a空间作为正在运行的系统时,则执行解压出来的安装脚本,将ota差分包写入此时作为备份的b空间(如果b为运行系统,则写入a空间)。其中,在ota差分包写入过程中,会根据add/modify/del三个list文件,将文件差分包的内容写入对应b空间,以及将无文件系统的压缩包直接写入b空间。在校验完更新后的文件后,下次启动就会切入b空间进行启动,以进入更新后的系统。52.另外,升级完成并重启后,需要对a、b空间进行对齐。具体地,刚升级的b空间可以启动后,需要将a空间也同步升级成新的。目前采用的对齐方式是将b空间同步写到a空间做全盘复制。53.可以看出,上述系统升级过程存在一些痛点。例如,服务器侧在检测到文件有更新时,就会将整个文件都放入ota差分包。特别是,当比较大的文件中仅有部分内容更新时,也需要把整个文件都复制到差分包里。另外,在linux文件系统较多的情况下,只要重新编译,很多工具内部的宏(例如,__data__,__time__等)就会更新。即便完全没有修改过,也会因为重新编译造成文件的内容有变化,此时也需要将文件整个复制到差分包内。因此,基于当前方案所生成的ota差分包尺寸大,不仅占用过多空间,且会在后续系统更新时,因ota差分包下载时间长、安装速度慢等因素影响系统更新效果,进而影响用户使用体验。又例如,写入ota差分包到设备的速度慢。若有很多小文件变更且需要频繁地遍历文件系统,设备端复制这些小文件的操作会比较耗时,且在被异常断电打断操作时,因为文件系统存在概率受损,较难实现断点继续,只能从头开始。此时频繁的io操作会拖慢正在运行的系统,给用户造成体验到影响。还例如,目前全盘复制方案需要将所有数据写一遍,全盘复制的io很高,使得a、b空间对齐速度较慢,且影响系统性能。54.对此,发明人进一步分析发现,在固件不同版本更新时,很多情况仅涉及文件中部分内容的更新或者变化。基于此,发明人经研究发现,可以突破传统以文件粒度生成ota差分包的惯性思维,优化新旧固件之间的差异区分粒度,使得ota差分包可以依据小于文件粒度的其他差异区分粒度来生成。由此,可以有效缩减ota数据包尺寸,降低其对空间的占用,以及有利于缩短后续ota数据包的下载时间以及提高安装速度等,从而提高系统更新效率。55.在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。示例性方法56.下面参考图2来描述根据本发明示例性实施方式的生成ota数据包的方法。需要注意的是,本发明的实施方式可以应用于适用的任何场景。57.图2示意性地示出了根据本发明一个实施例的生成ota数据包的方法200的流程示意图。需要说明的是,方法200可以由支持ota数据包生成的设备来执行,例如编译服务器等。58.如图2所示,在步骤s201处,响应于待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下,获取前述第一镜像和第二镜像在不同路径下的块粒度内容差异。当不同版本的固件需要升级时,需要针对新旧固件(即待升级固件和新固件)生成ota数据包。其中,待升级固件和新固件可能会包括无文件系统(例如linuxkernel等)和有文件系统(例如根文件系统rootfs等)的内容。其中,在至少包含文件系统的固件有升级需求时,可将待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下。例如,可以将第一镜像和第二镜像都mount到服务器的两个不同路径。59.此时,可以获取第一镜像和第二镜像在不同路径下的块粒度内容差异。这里,可以以小于文件粒度的块粒度作为差异区分粒度,以块粒度来比对第一镜像和第二镜像在不同路径下的内容差异。例如,可以利用支持块粒度分析的工具(例如devicemapper工具等)比较第一镜像和第二镜像在不同路径下内容差异,以获取不同路径下的块粒度内容差异。需要说明得是,对获取块粒度内容差异的细节性描述仅是示例性说明。本发明的方案并不局限于此,例如还可以采用其他块粒度分析手段或工具来支持内容的块粒度化分析。60.接着,在步骤s202处,可以基于块粒度内容差异,确定第一镜像与第二镜像之间的差异部分的数据量。在比较第一镜像和第二镜像在不同路径下的块粒度内容差异过程中,可以对得到的块粒度内容差异进行统计,以确定第一镜像与第二镜像之间的差异部分的数据量。61.接着,在步骤s203处,可以基于前述的差异部分的数据量,构建差分数据文件。其中,该差分数据文件中包含块粒度的差异部分。这里的差分数据文件是基于所统计的块粒度内容差异得到的,其完全不同于传统的以文件粒度统计的文件系统文件差分包,且该差分数据文件的尺寸远小于文件系统文件差分包。62.最后,在步骤s204处,可以基于前述的差分数据文件生成ota数据包。以包含块粒度的差异部分的差分数据文件生成ota数据包,所生成的ota数据包的尺寸明显小于包含整个文件的ota数据包。63.由此,在生成ota数据包过程中,能够以小尺寸的块粒度来统计固件不同版本内容之间的差异,使得当文件的部分内容有变化或更新时,可以仅将文件中的差异部分放在ota数据包,而非将整个文件都放在ota数据包。这不仅突破了传统以文件粒度生成ota数据包的惯性思维,并且有效缩减ota数据包尺寸,降低其对空间的占用,以及有利于缩短后续ota数据包的下载时间以及提高安装速度等,从而提高系统更新效率。64.图3示意性地示出了根据本发明另一个实施例的生成ota数据包的方法300的流程示意图。可以理解的是,方法300是对图2中方法200的进一步限定和/或拓展。因此,前文结合图2的相关细节性描述同样也适用于下文。65.如图3所示,在步骤s301处,可以获取待升级固件的第一镜像和新固件的第二镜像在不同路径下的块粒度内容差异。如前文所述,可以将待升级固件的第一镜像和新固件的第二镜像挂载到服务器的两个不同路径下,其中该服务器为支持ota生成的设备。然后,以块粒度作为差异区分粒度来对比第一镜像和第二镜像在不同路径下的块粒度内容差异。在一些实施例中,可以通过操作粒度为块粒度(例如chunk粒度)的devicemapper来对比第一镜像和第二镜像在不同路径下的块粒度内容差异。需要说明的是,这里对块粒度内容差异过程的细节性描述仅是示例性说明,本发明的方案并不局限于此。例如,还可以通过其他支持块粒度分析的工具来实现块粒度内容差异的获取。66.在步骤s302处,可以基于前述的块粒度内容差异确定第一镜像与第二镜像之间的差异部分的数据量。在对比第一镜像和第二镜像在不同路径下的块粒度内容差异时,可以基于该块粒度内容差异统计第一镜像与第二镜像之间的差异部分的数据量。67.接着,在步骤s303处,可以构建一空镜像文件。其中,该空镜像文件的大小为前述第一镜像与第二镜像之间的差异部分的数据量。68.接着,在步骤s304处,可以基于第一镜像和空镜像文件构建快照snapshot型虚拟设备。具体地,可以基于第一镜像构建该快照snapshot型虚拟设备中的基础base层,以及基于空镜像文件构建快照snapshot型虚拟设备中的写时复制cow层。69.接着,在步骤s305处,可以基于快照snapshot型虚拟设备实现差分数据文件的构建。具体地,可以将块粒度的差异部分写入快照snapshot型虚拟设备中的写时复制cow层,使得空镜像文件中保存有块粒度的差异部分,并且基于保存有块粒度的差异部分的镜像文件,来确定差分数据文件。例如,将保存有块粒度的差异部分的镜像文件直接作为该差分数据文件。70.在步骤s306处,可以获取待升级固件和新固件之间的无文件系统镜像和ota数据包所需的安装脚本。如前文所述,待升级固件和新固件中还可能包含linuxkernel等无文件系统的内容。因此,可以将新固件中的无文件系统的镜像作为待更新的无文件系统镜像,并以镜像的压缩包(例如无文件系统的img等)形式对其进行保存。需要说明的是,这里对步骤306的执行时机不进行限制。例如,步骤306可以发生在步骤s301之前,也可以在步骤s305之后,或者在步骤s301~步骤s305过程中。71.然后,在步骤s307处,可以基于差分数据文件、无文件系统镜像和安装脚本生成ota数据包。在该ota数据包中,差分数据文件包含块粒度的差异部分,其文件尺寸相对传统的文件粒度的文件系统文件差分包要小很多。另外,无文件系统镜像体积本身就较小。由此,所生成的ota数据包的尺寸整体较小,可以有效降低对空间的占用。72.图4示意性地示出了根据本发明再一个实施例的生成ota数据包的方法400的流程图。可以理解的是,方法400是图2中方法200和方法300的一种具体技术实现。因此,前文结合图2和图3的相关细节性描述同样也适用于下文。73.本实施例中,以支持块粒度分析的devicemapper工具为例来详细说明方法400的具体实现过程。devicemapper不同于aufs、ext4、nfs等文件系统,因为它并不是一个文件系统(filesystem),而是linux内核映射块设备的一种技术框架。devicemapper提供的一种从逻辑设备(即虚拟设备)到物理设备的映射框架机制。在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略,在构建了devicemapper后,操作的是虚拟存储设备,不直接操作物理设备。74.其中,devicemapper的操作粒度可以是chunk粒度,而非file粒度,其允许用户配置最小的写入的chunk尺寸。这个chunk可以是若干扇区sector(512byte),具体可以由用户指定,也可以根据devicemapper的目标target配置。例如可以不小于一个kernelpage(4kbyte),也可以不小于128kbyte。不管哪种情况,都比file操作粒度的io要少的多。75.下面先结合图8、图9和图10对devicemapper工具进行详细介绍。76.devicemapper作为linux块设备映射技术框架,向外部提供逻辑设备。图8示出了一种devicemapper的技术框架。如图8所示,该devicemapper框架包括包含映射设备(mappeddevice)、映射表(maptable)和目标设备(targetdevice)。其中,映射设备即对外提供的逻辑设备,且映射设备向下寻找能够找到支撑的目标设备。映射表用于存储映射设备和目标设备的映射关系。目标设备可以是映射设备或者物理设备,如果目标设备是一块映射设备(例如图8中的targeta),则属于嵌套,理论上可以无限迭代下去。77.需要说明的是,devicemapper的多种目标设备可以分别应用于不同的场景,在本实施例中,可以采用快照snapshot作为目标。快照snapshot主要支持快照snapshot操作和合并merge操作。其中,为了支持工作场景,snapshot设计了三个目标(target),分别是源快照snapshot-origin、快照snapshottarget、快照合并snapshot-merge。78.其中,如图9所示,snapshot逻辑设备是由两个逻辑或者物理设备堆叠在一起的,下边一层一般叫基础(简称base),上边一层叫写时复用(copyonwrite,简称cow)。snapshottarget是将base和cow两个物理设备堆叠成一个虚拟设备。而snapshot-origin是为了在snapshot存在时,允许用户去操作base物理设备的一种机制。79.具体地,可以将图9所示的/dev/loop0和/dev/loop1分别作为snapshot的base和cow,然后创建snapshot-origin虚拟设备指向/dev/loop0。此时可以看到/dev/mapper/vdisk-xxx(例如vdisk-snapshot)和/dev/mapper/vdisk-base两个设备。对vdisk-snapshot设备去访问,数据都会优先读写cow设备,这与文件系统服务overlayfs特性一致。例如,在读写机制中,访问的是堆叠后的虚拟设备(如图9所示的vdisk-xxx),而不去访问物理设备loop0或loop1。具体地,发起read操作的话,数据先看上层的cow里有没有,有的话取cow的数据,没有就从base里读取。发起write操作的话,数据写入cow层,base保持不变。80.另外,前述的snapshot-merge是将cow设备的内容写入base设备的一种机制。该merge操作具体是将cow层存储的数据,以块粒度(例如chunk粒度)写入base里,并无效掉cow中的数据。具体地,如图10所示,在对快照snapshot类型的虚拟设备的某文件进行更新时,可以将更新数据写入cow中,然后将虚拟设备重新配置成快照合并snapshot-merge类型,此时cow所存储的更新数据以chunk粒度写入base中,并且cow所存储的更新数据会被无效掉。当然,这一数据更新操作也可以理解为是将base中旧数据升级为新数据。81.在实际应用中,可以将上述devicemapper所涉及的技术应用于编译服务器生成ota数据包的应用场景中。其中,新旧固件升级时,可能会涉及无文件系统的镜像的更新以及有文件系统镜像的更新。其中,无文件系统的镜像体积本身较小,因此可以直接使用无文件系统镜像的压缩包(例如无文件系统镜像的img)。而图4所示的方法400可以理解为是针对有文件系统的镜像的优化,具体以含文件系统的根文件系统(简称rootfs)的镜像从旧版本升级到新版本的过程为例来说明ota数据包的生成过程。82.具体地,如图4所示,旧固件和新固件包含无文件系统的内核kernel和含文件系统的根文件系统rootfs。针对包含rootfs的旧固件(也即待升级固件),在步骤s401处,可以将旧固件的镜像(也即前文所述的第一镜像)mount到编译服务器的路径下。针对包含rootfs的新固件,在步骤s402处,可以将新固件的镜像(也即前文所述的第二镜像)mount到编译服务器的路径下。也即需要将新旧两个rootfs镜像都mount到编译服务器的两个不同路径。然后,比对第一镜像和第二镜像在两个路径下的块粒度内容差异,以获得第一镜像与第二镜像之间的差异部分的数据量。83.接着,可以建立一个空镜像文件(如图4中的空镜像文件e)。该空镜像文件e文件件的大小为上述获取的差异部分的数据量的大小。然后,可以将第一镜像和空镜像文件e,用devicemapper工具构建一个快照snapshot型的虚拟设备。具体地,在步骤s403处,可以将空镜像文件作为snapshot型的虚拟设备的cow层,以及在步骤s404处,可以将第一镜像作为snapshot型的虚拟设备的base层。在一些实施例中,可以利用支持数据备份的命令仅将块粒度的差异部分写入snapshot型的虚拟设备中。具体地,可以按照devicemappersnapshot的机制,以chunk为粒度将数据写入cow层,那么e文件里就会保存下来第二镜像相对于第一镜像的差异部分。例如,可以采用rsync命令加上‑‑inplace和‑‑checksum两个参数后,就可以只复制文件中的差异部分。需要说明的是,这里对rsync命令的相关细节性描述仅是示例性说明,还可以采用其他支持块粒度的数据备份命令来实现。84.最后,可以将安装脚本+无文件系统镜像的img+差分数据文件一起打包成ota数据包。具体地,在步骤s405处可以将保留有差异部分的镜像文件e作为差分数据文件放入ota数据包中,在步骤s406处,可以将新固件中的内核kernel作为无文件系统镜像的img放入ota数据包中。85.此外,在一些实施例中,可以对所建立的snapshot型的虚拟设备进行拆除,以避免对后续其他版本固件的升级造成影响。例如,可以使用可以利用devicemapper工具将本次固件升级时所建立的snapshot虚拟设备拆除掉。86.在编译服务器侧完成ota数据包的生成之后,设备端可以根据需求来下载该ota数据包进行系统升级。以下结合图5~7对设备端系统升级过程进行说明。87.图5示意性地示出了根据本发明一个实施例的用于更新系统的方法500的流程示意图。需要说明的是,在本实施例中,系统可以包括第一系统空间和第二系统空间,进一步地,该第一系统空间和第二系统空间可以互为备份空间,且具备一致的系统数据。88.如图5所示,在步骤s501处,可以获取待安装的ota数据包。其中,该ota数据包可以是通过方法200、方法300或方法400生成的。具体地,该ota数据包是基于差分数据包文件生成的,且所述差分数据文件中包含块粒度的差异部分,且该差异部分为待升级固件的第一镜像与新固件的第二镜像之间的差异部分。该ota数据包相对于传统方式生成的ota差分包尺寸更小。89.在实际应用中,可以通过多种方式来获取小尺寸的ota数据包。例如,在编译服务器侧生成该ota数据包之后,可以向设备端推送该ota数据包。又例如,设备端可以主动向编译服务器侧发送请求,以获取该ota数据包。需要说明的是,这里对ota数据包的获取过程的描述仅是示例性说明。90.在步骤s502处,响应于第一系统空间处于启用状态,可以在第一系统空间中对该ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的第二系统空间中,以对第二系统空间进行更新。91.其中,第一系统空间和第二系统空间可以互为备份,即当第一系统空间或第二系统空间中任一系统空间处于启用状态时,可以在启用状态的系统空间中对该ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的系统空间中,以对备份状态的系统空间进行更新。由此,利用ota数据包升级系统过程中,小尺寸的ota数据包更有利于下载、安装以及数据写入,由此可以有效提高系统更新效率。92.图6示意性地示出了根据本发明另一个实施例的用于更新系统的方法600的流程示意图。可以理解的是,方法600是对图5中方法500的进一步限定和/或拓展。因此,前文结合图5的相关细节性描述同样也适用于下文。93.如图6所示,在步骤s601处,可以获取包含无文件系统镜像、安装脚本和差分数据文件的ota数据包。前文所述,可以是编译服务器侧生成该ota数据包之后,向设备端推送该ota数据包,还可以是设备端主动向编译服务器侧请求该ota数据包等多种方式来获取该ota数据包。94.在步骤s602处,可以响应于第一系统空间处于启用状态,在第一系统空间中对ota数据包进行解压,并运行解压出的安装脚本。95.然后,将无文件系统镜像和差分数据包文件写入第二系统空间中。具体地,在步骤s603处,可以基于第二系统空间创建快照源类型的虚拟存储。在步骤s604处,可以基于第二系统空间和差分数据包文件创建快照合并类型的虚拟存储,其中第二系统空间为快照合并类型的虚拟存储中的基础base层,差分数据包文件为快照合并类型的虚拟存储中的写时复制cow层。在步骤s605处,可以基于合并操作将cow层中的差分数据包文件写入base层中,并无效cow层所存储的差分数据包文件。在一些实施例中,可以利用devicemapper工具来构建快照源类型的虚拟存储和快照合并类型的虚拟存储,并基于merge操作实现将cow层中的差分数据包文件写入base层中,并无效cow层所存储的差分数据包文件。96.进一步地,在一些实施例中,在升级过程中可能会出现有一些读写操作的异常情况。为了避免这些异常情况的发生,可以在构建快照合并类型的虚拟存储之前,对快照源类型的虚拟存储的io进行冻结处理,以及在完成快照合并类型的虚拟存储的构建之后,对已冻结的io进行解冻处理。97.在步骤s606处,可以对第一系统空间和第二系统空间进行对齐处理。在一些实施例中,在完成第二系统空间的更新之后,可以获取第一系统空间和第二系统空间之间的块粒度差异数据,并将块粒度差异数据写入第一系统空间中,以完成对第一系统空间的更新。在另一些实施例中,还可以对ota数据包进行备份,利用备份的ota数据包重复执行类似步骤s602~s605,以对第一系统空间进行更新。98.图7示意性地示出了根据本发明再一个实施例的用于更新系统的方法700的流程示意图。可以理解的是,方法700是图5中方法500和方法600的一种具体技术实现。因此,前文结合图5和图6的相关细节性描述同样也适用于下文。99.如图7所示,在步骤s701处,可以下载以及解压ota数据包。本实例中的ota数据包以通过方法400生成的ota数据包为例进行说明。该ota数据包包括内核kernel等无文件系统的镜像、包含根文件系统rootfs等文件系统差异部分的镜像文件e以及安装脚本(图7中未示出)。另外,本实施例中,系统包括空间a(即前文中的第一系统空间)和空间b(即前文中的第二系统空间),其中空间a被启用,而空间b作为空间a的备份。a空间在运行中,可以在a空间中执行被解压出的安装脚本以及将ota数据包写入此时作为备份的b空间中(当然,若此时b空间为运行系统,可以将ota数据包写入作为备份的a空间)。100.具体地,在步骤s702处,可以将无文件系统镜像的img写入b空间中。例如,可以将linuxkernel‑‑boot.img直接写入b空间的boot_b区域。101.然后,可以利用devicemapper工具执行以下操作:102.1)用devicemapper工具将b空间创建为snapshot-origin类型的虚拟存储。103.2)用devicemapper工具将shapshot-origin类型的虚拟存储的io冻结。104.3)用devicemapper工具将b空间+差分数据文件(例如镜像文件e)构建成snapshot-merge型的虚拟存储。例如,在步骤s703处,基于b空间(即前文的第二系统空间)构建snapshot-merge型的虚拟存储中的基础base层。在步骤s704处,可基于镜像文件e构建snapshot-merge型的虚拟存储中的cow层。在步骤s705处,通过merge操作将cow中的差分数据包文件写入base层中,并无效cow层所存储的差分数据包文件。105.4)用devicemapper工具将shapshot-origin类型的虚拟存储的io解冻。106.5)等待合并操作(例如merge操作)完成。期间可以通过devicemapper工具查看merge操作进度。在合并过程中,可以利用扇区的相关参数来了解merge操作进度。具体地,分配的扇区数量会越来越少,当持有数据的扇区数为零时,则表示合并已完成。107.需要说明的是,merge机制支持续传功能,也即merge过程在cow文件里会有记录,所以不担心断电打断更新,重新执行时可以根据cow文件中的记录进行断点续传。但是当cow文件里的数据写入了底层base,cow文件内这部分数据会被清空,也就是说cow文件不能多次merge。换而言之,也就是一份ota数据包仅支持一次merge操作。108.然后,可以校验更后的文件。如果ok,可以写一个ota完成标志。下次启动就会切入b空间进行启动,进入更新后的系统。109.进一步地,在完成b空间的系统更新之后,可以对a、b空间进行对齐处理。不同于传统全盘复制的方式,本实例可以采用对比a、b空间中每个数据块block的数据差异,并仅对不一致的block进行写入,这种操作的io请求远低于全盘复制,可快速完成a、b空间的对齐。而在另一些实例中,还可以使用ota数据包再次对a空间进行升级。因为devices-mapper的merge机制的特性,升级用的ota数据包只能merge一次。所以如果对a空间再执行一次merge,需要提前对下载的ota数据包进行备份,利用备份的ota数据包来更新a空间。110.以“杏仁”almond的3.2.0版本升级到3.3.3版本为例来验证本实施的ota数据包的生成以及系统更新过程。其中,在编译服务器侧生成ota数据包时,利用方法200、方法300或方法400所生成的ota数据包的空间大小相对传统方案生成的ota数据包缩小大约11%、生成ota数据包时间大约提高了70%。在设备端合入ota数据包时,利用方法500、方法600或方法700更新系统的时长相对传统的更新时长大约降低11%。另外,本实施例的方案还支持断电重启续传。此外,本实施例中ab空间对齐的方案相对于传统全盘复制的方案,能够大幅度提高对齐速度(例如,采用前述实施例中的a、b空间的对齐方案可以提速大约50%或78%)。示例性设备111.在介绍了本发明示例性实施方式的方法之后,接下来,参考图11对本发明示例性实施方式的生成ota数据包的方法或用于更新系统的方法的相关产品进行描述。112.图11示意性地示出了根据本发明实施例的电子设备1100的示意框图。如图11所示,电子设备1100可以包括处理器1101和存储器1102。其中存储器1102存储有生成ota数据包的计算机指令,当所述计算机指令由处理器1101运行时,使得便电子设备1100执行根据前文结合图2至图4所描述的方法。例如,在一些实施例中,电子设备1100可以比对待升级固件的第一镜像和新固件的第二镜像在不同路径下的块粒度内容差异、确定第一镜像与第二镜像之间的差异部分的数据量、基于差异部分的数据量构建差分数据文件、基于差分数据文件生成ota数据包等等。基于此,通过电子设备1100可以依据小于文件粒度的块粒度来区分文件之间的差异并生成ota数据包,从而缩小ota数据包尺寸,降低其对空间的占用。需要说明的是,在该场景下,电子设备1100可以是编译服务器或者其他能够生成ota数据包的设备。113.在发明的另一方面中,电子设备1100的存储器1102存储有用于更新系统的计算机指令,当所述计算机指令由处理器1101运行时,使得便电子设备1100执行根据前文结合图5至图7所描述的方法。例如,在一些实施例中,电子设备1100可以获取待安装的ota数据包、在启用状态的第一系统空间中对ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的第二系统空间中、对不同系统空间进行快速对齐处理等等。基于此,通过电子设备1100可以利用小尺寸的ota数据包提高系统更新效率。需要说明的是,在该场景下,电子设备1100可以是词典笔或者其他支持双系统空间的设备。114.应当注意,尽管在上文详细描述中提及了设备的若干装置或子装置,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。115.申请文件中提及的动词“包括”、“包含”及其词形变化的使用不排除除了申请文件中记载的那些元素或步骤之外的元素或步骤的存在。元素前的冠词“一”或“一个”不排除多个这种元素的存在。116.虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。当前第1页12当前第1页12
技术特征:
1.一种生成ota数据包的方法,其特征在于,包括:响应于待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下,获取所述第一镜像和所述第二镜像在所述不同路径下的块粒度内容差异,其中所述待升级固件和所述新固件包含文件系统;基于所述块粒度内容差异,确定所述第一镜像与所述第二镜像之间的差异部分的数据量;基于所述差异部分的数据量,构建差分数据文件,其中所述差分数据文件中包含块粒度的所述差异部分;以及基于所述差分数据文件生成所述ota数据包。2.根据权利要求1所述的方法,其特征在于,构建差分数据文件包括:构建一空镜像文件,其中所述空镜像文件的大小为所述差异部分的数据量的大小;基于所述第一镜像和所述空镜像文件构建快照snapshot型虚拟设备;以及基于所述快照snapshot型虚拟设备实现所述差分数据文件的构建。3.根据权利要求2所述的方法,其特征在于,基于所述第一镜像和所述空镜像文件构建快照snapshot型虚拟设备包括:基于所述第一镜像构建所述快照snapshot型虚拟设备中的基础base层;以及基于所述空镜像文件构建所述快照snapshot型虚拟设备中的写时复制cow层。4.根据权利要求3所述的方法,其特征在于,基于所述快照snapshot型虚拟设备实现所述差分数据文件的构建包括:将块粒度的所述差异部分写入所述快照snapshot型虚拟设备中的写时复制cow层,使得所述空镜像文件中保存有块粒度的所述差异部分;以及基于保存有块粒度的所述差异部分的空镜像文件,确定所述差分数据文件。5.根据权利要求1~4中任意项所述的方法,其特征在于,基于所述差分数据文件生成所述ota数据包包括:获取所述待升级固件和所述新固件之间的无文件系统镜像和所述ota数据包所需的安装脚本;基于所述差分数据文件、所述无文件系统镜像和所述安装脚本,生成所述ota数据包。6.一种用于更新系统的方法,其特征在于,所述系统具备第一系统空间和第二系统空间,所述方法包括:获取待安装的ota数据包,其中所述ota数据包是基于差分数据包文件生成的,且所述差分数据文件中包含块粒度的差异部分,所述差异部分为待升级固件的第一镜像与新固件的第二镜像之间的差异部分;以及响应于所述第一系统空间处于启用状态,在所述第一系统空间中对所述ota数据包进行解压处理,并将解压后的ota数据包写入备份状态的所述第二系统空间中,以对所述第二系统空间进行更新。7.根据权利要求6所述的方法,其特征在于,其中所述ota数据包包括无文件系统镜像、安装脚本和所述差分数据包文件,所述方法具体包括:在所述第一系统空间中运行解压出的所述安装脚本,以将所述无文件系统镜像和所述差分数据包文件写入所述第二系统空间中。
8.根据权利要求7所述的方法,其特征在于,将所述差分数据包文件写入所述第二系统空间中包括:基于所述第二系统空间创建快照源类型的虚拟存储;基于所述第二系统空间和所述差分数据包文件创建快照合并类型的虚拟存储,其中所述第二系统空间为所述快照合并类型的虚拟存储中的基础base层,所述差分数据包文件为所述快照合并类型的虚拟存储中的写时复制cow层;以及基于合并操作将所述cow层中的差分数据包文件写入所述base层中,并无效所述cow层所存储的差分数据包文件。9.一种电子设备,其特征在于,包括:处理器;以及存储器,其存储有生成ota数据包的计算机指令或者用于更新系统的计算机指令,当所述计算机指令由所述处理器运行时,使得所述电子设备执行根据权利要求1-9的任意一项所述的方法。10.一种计算机可读存储介质,其特征在于,包含有生成ota数据包的程序指令或者用于更新系统的程序指令,当所述程序指令由处理器执行时,使得实现根据权利要求1-9的任意一项所述的方法。
技术总结
本发明的实施方式提供了一种生成OTA数据包的方法、用于更新系统的方法及相关产品。其中,所述生成OTA数据包的方法包括:响应于待升级固件的第一镜像和新固件的第二镜像挂载到服务器的不同路径下,获取第一镜像和第二镜像在所述不同路径下的块粒度内容差异,其中所述待升级固件和新固件包含文件系统;基于块粒度内容差异,确定第一镜像与第二镜像之间的差异部分的数据量;基于差异部分的数据量,构建差分数据文件,其中差分数据文件中包含块粒度的所述差异部分;以及基于差分数据文件生成OTA数据包。通过本发明的技术方案,可以突破传统以文件粒度生成OTA数据包的惯性思维,并且有效缩减OTA数据包尺寸,降低其对空间的占用。降低其对空间的占用。降低其对空间的占用。
技术研发人员:张睿博
受保护的技术使用者:网易有道(杭州)智能科技有限公司
技术研发日:2023.07.20
技术公布日:2023/10/19
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
航空商城 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/