插入磁盘的方法、装置和系统与流程

文档序号:11917822阅读:363来源:国知局
插入磁盘的方法、装置和系统与流程

本申请涉及计算机技术领域,具体涉及虚拟机技术领域,尤其涉及插入磁盘的方法、装置和系统。



背景技术:

由于可以通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,虚拟机(Virtual Machine)具有占用硬件资源较少等优势被广泛应用于计算机领域。在QEMU-KVM(Quick Emulator-Kernel-basedVirtual Machine,快速仿真-基于内核的虚拟机)等虚拟机的使用中,磁盘的设备名往往按照以26个英文字母为依据的26进制数顺次进行命名(如vda、vdb……vdz,vdaa,vdab……),并且每个磁盘创建或插入时通常被分配首个未被占用的设备名。如果虚拟机动态创建、删除多个磁盘,一旦创建和删除的次序没有按照相同的对应关系(如对较先创建的磁盘进行了热插拔操作等),则会造成盘符漂移,即已被分配过设备名的磁盘再次使用时被分配了另外的设备名。

现有的解决盘符漂移的方法通常包括:磁盘数量小于等于2时区分磁盘类型、区分磁盘大小、严格按照磁盘使用顺序创建和删除磁盘,这些方法有的限制磁盘数量,有的限制磁盘大小,有的限制磁盘使用顺序,缺乏便利性。现有技术存在的缺陷是:通过对使用过程做出限制,解决磁盘漂移问题的有效性不高。



技术实现要素:

本申请的目的在于提出一种改进的插入磁盘的方法和装置,来解决以上背景技术部分提到的技术问题。

一方面,本申请提供了一种插入磁盘的方法,该方法包括:检测待插入磁盘是否具有盘符标识,其中,盘符标识由服务器通过以下方法获得:获取该磁盘的通用唯一标识码,查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系,响应于查询到待插入磁盘的磁盘通用唯一标识码与被分配的设备名的对应关系,获取该磁盘的设备名,对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识;响应于检测到该磁盘标识,获取上述盘符值;判断该盘符值所关联的设备名是否被分配给其他磁盘;若没有被分配给其他磁盘,根据该盘符值确定该磁盘的设备名以插入该磁盘。

在一些实施例中,上述方法还包括:响应于未检测到上述盘符标识,根据未被占用的设备名称确定该磁盘的设备名以插入该磁盘。

在一些实施例中,所述根据未被占用的设备名确定该磁盘的设备名以插入该磁盘包括:依次检测分配位图中各个位上的值是否为预设数值,其中,分配位图用于记录当前时间各个盘符值所关联的设备名的占用状态,分配位图中,所关联的设备名被占用的盘符值所对应的位上的值被设为预设数值;将检测到的首个值未被设为预设数值的位所对应的盘符值所关联的设备名确定为该磁盘的设备名以插入该磁盘。

在一些实施例中,上述盘符标识包括预先指定的标志位上的预设值。

在一些实施例中,判断该盘符值所关联的设备名是否被分配给其他磁盘包括:判断上述盘符值在设备名分配位图中所对应的位上的值是否为预设数值,其中,分配位图用于记录当前时间各个盘符值所关联的设备名的占用状态,分配位图中,所关联的设备名被占用的盘符值所对应的位上的值被设为预设数值;若是,确定上述盘符值所关联的设备名被分配给其他磁盘;否则,确定上述盘符值所关联的设备名未被分配给其他磁盘。

在一些实施例中,上述方法还包括:若所提取的盘符值已被分配给其他磁盘,确定该磁盘插入失败。

第二方面,本申请还提供一种插入磁盘的方法,该方法包括:获取待插入磁盘的通用唯一标识码;根据该磁盘的通用唯一标识码查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系;响应于查询到该磁盘的通用唯一标识码与所分配的设备名的对应关系,获取该磁盘的设备名;对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识,以供虚拟机:对盘符标识进行检测,响应于检测到磁盘标识,获取上述盘符值,判断上述盘符值所关联的设备名是否被分配给其他磁盘,若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入磁盘。

