libvirt的常用api详使用方法

虚拟化的方式

1.全虚拟化,Hypervisor(即vmm虚拟机管理程序)会抽象出虚拟机所用的全部硬件资源(如CPU、磁盘、网卡)

 kvm和qemu的使用方法

在这里插入图片描述

kvm是内核的一部分(内核代码的一部分),它使得Linux在用户模式和内核模式的基础上增加了客户模式,虚拟机就是运行在客户模式下的。它同样具有内核模式和用户模式。kvm负责虚拟机的创建,虚拟内存的分配,VCPU寄存器的读写和VCPU的运行(模拟内存和CPU).

qemu是一套独立的模拟计算机的软件,它是用户模式下的一个进程。通过qemu,用户可以和虚拟机交互了。它通过特定的接口调用kvm模块提供的功能。QEMU通过KVM模块提供的系统调用接口进行内核设置,由KVM模块负责将虚拟机置于处理器的特殊模式运行(也就是说客户模式里的内核模式是通过kvm来实现的)QEMU使用了KVM模块的虚拟化功能,为自己的虚拟机提供硬件虚拟化加速以提高虚拟机的性能。

qemu是用户模式下的一个计算机模拟软件,kvm为这个软件提供加速功能。

使用vmm一个中间层来管理客户机

在这里插入图片描述

半虚拟化

半虚拟化是一部分使用虚拟化设备(除了CPU和内存)它使用Hypervisor(虚拟机管理程序)分享存取底层的硬件。CPU和内存是直接使用硬件,因此速度非常快。但是因为直接使用硬件,所以客户机的操作系统的内核代码需要进行修改(不然可能会造成对物理机的误操作等情况)

在这里插入图片描述

 简单来说,全虚拟化就是所有虚拟化内容都走中间层(HyPervisor),半虚拟化就是有些部分走中间层,有些部分(比如CPU和内存)它直接使用硬件,所以就是一部分的虚拟化,即半虚拟化。

virConnectPtr的结构(它是和hypervisor的连接)

 virDomainPtr:这就代表某一个虚拟机(或者客户机Guest OS),因为虚拟机是运行在hypervisor的基础上的。

 virNetWorkPtr:代表一个网络

 virStorageVolPtr:代表一个虚拟机的一个存储卷(分区),这个存储卷通常是一个块设备(磁盘就是块设备)

  virStoragePoolPtr:代表一个存储池,是一个逻辑的区域,用来分配和存储存储卷。

在这里插入图片描述

1、virConnect / virConnectPtr

这是跟虚拟机管理程序(hypervisor)的连接的类/指针,它通过virConnectOpen来建立连接

2、virConnectPtr virConnectOpen (const char * name)

 这个name是一个URI(不是URL),用来表示哪个一个hypervisor.

 如果name为空

      1.查看环境变量LIBVIRT_DEFAULT_URI是否有值。

      2.查看客户端的配置文件中的uri_default参数。

      3.搜索所有的hypervisor,直到有一个连接成功。

  

URI可以是
  1. xen本地

    xen:///system : 代表连接一个本地的Xen虚拟机管理程序(hypevisor)

2.qemu本地

     不能直接连接qemu,需要连接到它的守护进程(daemon)—名字是libvirtd的进程。libvirtd进程需要root权限,并且需要开机自启动,它用来管理qemu的实例。

     qemu:///system 连接本地的系统模式守护进程

      qemu:///session 连接本地的会话模式守护进程

3.远程URI

      暂不做介绍

3、int virConnectClose (virConnectPtr conn)

  参数是一个指向虚拟机管理程序连接的指针

  如果还存在指向虚拟机管理程序连接的指针的引用,那么会返回一个正值(但返回值并不是总的引用计数),如果返回0代表连接关闭,内存释放。返回-1代表关闭失败。

4、int virConnectRegisterCloseCallback ( virConnectPtr conn, virConnectCloseFunc cb,

      void * opaque, virFreeCallback freecb)

