热补丁技术介绍


热补丁

热补丁概述

热补丁是一种快速、低成本修复产品软件版本缺陷的方式。和升级软件版本相比,热补丁的主要优势是不会使设备当前正在运行的业务中断,即在不重启设备的情况下,可以对设备当前软件版本的缺陷进行修复。

热补丁实现原理

补丁的最小单元是函数,可以在系统运行时将某个函数替换为另一个函数。其过程如下:

图1 热补丁原理图 打补丁前

1所示,original function 为原函数;instruction 1instruction 2等为组成原函数的指令。在系统中original functioncaller调用。对Original Function打上热补丁的过程就是将Original Function中的Instruction 1(即第一条指令)替换掉的过程,如2所示。

图2 补丁原理图 打补丁后

2中的Patch Function为补丁函数。Original Function中的Instruction 1被替换成一条Jump指令,这条指令无条件跳转到Patch Function的起始地址,如2Jump箭头所示。打补丁后的实际效果相当于Caller直接调用了Patch Function,而不再执行Original Function函数,如3所示。

图3 补丁原理图 打补丁后实际效果

&  说明:

上文中Jump指令是对无条件跳转指令的统称,在某些平台上无条件跳转指令被称为Branch

 

热补丁基本概念

1. 补丁单元和补丁文件

打补丁的最小单元是函数,通常来说修复某个缺陷都会需要更换多个函数。把多个补丁函数组织起来,作为一个整体来发布,这个补丁函数的集合我们就称为补丁(Patch),或者补丁单元(Patch Unit)。

一个补丁中的所有补丁函数被当作一个整体来管理,各种操作均以补丁为单位,而无法对单个补丁函数来进行操作。

补丁均以补丁文件的形式发布,补丁文件是由一个或多个补丁单元构成的,每个补丁单元都有补丁单元号,用户使用补丁单元号来操作各补丁。补丁单元号从1开始。如某补丁文件中有3个补丁单元,那合法的补丁单元号为123

2. 内存补丁区

补丁文件中的补丁需要装入内存才能真正起作用。内存补丁区是系统在内存中开辟的一块空间,用于存储新的代码或数据。用户通过补丁加载操作来将补丁文件中的补丁加载到内存补丁区中。

3. 增量补丁

补丁文件中的补丁均为增量补丁。所谓增量补丁,是指各补丁单元对于在其前面的补丁单元有依赖性。也就是说,如果有3个补丁单元,3号补丁必须在1号和2号补丁生效之后才能激活,而不能直接单独激活3号补丁。

4. 正式补丁和临时补丁

补丁分为正式补丁和临时补丁两种:

l              正式补丁(Common patches)是通过版本发布流程发布的补丁。

l              临时补丁(Temporary patches)是未通过版本发布流程发布,用于临时解决紧急问题和需求的补丁。

正式补丁总会包含前面临时补丁的功能,从而替代前面的临时补丁。补丁的类型只对补丁加载(Load)过程产生影响——系统在加载正式补丁之前会先将系统中所有临时补丁删除。

补丁状态

每个补丁都有自身的状态,只有在用户命令行的干预下才能发生切换。补丁状态的切换与命令动作对应关系如4所示。

图4 补丁状态切换过程与命令动作对应关系

&  说明:

补丁文件的状态信息内容保存在Flash中的patchstate文件里,建议用户不要对该文件进行操作。

 

1. 初始状态(IDLE

表示该补丁尚未被加载,无法被激活、去激活或者运行,如5所示(假设系统补丁区中最多可以加载8个补丁)。

系统重启后,所有处于IDLE状态的补丁仍为IDLE状态。

图5 补丁未加载

&  说明:

当前系统补丁区中支持的最大补丁数为200个。

 

2. 未激活状态(DEACTIVE

表示补丁已经被加载到内存补丁区,但补丁中的函数尚未替换系统中原有函数运行。假设用户将加载的补丁文件包含7个补丁,则这7个补丁将在经过一定的版本校验及CRC校验之后被加载到内存补丁区,加载成功的补丁处于DEACTIVE状态,此时系统中补丁状态如6所示。

系统重启后,所有处于DEACTIVE状态的补丁仍为DEACTIVE状态。

图6 补丁文件被加载

3. 激活状态(ACTIVE

激活补丁是指将补丁中的所有函数替换系统中原有同名函数并运行,激活后补丁的状态转为ACTIVE状态。对于67个处于DEACTIVE态的补丁,用户如果激活前5个补丁后,前5个补丁的状态将由DEACTIVE态变成ACTIVE态,此时系统中补丁状态如7所示。

系统重启后,所有处于ACTIVE态的补丁将变成DEACTIVE态。

图7 补丁被激活

4. 确认运行状态(RUNNING

用户对ACTIVE状态的补丁执行确认运行操作后,补丁的状态将变为RUNNING

对于75个处于ACTIVE状态的补丁,用户确认运行前3个补丁后,前3个补丁的状态将由ACTIVE状态变成RUNNING状态,此时系统中补丁状态如8所示。

系统重启后,所有处于RUNNING状态的补丁将保持为RUNNING状态。

图8 补丁被确认运行

 

附件下载

不同款型规格的资料略有差异, 详细信息请向具体销售和800咨询。 H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!