在一些实施例中,各磁盘首次被分配设备名的方法包括:检测待分配磁盘是否被指定设备名;若是,将所指定的设备名分配给待分配磁盘,否则,按设备名命名顺序将首个未被分配的设备名分配给待分配磁盘。

第三方面,本申请提供了一种插入磁盘的装置,该装置包括:检测模块,配置用于检测待插入磁盘是否具有盘符标识,其中,盘符标识由服务器通过以下方法获得:获取该磁盘的通用唯一标识码,查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系,响应于查询到待插入磁盘的磁盘通用唯一标识码与被分配的设备名的对应关系,获取该磁盘的设备名,对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识;获取模块,配置用于响应于检测到上述磁盘标识,获取上述盘符值;判断模块,配置用于判断上述盘符值所关联的设备名是否被分配给其他磁盘;确定模块,配置用于若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入该磁盘。

在一些实施例中,上述装置还包括:兼容模块,配置用于响应于未检测到上述盘符标识,根据未被占用的设备名称确定该磁盘的设备名以插入该磁盘。

在一些实施例中,上述兼容模块包括:检测单元,配置用于依次检测分配位图中各个位上的值是否为预设数值,其中,分配位图用于记录当前时间各个盘符值所关联的设备名的占用状态,分配位图中,所关联的设备名被占用的盘符值所对应的位上的值被设为预设数值;确定单元,配置用于将检测到的首个值未被设为预设数值的位所对应的盘符值所关联的设备名确定为该磁盘的设备名以插入该磁盘。

在一些实施例中,上述盘符标识包括预先指定的标志位上的预设值。

在一些实施例中,判断模块进一步配置用于:判断盘符值在设备名分配位图中所对应的位的值是否为预设数值,其中,分配位图用于记录当前时间各个盘符值所关联的设备名的占用状态,分配位图中,所关联的设备名被占用的盘符值所对应的位上的值被设为预设数值;若是,确定上述盘符值所关联的设备名被分配给其他磁盘;否则,确定上述盘符值所关联的设备名未被分配给其他磁盘。

在一些实施例中,上述装置还包括报错模块,配置用于:若所提取的盘符值已被分配给其他磁盘,确定该磁盘插入失败。

第四方面,本申请还提供了一种插入磁盘的装置,该装置包括:获取模块,配置用于获取待插入磁盘的通用唯一标识码;查询模块,配置用于根据待插入磁盘的通用唯一标识码查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系;传递模块,配置用于响应于查询到该磁盘的设备名,获取该磁盘的设备名;生成模块,配置用于对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识,以供虚拟机:对盘符标识进行检测,响应于检测到上述磁盘标识,获取上述盘符值,判断上述盘符值所关联的设备名是否被分配给其他磁盘,若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入该磁盘。

在一些实施例中,上述装置还包括检测模块,该检测模块包括:检测单元,配置用于检测该磁盘是否被指定设备名;分配单元,配置用于若该磁盘被指定设备名,将所指定的设备名分配给该磁盘,否则,按设备名命名顺序将首个未被分配的设备名分配给该磁盘。

第五方面,本申请还提供了一种插入磁盘的系统,包括用于管理虚拟机的服务器和可运行虚拟机的终端,其中,服务器配置用于:获取待插入磁盘的通用唯一标识码;根据该磁盘的通用唯一标识码查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系;查询到该磁盘的磁盘通用唯一标识码与所分配的设备名的对应关系,获取该磁盘的设备名;对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识;终端上运行的虚拟机配置用于:对盘符标识进行检测,响应于检测到上述磁盘标识,获取上述盘符值,判断上述盘符值所关联的设备名是否被分配给其他磁盘,若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入该磁盘。

本申请提供的插入磁盘的方法、装置和系统,通过服务器获取待插入磁盘的通用唯一标识码,接着查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系,然后响应于查询到该磁盘的磁盘通用唯一标识码与所分配的设备名的对应关系,获取该磁盘的设备名,对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识,接着通过终端对盘符标识进行检测,响应于检测到上述磁盘标识,获取上述盘符值,判断上述盘符值所关联的设备名是否被分配给其他磁盘,若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入该磁盘。由于引入磁盘标识,根据磁盘标识和盘符值确定磁盘的设备名,从而保证每个磁盘使用在创建时生成的设备名,可以有效避免盘符漂移。