这个函数是用在连接被关闭的回调函数,只要连接关闭了,这个回调函数就会被调用       

  conn:指向连接的指针

  cb:连接断开的回调函数

      原型如下:typedef void	(*virConnectCloseFunc	)	(virConnectPtr conn,  int reason,  void* opaque)*

         conn:连接

         reson:连接被关闭的原因(是枚举virConnectCloseReason中的一个,具体哪些原因不展开了)

          opaque:用户传给回调函数的数据

    opaque:用户传给回调函数的数据

    freecb:用来释放opaque的回调函数,它执行在主回调(cb)注销的时候

       原型如下:typedef void	(*virFreeCallback	)	(void * opaque)

           opague:用户传给回调函数的数据

    返回值:0代表成功,-1代表失败
  1. int virDomainReboot (virDomainPtr domain, unsigned int flags)

    用于重启一个虚拟机,这个domain接下来还是可用的。但是hypevisor会检查xml里on_reboot的相关设置,所以它可能会关机而不是重启。并且虚拟机可能会忽略这个请求。
    
     domain: 代表一个虚拟机对象的指针
    
     flags:重启的方式,详见virDomainRebootFlagValues枚举
    
     返回值:0代表成功,-1代表失败
    

6、int virDomainShutdownFlags (virDomainPtr domain, unsigned int flags)

    用于关闭一个虚拟机,这个domain接下来还是可用的。但是hypevisor会检查xml里on_reboot的相关设置,所以它可能会重启而不是关机。并且虚拟机可能会忽略这个请求。

     domain: 代表一个虚拟机对象的指针

     flags:关闭的方式,详见virDomainRebootFlagValues枚举

     返回值:0代表成功,-1代表失败

7、 int virDomainCreateWithFlags (virDomainPtr domain, unsigned int flags)

      用于启动一个定义好的虚拟机。如果调用成功,这个虚拟机会从定义态变到正在运行态(加入运行池)

     如果flags设置为VIR_DOMAIN_NONE,表示按默认方式启动。

     如果flags设置为VIR_DOMAIN_START_PAUSED,或者虚拟机有一个请求暂停状态的托管保存映像(managed save image,它由virDomainManagedSave()创建),这两种情况,虚拟机会开始运行,但是CPU还是处于暂停状态,所以仍然不可用(可通过virDomainResume来启动CPU).如果不是这两种情况,虚拟机都会开始运行。

      如果flags设置为VIR_DOMAIN_START_AUTODESTROY,那么当virConnectPtr释放、客户程序崩溃,虚拟机断开和libvirted守护进程的连接的时候,即连接断开的时候,这个虚拟机就自动关机了。

       如果flags设置了VIR_DOMAIN_START_FORCE_BOOT,重头开始启动。不管任何的代理保持映像。



     domain: 代表一个虚拟机对象的指针

     flags:关闭的方式,详见virDomainCreateFlagss枚举,可以用|来连接多个启动方式

     返回值:0代表成功,-1代表失败

8、virDomainPtr virDomainDefineXML (virConnectPtr conn, const char * xml)

 定义一个虚拟机,但不打开它。直到调用virDomainUndefine()方法,这个虚拟机的定义就不存在了 ,否则它会一直存在。另外只有有相同uuid和名称的定义会被这次覆盖掉。

 总结来说,就是根据xml配置文件得到一个虚拟机指针

  conn : 和虚拟机管理程序(hypervisor)连接的指针

  xml : 一个虚拟机的xml文件的字符流形式

  返回值:如果错误返回NULL, 正确返回一个指针

9、int virDomainUndefine (virDomainPtr domain)

   取消一个虚拟机。如果虚拟机正在运行,那么它会转变成瞬时态(短暂态),如果它未运行,直接删除配置项。

  domain  :  定义好的虚拟机的指针

  返回值:0代表成功,-1代表失败

10、 const char * virGetLastErrorMessage (void)

   返回这个线程最近的一个错误消息(如果什么都没有设置的话,就是一个通用消息)

11、int virDomainDestroy (virDomainPtr domain)

    销毁一个虚拟机对象,但不销毁虚拟机关联的指针。如果运行的虚拟机没有关闭,则关闭,并且将所有资源返回给虚拟机管理程序(hypervisor)

     它的策略是先发一个SIGTERM信号,然后如果过了超时时间虚拟机还在运行的话,就发一个SIGKILL信号,这就会强制关机。

    domain  :  定义好的虚拟机的指针

    返回值:0代表成功,-1代表失败

