CN114816482A - 块存储服务的升级方法、装置、计算机设备及存储介质 - Google Patents
块存储服务的升级方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN114816482A CN114816482A CN202210470871.4A CN202210470871A CN114816482A CN 114816482 A CN114816482 A CN 114816482A CN 202210470871 A CN202210470871 A CN 202210470871A CN 114816482 A CN114816482 A CN 114816482A
- Authority
- CN
- China
- Prior art keywords
- target
- function
- dynamic library
- address
- library file
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 203
- 230000008569 process Effects 0.000 claims abstract description 162
- 230000006870 function Effects 0.000 claims description 244
- 230000015654 memory Effects 0.000 claims description 26
- 238000013507 mapping Methods 0.000 claims description 14
- 230000005540 biological transmission Effects 0.000 claims description 8
- 238000004886 process control Methods 0.000 claims description 7
- 238000012545 processing Methods 0.000 claims description 7
- 238000004806 packaging method and process Methods 0.000 claims description 5
- 238000010586 diagram Methods 0.000 description 6
- 230000007547 defect Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种块存储服务的升级方法、装置、计算机设备及存储介质。块存储服务的升级方法包括:获取目标进程中动态库加载函数的入口地址,目标进程为待进行块存储服务升级的进程,动态库加载函数用于加载提供块存储服务的动态库文件。将读取的目标动态库文件通过入口地址注入至目标进程中,以加载目标动态库文件。基于目标动态库文件加载完成,利用目标动态库文件对块存储服务进行升级。通过本发明提供的块存储服务的升级方法,能够达到在线升级块存储服务的目的,进而有助于提升用户的使用体验。
Description
技术领域
本发明涉及数据存储技术领域,具体涉及一种块存储服务的升级方法、装置、计算机设备及存储介质。
背景技术
可靠的自主分布式对象存储块设备(Reliable Autonomic Distributed ObjectStore Block Device,RBD)简称块存储,是分布式文件***(ceph)中使用最广泛且最稳定的存储类型,可以理解为是一种块存储类型。
块存储用于为虚拟化、数据库等业务提供服务。例如:当为虚拟化业务提供服务时,可以用于为用户分配资源;当为数据库业务提供服务时,可以用于存储关键数据。在实际应用中,当块存储所提供的服务存在较大缺陷时,则需要对其进行升级处理,以改善缺陷。
相关技术中,对块存储服务进行升级处理时,需要用户将块存储所在的设备停机,进而采用离线处理的方式对块存储服务进行升级。但采用该种方式进行升级,会因块存储所在设备的停机而造成巨大损失。
发明内容
因此,本发明要解决的技术问题在于克服现有技术中采用离线处理的方式升级块存储服务容易造成巨大损失的缺陷,从而提供一种块存储服务的升级方法、装置、计算机设备及存储介质。
根据第一方面,本发明提供一种块存储服务的升级方法,所述方法包括:
获取目标进程中动态库加载函数的入口地址,所述目标进程为待进行块存储服务升级的进程,所述动态库加载函数用于加载提供块存储服务的动态库文件;
将读取的目标动态库文件通过所述入口地址注入至所述目标进程中,以加载所述目标动态库文件;
基于所述目标动态库文件加载完成,利用所述目标动态库文件对所述块存储服务进行升级。
在该方式中,能够在确定目标进程中动态库加载函数的入口地址的情况下,将目标动态库文件注入至目标进程中进行加载,以使目标进程能够利用新注入的目标动态库文件对块存储服务进行在线升级,进而达到在线升级的目的,从而有助于提升用户的使用体验。
结合第一方面,在第一方面的第一实施例中,所述将读取的目标动态库文件通过所述入口地址注入至所述目标进程中,包括:
获取所述目标进程的寄存器信息;
将所述目标动态库文件通过所述入口地址封装至所述寄存器信息中,以通过所述动态库加载函数将所述目标动态库文件进行加载。
结合第一方面的第一实施例,在第一方面的第二实施例中,所述获取所述目标进程的寄存器信息,包括:
调用进程控制函数捕捉所述目标进程;
若捕捉成功,则获取所述目标进程的寄存器信息。
结合第一方面,在第一方面的第三实施例中,所述基于所述目标动态库文件加载完成,利用所述目标动态库文件对所述块存储服务进行升级,包括:
基于所述目标动态库文件加载完成,将所述目标动态库文件与所述目标进程中的历史动态库文件进行对比,确定所述历史动态库文件与所述目标动态库文件共同包括的至少一个接口函数;
获取所述至少一个接口函数在所述目标动态库文件中的目标函数地址,以及所述至少一个接口函数在所述历史动态库文件中的历史函数地址;
使用所述目标函数地址替换所述历史函数地址;
控制所述目标进程根据所述目标函数地址调用所述目标动态库文件,对所述块存储服务进行升级。
结合第一方面的第三实施例,在第一方面的第四实施例中,所述获取所述至少一个接口函数在所述目标动态库文件中的目标函数地址,包括:
获取所述至少一个接口函数在所述目标动态库文件内的偏移地址;
将所述入口地址与所述偏移地址相加,得到所述至少一个接口函数在所述目标动态库文件中的目标函数地址。
结合第一方面,在第一方面的第五实施例中,所述获取目标进程中动态库加载函数的入口地址,包括:
获取所述动态库加载函数在函数库中的偏移量;
通过所述目标进程的函数库映射文件,确定所述函数库在所述目标进程中的起始地址,所述函数库用于提供所述动态库加载函数;
将所述起始地址与所述偏移量相加,得到所述动态库加载函数在所述目标进程中的入口地址。
结合第一方面的第五实施例,在第一方面的第六实施例中,所述获取所述动态库加载函数在函数库中的偏移量,包括:
通过预置的函数库映射文件,获取所述函数库的起始地址;
调用地址获取函数,确定所述动态库加载函数的存储地址;
将所述存储地址与所述起始地址相减,得到所述动态库加载函数在所述函数库中的偏移量。
根据第二方面,本发明还提供一种块存储服务的升级装置,所述装置包括:
获取单元,用于获取目标进程中动态库加载函数的入口地址,所述目标进程为待进行块存储服务升级的进程,所述动态库加载函数用于加载提供块存储服务的动态库文件;
传输单元,用于将读取的目标动态库文件通过所述入口地址注入至所述目标进程中,以加载所述目标动态库文件;
升级单元,用于基于所述目标动态库文件加载完成,利用所述目标动态库文件对所述块存储服务进行升级。
结合第二方面,在第二方面的第一实施例中,所述传输单元包括:
信息获取单元,用于获取所述目标进程的寄存器信息;
传输子单元,用于将所述目标动态库文件通过所述入口地址封装至所述寄存器信息中,以通过所述动态库加载函数将所述目标动态库文件进行加载。
结合第二方面的第一实施例,在第二方面的第二实施例中,所述信息获取单元包括:
调用单元,用于调用进程控制函数捕捉所述目标进程;
信息获取子单元,用于若捕捉成功,则获取所述目标进程的寄存器信息。
结合第二方面,在第二方面的第三实施例中,所述升级单元包括:
对比单元,用于基于所述目标动态库文件加载完成,将所述目标动态库文件与所述目标进程中的历史动态库文件进行对比,确定所述历史动态库文件与所述目标动态库文件共同包括的至少一个接口函数;
地址获取单元,用于获取所述至少一个接口函数在所述目标动态库文件中的目标函数地址,以及所述至少一个接口函数在所述历史动态库文件中的历史函数地址;
替换单元,用于使用所述目标函数地址替换所述历史函数地址;
升级子单元,用于控制所述目标进程根据所述目标函数地址调用所述目标动态库文件,对所述块存储服务进行升级。
结合第二方面的第三实施例,在第二方面的第四实施例中,所述地址获取单元包括:
第一地址获取单元,用于获取所述至少一个接口函数在所述目标动态库文件内的偏移地址;
第二地址获取单元,用于将所述入口地址与所述偏移地址相加,得到所述至少一个接口函数在所述目标动态库文件中的目标函数地址。
结合第二方面,在第二方面的第五实施例中,所述获取单元包括:
偏移量获取单元,用于获取所述动态库加载函数在函数库中的偏移量;
第一确定单元,用于通过所述目标进程的函数库映射文件,确定所述函数库在所述目标进程中的起始地址,所述函数库用于提供所述动态库加载函数;
获取子单元,用于将所述起始地址与所述偏移量相加,得到所述动态库加载函数在所述目标进程中的入口地址。
结合第二方面的第五实施例,在第二方面的第六实施例中,所述偏移量获取单元包括:
第三地址获取单元,用于通过预置的函数库映射文件,获取所述函数库的起始地址;
第二确定单元,用于调用地址获取函数,确定所述动态库加载函数的存储地址;
偏移量获取子单元,用于将所述存储地址与所述起始地址相减,得到所述动态库加载函数在所述函数库中的偏移量。
根据第三方面,本发明实施方式还提供一种计算机设备,包括存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面及其可选实施方式中任一项的块存储服务的升级方法。
根据第四方面,本发明实施方式还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行第一方面及其可选实施方式中任一项的块存储服务的升级方法。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据一示例性实施例提出的一种块存储服务的升级方法的流程图。
图2是根据一示例性实施例提出的一种块存储服务的升级方法的流程图。
图3是根据一示例性实施例提出的一种进程交互示意图。
图4是根据一示例性实施例提出的一种块存储服务的升级装置的结构框图。
图5是根据一示例性实施例提出的一种计算机设备的硬件结构示意图。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
相关技术中,对块存储服务进行升级处理时,需要用户将块存储所在的设备停机,进而采用离线处理的方式对块存储服务进行升级。但采用该种方式进行升级,会因块存储所在设备的停机而造成巨大损失。
为解决上述问题,本发明实施例中提供一种块存储服务的升级方法,用于计算机设备中,需要说明的是,其执行主体可以是块存储服务的升级装置,该装置可以通过软件、硬件或者软硬件结合的方式实现成为计算机设备的部分或者全部,其中,该计算机设备可以是终端或客户端或服务器,服务器可以是一台服务器,也可以为由多台服务器组成的服务器集群,本申请实施例中的终端可以是智能手机、个人电脑、平板电脑、可穿戴设备以及智能机器人等其他智能硬件设备。下述方法实施例中,均以执行主体是计算机设备为例来进行说明。
本实施例中的计算机设备是分布式文件***中的其中一个节点设备,能够与其他计算机设备共享分布式文件***的内存资源。在分布式文件***中,可以通过分布式块存储的方式,为各计算机设备提供块存储服务,以便各计算机设备能够与分布式文件***进行交互。在一例中,分布式文件***运行于linux平台。
通过本发明提供的块存储服务的升级方法,获取待进行块存储服务升级的进程中动态库加载函数的入口地址,其中,动态库加载函数是用于加载提供块存储服务的动态库文件的函数。进而采用在线升级的方式,将用于块存储服务升级的目标动态库文件注入至待进行块存储服务升级的进程中进行加载,以利用该目标动态库文件对所述块存储服务进行升级,从而无需关闭待进行块存储服务升级的进程所在的计算机设备便可以完成升级,有助于降低升级块存储服务所带来的损失的同时,有助于提升用户的使用体验。
以下为便于描述,将待进行块存储服务升级的进程采用目标进程进行代替。
图1是根据一示例性实施例提出的一种块存储服务的升级方法的流程图。如图1所示,块存储服务的升级方法包括如下步骤S101至步骤S103。
在步骤S101中,获取目标进程中动态库加载函数的入口地址。
在本发明实施例中,动态库加载函数用于加载提供块存储服务的动态库文件。为实现块存储服务的在线升级,则获取目标进程中动态库加载函数的入口地址,以便能够明确目标进程中用于加载动态库文件的位置,进而有助于后续将用于升级块存储服务的目标动态库文件注入至目标进程中能够被有效加载。
在一实施例中,获取目标进程中动态库加载函数在函数库中的偏移量。其中,函数库是分布式文件***中可进行函数共享的函数库,能够提供动态库加载函数。通过获取偏移量,有助于确定目标进程中动态库加载函数在函数库中的地址偏移。通过目标进程的函数库映射文件,确定函数库在目标进程中的起始地址,进而将起始地址与偏移量相加,便可以得到动态库加载函数在目标进程中的入口地址。
在一示例中,在分布式文件***的所有进程中,动态库加载函数在函数库中的偏移量为固定值。因此,为获取动态库加载函数在函数库中的偏移量,则可以基于动态库加载函数在其他进程中的地址进行获取。通过其他进程的预置的函数库映射文件,获取函数库在该函数库映射文件中的地址。通过调用地址获取函数,确定动态库加载函数在该其他进程中的存储地址,进而存储地址与起始地址相减,便可以得到动态库加载函数在函数库中的偏移量。
在一实施场景中,其他进程可以通过调用getpid()(一种用于获取进程识别码的函数)获取该其他进程的进程识别码,进而在分布式文件***中得到该其他进程的预置的函数库映射文件(maps文件),通过maps文件/proc/[pid]/maps进行解析,根据用于表示函数库(libc.so)的起始字段(r-xp)和最终结束字段(libc-*)的行,得到表示函数库的起始字段,即,得到函数库的起始地址。在其他进程中调用地址获取函数(dlsym())得到动态库加载函数(__libc_dlopen_mode)在该其他进程中的存储地址,进而将存储地址与起始地址进行相减,得到动态库加载函数在函数库中的偏移量。
在步骤S102中,将读取的目标动态库文件通过入口地址注入至目标进程中,以加载目标动态库文件。
在本发明实施例中,目标动态库文件是用于升级目标进程的块存储服务的动态库文件。将读取的目标动态库文件通过入口地址注入至目标进程中,以便目标进程能够得到该目标动态库文件进行加载,以实现块存储服务的升级。
在一实施例中,为便于目标动态库文件能够通过入口地址注入至目标进程,则将目标进程的寄存器信息进行获取,进而将目标动态库文件通过入口地址封装至寄存器信息中,以通过动态库加载函数对其进行加载,从而使目标进程得到该目标动态库文件。
在一示例中,可以通过调用进程控制函数,捕捉目标进程,进而在捕捉成功的情况下获取目标进程的寄存器信息。
在一实施场景中,进程控制函数可以是ptrace***函数。其中,ptrace***函数是一种能够提供使父进程监视和控制其它进程,并改变子进程中的寄存器信息和内存映像的***函数。通过调用ptrace***函数捕捉(attach)目标进程,进而在确定捕捉成功的情况下,中断目标进程的运行,获取目标进程的寄存器信息。在一例中,可以通过查看分布式文件***中的头文件(/usr/include/sys/user.h)中使用区域结构体(user_regs_struct),确定目标进程的寄存器组中每一个寄存器的值,进而得到目标进程的寄存器信息。在另一例中,为便于目标进程能够根据目标动态库文件将块存储服务进行顺利升级,则将得到寄存器信息进行备份,以便通过备份的寄存器信息确定待升级的接口函数,进而提高对块存储服务进行升级的准确度。
在步骤S103中,基于目标动态库文件加载完成,利用目标动态库文件对块存储服务进行升级。
在本发明实施例中,在确定目标动态库文件已加载完成的情况下,利用目标动态库文件对块存储服务进行升级,进而达到在线升级的目的。
通过上述实施例,能够在确定目标进程中动态库加载函数的入口地址的情况下,将目标动态库文件注入至目标进程中进行加载,以使目标进程能够利用新注入的目标动态库文件对块存储服务进行在线升级,进而达到在线升级的目的,从而有助于提升用户的使用体验。
以下实施例将具体说明利用目标动态库文件对块存储服务进行升级的过程。
图2是根据一示例性实施例提出的另一种块存储服务的升级方法的流程图。
在步骤S201中,基于目标动态库文件加载完成,将目标动态库文件与目标进程中的历史动态库文件进行对比,确定历史动态库文件与目标动态库文件共同包括的至少一个接口函数。
在本发明实施例中,历史动态库文件待进行升级且为目标进程提供块存储服务的动态库文件。当确定目标进程加载完目标动态库文件后,则将目标动态库文件与目标进程中的历史动态库文件进行对比,确定历史动态库文件与目标动态库文件共同包括的至少一个接口函数,以便将目标动态库文件中与目标动态库文件相同的接口函数进行替换,进而实现块存储服务的在线升级。
在一实施场景中,动态库文件中的动态符号表(.dynsym)用于存放有动态库的动态链接符号。因此,将目标动态文件库与历史动态文件库进行对比,并通过动态库文件中的重定位(.rela.plt)字段,便可以确定接口函数的地址,进而将目标动态文件库中与历史动态文件进行对比,便可以确定出共同包括的至少一个接口函数。其中,重定位(.rela.plt)字段中包括进程在运行过程中需要通过延迟绑定技术动态解析的函数符号。
在步骤S202中,获取至少一个接口函数在目标动态库文件中的目标函数地址,以及至少一个接口函数在历史动态库文件中的历史函数地址。
在本发明实施例中,历史动态库文件与目标动态库文件共同包括的接口函数数量至少为一个。为便于将目标动态库文件和历史动态库文件中相同的接口函数进行替换,则分别获取该部分接口函数在目标动态库文件中的目标函数地址以及在历史动态库文件中的历史函数地址。
在一示例中,接口函数在目标动态库文件中的目标函数地址中,是该接口函数在目标动态库文件内的偏移地址与动态库加载函数的入口地址之间的相加和。
在一实施场景中,.dynsym段的结构体类型(sh_type)的定义是动态链接信息,通过sh_type查找可以定位到目标动态库文件中的.dynsym段,进而可以得到用于进行替换的接口函数对应的结构体地址(Elf_Sym)。通过该结构体地址中的对齐字节数(st_value),便可以得到用于进行替换的接口函数在目标动态库文件中的偏移地址。
在另一实施场景中,历史动态库文件中的rela.plt段中记录着替换函数符号在全局偏移表(GOT)表中的地址,我们可以通过类型定义(SHT_REL)定义到待进行替换的接口函数的偏移地址。
在步骤S203中,使用目标函数地址替换历史函数地址。
在本发明实施例中,通过进程控制函数将历史函数地址替换成目标函数地址,进而后续目标进程运行时便可以采用替换后的目标函数地址调用对应的接口函数。
在一例中,为便于获取该部分接口函数在目标动态库文件中的目标函数地址和在历史动态库文件中的历史函数地址,则将该部分接口函数采用函数列表的方式进行表示,根据函数列表中各接口函数的先后顺序,将每一个接口函数的历史函数地址替换成目标函数地址。
在步骤S204中,控制目标进程根据目标函数地址调用目标动态库文件,对块存储服务进行升级。
通过上述实施例,通过确定历史动态库文件与目标动态库文件共同包括的至少一个接口函数,以及每一个接口函数在历史动态库文件的历史函数地址和目标动态库文件的目标函数地址,进而便可以采用热替换的方式,将每一个接口函数的历史函数地址替换成目标函数地址,从而无需终断目标进程便可以达到升级块存储服务的目的,有助于提升用户的使用体验。
在一实施场景中,其他进程可以是升级进程,即,一种用于辅助目标进程升级块存储服务的进程。当升级进程通过调用ptrace***函数捕捉到目标进程后,获取目标进程的寄存器信息,将目标进程的寄存器信息(%RIP)指向动态库加载函数,将读取的目标动态文件的名称的字符串放入堆栈,将该字符串的入口地址写入寄存器信息中,将加载动态库的***情况(RTLD_NOW)的值写入背离指标(%rsi)作为动态库加载函数的标记(flag)。同时将动态库加载函数的返回地址设置为非法地址0x0(例如:把0x0压入栈中),以便暂停对目标进程的控制。当通过数据加载工具(例如:Loader)捕获目标进程产生的加载已完成的信号(SIGSEGV)时,则可以确定目标进程已加载完目标动态库文件。
在另一实施场景中,通过升级进程为目标进程升级块存储服务的交互过程可以如图3所示。图3是根据一示例性实施例提出的一种进程交互示意图。
在升级进程中,根据升级进程的函数库映射文件和目标进程的函数库映射文件,分别获取升级进程中函数库的起始地址以及动态库加载函数的存储地址,以及目标进程中函数库的起始地址。将升级进程中动态库加载函数的存储地址与升级进程中函数库的起始地址相减,得到动态库加载函数在函数库中的偏移量,进而根据该偏移量与目标进程中函数库的起始地址之和,得到目标进程中动态库加载函数的入口地址。
调用ptrace***函数抓取目标进程,获取目标进程的寄存器信息,并中断目标进程的运行状态,由升级进程控制目标进程。将目标动态库文件通过入口地址封装至寄存器信息中,以将目标动态库文件加载至目标进程,同时暂停对目标进程的控制。通过ptrace***函数控制目标进程加载目标动态库文件。当目标进程加载完目标动态库文件后,则产生加载已完成的信号。当升级进程捕获到该信号时,则重新控制目标进程。确定目标动态库文件中与历史动态库文件共同包括的至少一个接口函数,并将该部分接口函数在历史动态库文件中的历史函数地址替换成目标函数地址。根据备份的寄存器信息确定目标进程中断前的运行状态,并恢复目标进程的运行,释放对目标进程的控制,以使目标进程在运行的过程中能够完成对块存储服务的在线升级。
基于相同发明构思,本发明还提供一种块存储服务的升级装置。
图4是根据一示例性实施例提出的一种块存储服务的升级装置的结构框图。如图4所示,块存储服务的升级装置包括获取单元401、传输单元402和升级单元403。
获取单元401,用于获取目标进程中动态库加载函数的入口地址,目标进程为待进行块存储服务升级的进程,动态库加载函数用于加载提供块存储服务的动态库文件;
传输单元402,用于将读取的目标动态库文件通过入口地址注入至目标进程中,以加载目标动态库文件;
升级单元403,用于基于目标动态库文件加载完成,利用目标动态库文件对块存储服务进行升级。
在一实施例中,传输单元402包括:信息获取单元,用于获取目标进程的寄存器信息。传输子单元,用于将目标动态库文件通过入口地址封装至寄存器信息中,以通过动态库加载函数将目标动态库文件进行加载。
在另一实施例中,信息获取单元包括:调用单元,用于调用进程控制函数捕捉目标进程。信息获取子单元,用于若捕捉成功,则获取目标进程的寄存器信息。
在又一实施例中,升级单元403包括:对比单元,用于基于目标动态库文件加载完成,将目标动态库文件与目标进程中的历史动态库文件进行对比,确定历史动态库文件与目标动态库文件共同包括的至少一个接口函数。地址获取单元,用于获取至少一个接口函数在目标动态库文件中的目标函数地址,以及至少一个接口函数在历史动态库文件中的历史函数地址。替换单元,用于使用目标函数地址替换历史函数地址。升级子单元,用于控制目标进程根据目标函数地址调用目标动态库文件,对块存储服务进行升级。
在又一实施例中,地址获取单元包括:第一地址获取单元,用于获取至少一个接口函数在目标动态库文件内的偏移地址。第二地址获取单元,用于将入口地址与偏移地址相加,得到至少一个接口函数在目标动态库文件中的目标函数地址。
在又一实施例中,获取单元401包括:偏移量获取单元,用于获取动态库加载函数在函数库中的偏移量。第一确定单元,用于通过目标进程的函数库映射文件,确定函数库在目标进程中的起始地址,函数库用于提供动态库加载函数。获取子单元,用于将起始地址与偏移量相加,得到动态库加载函数在目标进程中的入口地址。
在又一实施例中,偏移量获取单元包括:第三地址获取单元,用于通过预置的函数库映射文件,获取函数库的起始地址。第二确定单元,用于调用地址获取函数,确定动态库加载函数存储地址。偏移量获取子单元,用于将存储地址与函数库的起始地址相减,得到动态库加载函数在函数库中的偏移量。
上述块存储服务的升级装置的具体限定以及有益效果可以参见上文中对于块存储服务的升级方法的限定,在此不再赘述。上述各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
图5是根据一示例性实施例提出的一种计算机设备的硬件结构示意图。如图5所示,该设备包括一个或多个处理器510以及存储器520,存储器520包括持久内存、易失内存和硬盘,图5中以一个处理器510为例。该设备还可以包括:输入装置530和输出装置540。
处理器510、存储器520、输入装置530和输出装置540可以通过总线或者其他方式连接,图5中以通过总线连接为例。
处理器510可以为中央处理器(Central Processing Unit,CPU)。处理器510还可以为其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器520作为一种非暂态计算机可读存储介质,包括持久内存、易失内存和硬盘,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本申请实施例中的业务管理方法对应的程序指令/模块。处理器510通过运行存储在存储器520中的非暂态软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述任意一种块存储服务的升级方法。
存储器520可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储根据、需要使用的数据等。此外,存储器520可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器520可选包括相对于处理器510远程设置的存储器,这些远程存储器可以通过网络连接至数据处理装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置530可接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键信号输入。输出装置540可包括显示屏等显示设备。
一个或者多个模块存储在存储器520中,当被一个或者多个处理器510执行时,执行如图1-图3所示的方法。
上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,具体可参见如图1-图3所示的实施例中的相关描述。
本发明实施例还提供了一种非暂态计算机存储介质,计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的认证方法。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)、随机存储记忆体(RandomAccess Memory,RAM)、快闪存储器(Flash Memory)、硬盘(Hard Disk Drive,缩写:HDD)或固态硬盘(Solid-State Drive,SSD)等;存储介质还可以包括上述种类的存储器的组合。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。
Claims (10)
1.一种块存储服务的升级方法,其特征在于,所述方法包括:
获取目标进程中动态库加载函数的入口地址,所述目标进程为待进行块存储服务升级的进程,所述动态库加载函数用于加载提供块存储服务的动态库文件;
将读取的目标动态库文件通过所述入口地址注入至所述目标进程中,以加载所述目标动态库文件;
基于所述目标动态库文件加载完成,利用所述目标动态库文件对所述块存储服务进行升级。
2.根据权利要求1所述的方法,其特征在于,所述将读取的目标动态库文件通过所述入口地址注入至所述目标进程中,包括:
获取所述目标进程的寄存器信息;
将所述目标动态库文件通过所述入口地址封装至所述寄存器信息中,以通过所述动态库加载函数将所述目标动态库文件进行加载。
3.根据权利要求2所述的方法,其特征在于,所述获取所述目标进程的寄存器信息,包括:
调用进程控制函数捕捉所述目标进程;
若捕捉成功,则获取所述目标进程的寄存器信息。
4.根据权利要求1所述的方法,其特征在于,所述基于所述目标动态库文件加载完成,利用所述目标动态库文件对所述块存储服务进行升级,包括:
基于所述目标动态库文件加载完成,将所述目标动态库文件与所述目标进程中的历史动态库文件进行对比,确定所述历史动态库文件与所述目标动态库文件共同包括的至少一个接口函数;
获取所述至少一个接口函数在所述目标动态库文件中的目标函数地址,以及所述至少一个接口函数在所述历史动态库文件中的历史函数地址;
使用所述目标函数地址替换所述历史函数地址;
控制所述目标进程根据所述目标函数地址调用所述目标动态库文件,对所述块存储服务进行升级。
5.根据权利要求4所述的方法,其特征在于,所述获取所述至少一个接口函数在所述目标动态库文件中的目标函数地址,包括:
获取所述至少一个接口函数在所述目标动态库文件内的偏移地址;
将所述入口地址与所述偏移地址相加,得到所述至少一个接口函数在所述目标动态库文件中的目标函数地址。
6.根据权利要求1所述的方法,其特征在于,所述获取目标进程中动态库加载函数的入口地址,包括:
获取所述动态库加载函数在函数库中的偏移量;
通过所述目标进程的函数库映射文件,确定所述函数库在所述目标进程中的起始地址,所述函数库用于提供所述动态库加载函数;
将所述起始地址与所述偏移量相加,得到所述动态库加载函数在所述目标进程中的入口地址。
7.根据权利要求6所述的方法,其特征在于,所述获取所述动态库加载函数在函数库中的偏移量,包括:
通过预置的函数库映射文件,获取所述函数库的起始地址;
调用地址获取函数,确定所述动态库加载函数的存储地址;
将所述存储地址与所述起始地址相减,得到所述动态库加载函数在所述函数库中的偏移量。
8.一种块存储服务的升级装置,其特征在于,所述装置包括:
获取单元,用于获取目标进程中动态库加载函数的入口地址,所述目标进程为待进行块存储服务升级的进程,所述动态库加载函数用于加载提供块存储服务的动态库文件;
传输单元,用于将读取的目标动态库文件通过所述入口地址注入至所述目标进程中,以加载所述目标动态库文件;
升级单元,用于基于所述目标动态库文件加载完成,利用所述目标动态库文件对所述块存储服务进行升级。
9.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1-7中任一项所述的块存储服务的升级方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机执行权利要求1-7中任一项所述的块存储服务的升级方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210470871.4A CN114816482A (zh) | 2022-04-28 | 2022-04-28 | 块存储服务的升级方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210470871.4A CN114816482A (zh) | 2022-04-28 | 2022-04-28 | 块存储服务的升级方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114816482A true CN114816482A (zh) | 2022-07-29 |
Family
ID=82510279
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210470871.4A Pending CN114816482A (zh) | 2022-04-28 | 2022-04-28 | 块存储服务的升级方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114816482A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115640037A (zh) * | 2022-09-09 | 2023-01-24 | 北京畅游创想软件技术有限公司 | 程序更新方法和装置 |
-
2022
- 2022-04-28 CN CN202210470871.4A patent/CN114816482A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115640037A (zh) * | 2022-09-09 | 2023-01-24 | 北京畅游创想软件技术有限公司 | 程序更新方法和装置 |
CN115640037B (zh) * | 2022-09-09 | 2023-08-11 | 北京畅游创想软件技术有限公司 | 程序更新方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107832100B (zh) | 一种apk插件的加载方法及其终端 | |
CN109951547B (zh) | 事务请求并行处理方法、装置、设备和介质 | |
CN108536745B (zh) | 基于Shell的数据表提取方法、终端、设备及存储介质 | |
US9516094B2 (en) | Event-responsive download of portions of streamed applications | |
US10075477B2 (en) | Method, system and server for self-healing of electronic apparatus | |
US9996379B2 (en) | Program execution without the use of bytecode modification or injection | |
CN110162344B (zh) | 一种隔离限流的方法、装置、计算机设备及可读存储介质 | |
CN110765394A (zh) | so文件加载方法、装置、存储介质及终端设备 | |
CN114816482A (zh) | 块存储服务的升级方法、装置、计算机设备及存储介质 | |
CN111200744B (zh) | 一种多媒体播放控制方法、装置及智能设备 | |
CN111294377B (zh) | 一种依赖关系的网络请求发送方法、终端装置及存储介质 | |
CN109032612B (zh) | 混合型应用的接口调用方法、装置及计算机可读存储介质 | |
CN112214250A (zh) | 一种应用程序组件的加载方法和装置 | |
CN109298928B (zh) | 业务的处理方法及装置 | |
CN111127601A (zh) | 一种动画切换方法、装置、电子设备及存储介质 | |
CN107621939B (zh) | 一种应用优化方法及装置 | |
CN112379973B (zh) | 重载方法和装置 | |
CN114553859A (zh) | 一种bmc配置管理方法、装置、电子设备及存储介质 | |
CN114489698A (zh) | 应用程序安装方法和装置 | |
CN113282363A (zh) | 一种优化混合app的方法及装置 | |
CN109101253B (zh) | 云计算***中主机的管理方法和装置 | |
CN108345461B (zh) | 应用更新方法和装置以及计算机可读存储介质 | |
CN112612531A (zh) | 应用程序启动方法、装置、电子设备及存储介质 | |
CN113645064B (zh) | 任务下发方法、装置、电子设备及存储介质 | |
CN115484149B (zh) | 网络切换方法、网络切换装置、电子设备及存储介质 |
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 |