附图说明

通过阅读参照以下附图所作的对非限制性实施例的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1示出了可以应用本申请实施例的示例性系统架构;

图2是根据本申请的插入磁盘的方法的一个实施例的流程图;

图3是根据本申请的插入磁盘的方法另一个实施例的流程图;

图4是根据本申请的插入磁盘的方法的一个应用场景的示意图;

图5是根据本申请的插入磁盘的装置的一个实施例的结构示意图;

图6是根据本申请的插入磁盘的装置的另一个实施例的结构示意图。

具体实施方式

下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。

需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。

图1示出了可以应用本申请实施例的示例性系统架构100。

如图1所示,系统架构100可以包括终端设备101、102和服务器104。网络103用以在终端设备101、102和服务器104之间提供通信链路的介质。网络103可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

终端设备101、102可以通过网络103与服务器104交互,以接收或发送消息等。终端设备101、102上可以安装有虚拟机,也可以安装有各种通讯客户端应用(例如杀毒类应用、搜索类应用、社交平台应用、邮箱客户端、即时通信工具等)。

在本申请的插入磁盘的方法中,终端设备101、102可以是支持虚拟机安装于其上的各种电子设备,包括但不限于以下至少一种:物理机、台式计算机、膝上型便携计算机、平板电脑和智能手机等等。

终端设备101、102上安装或运行的虚拟机可以与服务器104交互,以接收或发送消息等。终端设备101、102上安装或运行的虚拟机分别可以创建或插入至少一个磁盘。每个虚拟机上可以安装有至少一个操作系统,如Linux操作系统、Windows操作系统等。虚拟机上安装的操作系统可以具有内核(可用于管理操作系统的进程、内存、设备驱动程序、文件和网络系统等),如Kernel等,其中,内核Kernel可以通过前端驱动模块virtio-blk等对创建或插入的磁盘进行处理。

服务器104可以是提供虚拟化管理的各种服务器。例如服务器104可以是对终端设备101、102上运行的虚拟机及虚拟机上创建或插入的磁盘提供管理服务的服务器,如OpenStack云计算管理平台,其可以包括虚拟化管理模块Nova或Cinder,用于管理网络和存储。

特别地,服务器104上也可以运行有虚拟机。此时,该示例性架构100也可能仅包括服务器104。

需要说明的是,本申请实施例所提供的插入磁盘的方法可以通过虚拟机运行于其上的终端设备101、102执行,也可以通过服务器104执行。相应地,本申请实施例所提供的插入磁盘的装置可以设于终端设备101、102或服务器104上运行的虚拟机中。本申请实施例所提供的插入磁盘的系统可以包括服务器104和终端设备101、102等。

应该理解,图1中的终端设备和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备和服务器。

请参考图2,其示出了插入磁盘的方法的一个实施例的流程200。本实施例主要以该方法应用于可以运行虚拟机的终端(例如图1中的终端设备101、102等)中来举例说明。该插入磁盘的方法,包括以下步骤:

步骤201,检测待插入磁盘是否具有盘符标识。

在本实施例中,当有磁盘插入终端上运行的虚拟机时,终端上运行的虚拟机可以对待插入磁盘进行检测以判断磁盘是否具有盘符标识。虚拟机可以根据对待插入磁盘的盘符标识检测结果确定磁盘的设备名。其中,盘符标识可以由服务器通过以下方法获得:获取该磁盘的通用唯一标识码,查询磁盘通用唯一标识码与设备名的对应关系以获取待插入磁盘的设备名,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系,响应于查询到待插入磁盘的磁盘通用唯一标识码与被分配的设备名的对应关系,对所分配的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识。

这里,盘符标识可以用于标志磁盘是否被分配过设备名。盘符标识可以通过字母或数字等字符表示。电子设备可以通过对盘符标识进行检测,以判断待插入磁盘是否具有盘符标识。在一些实现中,盘符标识可以包括预先指定的标志位上的预设值,例如预先指定的标志位被置位,其值为预设值1。此时,电子设备对待插入磁盘是否具有盘符标识的检测可以是:读取该预先指定的标志位的值,判断该值是否预设值(如1),若是,确定待插入磁盘具有盘符标识,否则,确定待插入磁盘不具有盘符标识。