12、 int virDomainDestroyFlags (virDomainPtr domain, unsigned int flags)

    它的不同是带一个标志位flags,相较于Destroy的强制关机而言,它如果设置了VIR_DOMAIN_DESTROY_GRACEFUL,如果超时没有关机的话,它会返回一个错误,而不是强制关机。

    domain  :  定义好的虚拟机的指针

    flags:标志位,详细见宏virDomainDestroyFlagsValues

    返回值:0代表成功,-1代表失败

13、int virDomainFree (virDomainPtr domain)

   释放虚拟机对象,运行的虚拟机将继续保持运行,但它的数据结构释放以后,不应再使用。

   它和virDomainDestroy的区别是Destroy是把资源交还给Hypevisor,而Free是彻底释放虚拟机对象,数据结构也会删除。在计算结点中,这个函数用在Destroy之后,做进一步的释放。

    domain  :  定义好的虚拟机的指针

    返回值:0代表成功,-1代表失败

14、int virDomainSuspend (virDomainPtr domain)

 让一个虚拟机处于挂起状态。这个进程已经不能使用CPU和I/O设备了,但在Hypevisror层面上的虚拟机的内存仍然是分配的。它通过virDomainResume()来解除挂起状态。如果虚拟机的状态是VIR_DOMAIN_PMSUSPENDED(即被虚拟机自身的电源管理挂起),这个函数无效。

    domain  :  定义好的虚拟机的指针

    返回值:0代表成功,-1代表失败

15、int virDomainResume (virDomainPtr domain)

   用来解除挂起状态。如果虚拟机的状态是VIR_DOMAIN_PMSUSPENDED(即被虚拟机自身的电源管理挂起),这个函数无效。

    domain  :  定义好的虚拟机的指针

    返回值:0代表成功,-1代表失败

16、int virDomainGetInfo (virDomainPtr domain, virDomainInfoPtr info)

  用来提取虚拟机信息,info是一个指向virDomainInfo结构体的指针。如果用来获取虚拟机的连接受限的话,只能提取一部分的信息。

  

    domain  :  定义好的虚拟机的指针

    info:一个指向virDomainInfo结构体的指针

    返回值:0代表成功,-1代表失败

17、virNetworkPtr virNetworkDefineXML (virConnectPtr conn, const char * xml)

   跟定义一个虚拟机一样,只是它是用来定义一个虚拟网络。或者是根据xml来修改现存的永久的虚拟网络。

   用virNetworkFree来释放资源(不再使用了)

  conn : 和虚拟机管理程序(hypervisor)连接的指针

  xml : 一个虚拟机的xml文件的字符流形式

  返回值:如果错误返回NULL, 正确返回一个指针

18、int virNetworkSetAutostart (virNetworkPtr network, int autostart)

    设置虚拟网络为开机自启动(物理主机开机自启动)

    netwrok :   网络对象

    autostart:    0代表开机自启动,1代表开机不自启动

    返回值: 0代表成功,-1代表失败

19、int virNetworkDestroy (virNetworkPtr network)

   销毁一个网络对象,如果正在运行就关闭它。它的作用是把所有使用的资源交还给Hypevisor。

    

    netwrok :   网络对象

    返回值: 0代表成功,-1代表失败

20、int virNetworkUndefine (virNetworkPtr network)

   取消网络的定义,如果虚拟网络正在运行,它不会关闭它。

   

    netwrok :   网络对象

    返回值: 0代表成功,-1代表失败

21、const char * virNetworkGetName ( virNetworkPtr network)

   获取网络的公共名称。



    netwrok :   网络对象

    返回值: 返回一个名称的指针,或者NULL,这个指针不需要释放,它的生命周期跟网络对象相同。

22、int virNetworkCreate (virNetworkPtr network)

 创建并运行一个已经定义好的网络对象。让它从已经定义好的状态变为运行态(加到运行池去)



    netwrok :   网络对象

    返回值: 0代表成功,-1代表失败

23、 int virNetworkIsActive (virNetworkPtr net)

   判断网络对象是否正在运行



    netwrok :   网络对象

    返回值: 1代表运行,0代表未运行, -1代表错误
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值