其中,虚拟机中有待插入磁盘插入时,虚拟机可以通过其所运行的终端将待插入磁盘的通用唯一标识码(Universally Unique Identifier,UUID)发送至服务器,以供服务器根据待插入磁盘的UUID查询磁盘通用唯一标识码与设备名的对应关系。这里,磁盘通用唯一标识码与设备名的对应关系可以通过列表、表格等形式保存在服务器上,例如可以是存储在Nova模块或Cinder模块中的UUID与设备名列表等。进一步地,服务器可以根据待插入磁盘的UUID查询磁盘通用唯一标识码与设备名的对应关系,如果查询到待插入磁盘的磁盘通用唯一标识码与被分配的设备名的对应关系,获取待插入磁盘的设备名。例如服务器可以调用支持Linux下主流虚拟化工具的封装函数库libvirt的serial字段获取设备名,并传递给模拟处理器QEMU。接着,服务器可以对所获取的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识并发送至虚拟机。例如,模拟处理器QEMU可以通过虚拟机为待插入磁盘提供的交互模块(如struct virtio_blk_config结构体)与虚拟机的前端驱动模块virtio-blk进行磁盘信息交互,模拟处理器QEMU可以通过上述交互模块设置盘符标识,并将对设备名进行计算得到的磁盘的盘符值通过上述交互模块发送给虚拟机。在一些实现中,服务器可以将交互模块中一个预先指定的标志位置位(如该位的值被修改为1),即生成了盘符标识,同时将盘符值传入上述交互模块的预设字段。

在本实施例中,盘符值可以是与磁盘的设备名相关联的一个数值,用于传递和识别设备名的数值。盘符值可以通过各种预设的规则进行计算,以使各个磁盘的盘符值与服务器分配的设备名一一对应。在一些实现中,设备名按照26个英文字母命名,如vda、vdb……vdz,vdaa,vdab……等等,服务器可以按照该设备名序列中的序号对设备名按照十六进制数计数作为盘符值。例如:设备名为vda,对应盘符值为0,设备名为vdaa,盘符值为1b等。可选地,盘符值可以通过预设字段的8个比特的二进制数表示,第一个设备名vda对应盘符值00000000,设备名vdaa对应盘符值00011011等等。

步骤202,响应于检测到磁盘标识,获取该磁盘的盘符值。

在本实施例中,当终端上运行的虚拟机检测到待插入磁盘具有盘符标识时,接着可以获取待插入磁盘的盘符值。

例如,盘符值可以服务器计算并传入虚拟机为待插入磁盘提供的交互模块中的预设字段。可选地,盘符值可以通过8个比特的预设字段将设备名以8个比特的二进制数表示,如设备名vdz,为第26个设备名,则预设字段的盘符值可以为00011001。当终端上运行的虚拟机检测到待插入磁盘具有盘符标识时,可以从该预设字段读取待插入磁盘的盘符值。

步骤203,判断所提取的盘符值所关联的设备名是否被分配给其他磁盘。

在本实施例中,终端上运行的虚拟机可以根据所提取的盘符值得到该盘符值所关联的设备名,进一步地,虚拟机可以判断该盘符值所关联的设备名是否被分配给其他磁盘。

实践中,磁盘所属虚拟机可以预先存储有设备名的分配状况。虚拟机可以只记录已被分配的设备名,也可以通过列表将所有可能的设备名的占用状态进行记录,还可以将可能的设备名按照一定规则映射到设备名分配位图中,使分配位图中的每一个位对应一个设备名,并通过每个位上的值判断对应的设备名是否被分配出去,例如可以将被分配出去的设备名对应的位上的值修改为预设数值(如1)。例如,QEMU-KVM虚拟机使用中,虚拟机对磁盘的设备名分配按照插入顺序分别分配设备名为vda、vdb……vdz,vdaa,vdab……,则虚拟机可以预先按照该顺序将设备名映射到分配位图中的各个位。

当虚拟机只记录已被分配的设备名,或者通过列表将所有可能的设备名的占用状态进行记录时,虚拟机可以将盘符值进行解析得到待插入磁盘的设备名,并通过查询确定待插入磁盘的设备名是否被分配给其他磁盘。当虚拟机通过分配位图记录设备名的占用状态时,虚拟机可以对分配位图中待插入磁盘所关联的设备名对应的位上的值进行判断,具体地,如果该值为预设数值,则确定待插入磁盘所关联的设备名被分配给其他磁盘,否则,确定待插入磁盘所关联的设备名没有被分配给其他磁盘。

步骤204,若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入该磁盘。

在本实施例中,如果待插入磁盘所关联的设备名没有被分配给其他磁盘,终端上运行的磁盘所插入的虚拟机可以根据所提取的盘符值确定该磁盘的设备名以插入该磁盘。

在本实施例的一些实现方式中,流程200还可以包括步骤205,若所提取的盘符值已被分配给其他磁盘,则虚拟机可以确定该磁盘插入失败。通过这种方式,可以有效避免所插入的磁盘占用其他磁盘的设备名而引起新的盘符漂移。

在本实施例的一些可选实现方式中,虚拟机可以通过分配位图记录当前时间各个盘符值所关联的设备名的占用状态,将可能的盘符值所关联的设备名按照一定规则映射到分配位图中,使分配位图中的每一个位对应一个设备名,当设备名被分配出去时,将分配位图中对应位的值修改为预设数值(如1)。虚拟机可以依次检测分配位图中所提取到的盘符值所关联的设备名对应的位之后的各个位,当检测到首个没有被设置为预设数值的位时,将该位所对应的设备名分配给该磁盘。

在本实施例的一些可选实现方式中,本申请的插入磁盘的方法还可以包括:响应于未检测到盘符标识,根据未被占用的设备名确定该磁盘的设备名。例如,虚拟机可以随机分配一个未被占用的设备名称作为该磁盘的设备名,也可以将用户指定的设备名作为该磁盘的设备名,还可以按照未被占用的设备名称的排列顺序将首个未被占用的设备名称作为该磁盘的设备名等,本申请对此不做限定。通过该步骤,本实施例的插入磁盘的方法可以兼容现有技术中未设置盘符标识的虚拟机的插入磁盘的方法。

请参考图3,图3示出了本申请的插入磁盘的方法的另一个实施例的流程300。本实施例以该流程300应用于对虚拟机进行管理的服务器(如图1所示的服务器104)进行说明。具体地,该流程300包括:

步骤301,获取待插入磁盘的通用唯一标识码。

在本实施例中,当有磁盘插入虚拟机时,服务器首先可以从本地或远程地获取磁盘的通用唯一标识码(UUID)。具体地,如果待插入磁盘所插入的虚拟机运行在服务器上,服务器可以从本地获取磁盘的UUID;如果待插入磁盘所插入的虚拟机运行在通过有线连接方式或者无线连接方式与服务器相连的其他终端(如物理机)上,则服务器可以远程地获取磁盘的UUID。

步骤302,根据该磁盘的通用唯一标识码查询磁盘通用唯一标识码与设备名的对应关系。

在本实施例中,服务器可以对已分配设备名的磁盘,将它们的磁盘UUID与所分配的设备名的对应关系进行保存,当有磁盘插入虚拟机时,服务器可以根据待插入磁盘的UUID查询磁盘UUID与设备名的对应关系以确定待插入磁盘是否被分配过设备名。其中,各磁盘在首次被分配设备名时磁盘UUID与所分配的设备名建立对应关系。

实践中,磁盘UUID与设备名的对应关系可以通过列表、表格等形式表示,例如在QEMU-KVM虚拟机的创建过程中,服务器可以通过Nova模块或Cinder模块为磁盘分配设备名。磁盘UUID与设备名的对应关系可以通过存储在Nova模块或Cinder模块中的UUID与设备名列表等表示。

在本实施例的一些可选实现方式中,在磁盘首次插入时,服务器可以为其分配设备名。服务器可以接受用户对磁盘的设备名的指定。此时,服务器可以先检测磁盘是否被指定设备名,若是,将所指定的设备名分配给磁盘,否则,可以根据磁盘UUID与设备名的对应关系中已被分配出去的设备名按设备名命名顺序(如vda、vdb……)检测出首个未被分配的设备名分配给磁盘。对每个磁盘,服务器可以在为其分配设备名并将磁盘的UUID与所分配的设备名的对应关系保存在磁盘UUID与设备名的对应关系中。

步骤303,响应于查询到该磁盘的通用唯一标识码与所分配的设备名的对应关系,获取该磁盘的设备名。

在本实施例中,如果服务器查询到该磁盘的UUID与所分配的设备名的对应关系,则表示服务器为该磁盘分配过设备名,此时,服务器可以直接根据磁盘UUID与设备名的对应关系获取该磁盘的设备名。例如服务器可以调用支持Linux下主流虚拟化工具的封装函数库libvirt的serial字段获取设备名,并传递给模拟处理器QEMU。

在本实施例的一些可选实现方式中,如果服务器未查询到该磁盘的UUID与所分配的设备名的对应关系,则该磁盘未被分配过设备名。此时,服务器可以按照前述的在磁盘首次插入时服务器为其分配设备名的方法为其分配设备名。

步骤304,对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识。

在本实施例中,服务器可以对所获取的该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识。其中,盘符标识可以用于标志磁盘是否被分配过设备名,其可以通过字母或数字等字符表示。可选地,盘符标识可以包括预先指定的标志位上的预设值,例如预设值1。

盘符值可以是与磁盘的设备名相关联的一个数值,用于传递和识别设备名的数值。盘符值可以通过各种预设的规则进行计算,以使各个磁盘的盘符值与服务器分配的设备名一一对应。在一些实现中,设备名按照26个英文字母命名,如vda、vdb……vdz,vdaa,vdab……等等,服务器可以按照该设备名序列中的序号对设备名按照十六进制数计数作为盘符值。例如:设备名为vda,对应盘符值为0,设备名为vdaa,盘符值为1b等。可选地,盘符值可以通过预设字段的8个比特的二进制数表示,第一个设备名vda对应盘符值00000000,设备名vdaa对应盘符值00011011等等。

服务器在生成盘符值的同时,还可以为磁盘生成盘符标识。盘符标识例如可以通过预设的标识为上的预设数值来表示。

作为示例,服务器可以通过模拟处理器QEMU与虚拟机的前端驱动模块virtio-blk可以通过虚拟机为所分配设备名的磁盘提供的交互模块(如struct virtio_blk_config结构体)进行信息交互,服务器可以将上述盘符值发送至该交互模块中一个预设的未使用字段unused字段,同时,将该交互模块中一个预设的标志位置位(其值修改为预设值1),以为所分配设备名的磁盘设置盘符标识。

请参考图4,结合图2、图3示出的实施例,以本申请的插入磁盘的方法应用于QEMU-KVM虚拟机创建时分配磁盘设备名及虚拟机对待插入磁盘的处理过程中插入磁盘作为应用场景进行说明。图4所示的应用场景包括流程400,该流程400涉及磁盘401、虚拟机402和服务器403,其中,虚拟机402可以运行于服务器403上,也可以运行于通过有线或无线连接方式与服务器403相连接的其他终端上。该应用场景中向虚拟机402插入磁盘401的过程中,分别由虚拟机402(可以包括虚拟机内核Guest Kernel以及前端驱动模块virtio-blk)执行图2示出的插入磁盘的方法及服务器403(例如可以包括虚拟化管理模块Nova或Cinder以及模拟处理器QEMU)执行图3示出的插入磁盘的方法。具体地:

在步骤4001中,磁盘401待插入虚拟机402,虚拟机402可以获取磁盘401的UUID并发送至服务器403;

在步骤4002中,服务器403可以获取磁盘401的UUID,并查询自身(如通过服务器403上安装的虚拟化管理模块Nova或Cinder)存储的磁盘UUID与设备名的对应关系,以确定磁盘401是否被分配过设备名。其中,各磁盘在首次被分配设备名时磁盘UUID与所分配的设备名建立对应关系并由服务器403保存;

在步骤4003中,服务器403查询到磁盘401的设备名,进一步可以获取磁盘401的设备名并通过虚拟化工具的封装函数库libvirt的serial字段获取设备名,并传递给模拟处理器QEMU;模拟处理器QEMU可以对磁盘401的设备名进行解析,并生成磁盘401的盘符值,同时为磁盘401生成盘符标识;

在步骤4004中,磁盘401的盘符值和盘符标识可以通过虚拟机402为所分配设备名的磁盘提供的交互模块(如struct virtio_blk_config结构体)由服务器403中的模拟处理器QEMU发送至虚拟机402;

在步骤4005中,虚拟机402可以通过前端驱动模块virtio-blk进行对上述交互模块进行检测,以确定磁盘401是否具有盘符标识;

在步骤4006中,响应于检测到磁盘401的磁盘标识,虚拟机402可以从上述交互模块(如struct virtio_blk_config结构体)中获取磁盘401的盘符值;

步骤4007中,虚拟机402可以判断所提取的盘符值所关联的设备名是否被分配给其他磁盘,若没有被分配给其他磁盘,虚拟机402可以确定该盘符值所关联的设备名为磁盘401的设备名,并将磁盘401插入。可选地,如果磁盘401的盘符值所关联的设备名被分配给其他磁盘,虚拟机402可以确定磁盘401插入失败或拒绝插入。

本申请的插入磁盘的方法,由于引入磁盘标识,通过磁盘标识和盘符值确定磁盘的设备名,从而保证每个磁盘使用在创建时生成的设备名,可以有效避免盘符漂移。

进一步参考图5,作为对图2所示方法的实现,本申请提供了一种插入磁盘的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应。装置500可以适用于任何可运行虚拟机的终端设备,例如物理机等。可以理解,一个终端设备上可以运行至少一个虚拟机,每个虚拟机可以包括一个该装置500。

如图5所示,本实施例插入磁盘的终端500包括:检测模块501、获取模块502、判断模块503和确定模块504。其中,检测模块501可以配置用于检测待插入磁盘是否具有盘符标识,其中,盘符标识由服务器通过以下方法获得:获取该磁盘的通用唯一标识码,查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系,响应于查询到待插入磁盘的磁盘通用唯一标识码与被分配的设备名的对应关系,获取该磁盘的设备名,对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识;获取模块502可以配置用于响应于检测到上述磁盘标识,获取上述盘符值;判断模块503可以配置用于判断上述盘符值所关联的设备名是否被分配给其他磁盘;确定模块504可以配置用于若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入该磁盘。

在本实施例的一些可选实现方式中,装置500还包括兼容模块(未示出),配置用于:响应于未检测到盘符标识,根据未被占用的设备名称确定该磁盘的设备名以插入该磁盘。

在本实施例的一些可选实现方式中,上述兼容模块包括:检测单元,配置用于依次检测分配位图中各个位上的值是否为预设数值,其中,分配位图用于记录当前时间各个盘符值所关联的设备名的占用状态,分配位图中,所关联的设备名被占用的盘符值所对应的位上的值被设为预设数值;确定单元,配置用于将检测到的首个值未被设为预设数值的位所对应的盘符值所关联的设备名确定为该磁盘的设备名以插入该磁盘。

在本实施例的一些可选实现方式中,盘符标识包括预先指定的标志位上的预设值。

在本实施例的一些可选实现方式中,判断模块进一步配置用于:判断盘符值在设备名分配位图中所对应的位的值是否为预设数值,其中,分配位图用于记录当前时间各个盘符值所关联的设备名的占用状态,分配位图中,所关联的设备名被占用的盘符值所对应的位上的值被设为预设数值;若是,确定上述盘符值所关联的设备名被分配给其他磁盘;否则,确定上述盘符值所关联的设备名未被分配给其他磁盘。

在本实施例的一些可选实现方式中,终端500还包括报错模块,配置用于:若所提取的盘符值已被分配给其他磁盘,确定该磁盘插入失败。

值得说明的是,装置500中记载的诸模块与参考图2描述的方法中的各个步骤相对应。由此,上文针对方法描述的操作和特征同样适用于插入磁盘的装置500及其中包含的模块或单元,在此不再赘述。

本领域技术人员可以理解,上述装置500还包括一些其他公知结构,例如处理器、存储器等,为了不必要地模糊本公开的实施例,这些公知的结构在图5中未示出。

进一步参考图6,作为对图3所示方法的实现,本申请提供了另一种插入磁盘的装置的一个实施例。该装置实施例与图3所示的方法实施例相对应。该装置600可以适用于任何用于管理虚拟机的服务器。

如图6所示,本实施例的插入磁盘的装置600包括:获取模块601、查询模块602、传递模块603和生成模块604。其中,获取模块601可以配置用于获取待插入磁盘的通用唯一标识码;查询模块602可以配置用于根据待插入磁盘的通用唯一标识码查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系;传递模块603可以配置用于响应于查询到该磁盘的设备名,获取该磁盘的设备名;生成模块604可以配置用于对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识,以供虚拟机:对盘符标识进行检测,响应于检测到上述磁盘标识,获取上述盘符值,判断上述盘符值所关联的设备名是否被分配给其他磁盘,若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入该磁盘。

在本实施例的一些可选实现方式中,装置600还包括检测模块(未示出),该检测模块包括:检测单元,配置用于检测该磁盘是否被指定设备名;分配单元,配置用于若该磁盘被指定设备名,将所指定的设备名分配给该磁盘,否则,按设备名命名顺序将首个未被分配的设备名分配给该磁盘。

值得说明的是,插入磁盘的装置600中记载的诸模块与参考图3描述的方法中的各个步骤相对应。由此,上文针对方法描述的操作和特征同样适用于插入磁盘的装置600及其中包含的模块或单元,在此不再赘述。

本领域技术人员可以理解,上述插入磁盘的装置600还包括一些其他公知结构,例如处理器、存储器等,为了不必要地模糊本公开的实施例,这些公知的结构在图6中未示出。

另外,本申请还提供了一种插入磁盘的系统,该系统包括用于管理虚拟机的服务器和可运行虚拟机的终端。具体地,服务器配置用于:获取待插入磁盘的通用唯一标识码;根据该磁盘的通用唯一标识码查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系;查询到该磁盘的磁盘通用唯一标识码与所分配的设备名的对应关系,获取该磁盘的设备名;对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识;终端上运行的虚拟机配置用于:对盘符标识进行检测,响应于检测到上述磁盘标识,获取上述盘符值,判断上述盘符值所关联的设备名是否被分配给其他磁盘,若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入该磁盘。

可以理解,插入磁盘的系统中用于管理虚拟机的服务器中可以设有上述装置600,终端上运行的虚拟机中可以设有上述装置500,在此不再赘述。

本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括检测模块、获取模块、判断模块、确定模块。其中这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,检测模块还可以被描述为“配置用于检测待插入磁盘是否具有盘符标识的模块”。

作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中上述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入终端中的计算机可读存储介质。该计算机可读存储介质存储有一个或者一个以上程序,当该程序被一个或者一个以上的处理器执行时,使得设备:检测待插入磁盘是否具有盘符标识,其中,盘符标识由服务器通过以下方法获得:获取该磁盘的通用唯一标识码,查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系,响应于查询到待插入磁盘的磁盘通用唯一标识码与被分配的设备名的对应关系,获取该磁盘的设备名,对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识;响应于检测到该磁盘标识,获取上述盘符值;判断该盘符值所关联的设备名是否被分配给其他磁盘;若没有被分配给其他磁盘,根据该盘符值确定该磁盘的设备名以插入该磁盘。

或者使得所述设备:获取待插入磁盘的通用唯一标识码;根据该磁盘的通用唯一标识码查询磁盘通用唯一标识码与设备名的对应关系,其中,各磁盘首次被分配设备名时磁盘通用唯一标识码与所分配的设备名建立对应关系;响应于查询到该磁盘的通用唯一标识码与所分配的设备名的对应关系,获取该磁盘的设备名;对该磁盘的设备名进行解析生成该磁盘的盘符值,同时为该磁盘生成盘符标识,以供虚拟机:对盘符标识进行检测,响应于检测到磁盘标识,获取上述盘符值,判断上述盘符值所关联的设备名是否被分配给其他磁盘,若没有被分配给其他磁盘,根据上述盘符值确定该磁盘的设备名以插入磁盘。

以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1