一、什么是libvirt?     答: libvirt是一套免费、开源的支持Linux  下主流虚拟化工具的C函数库,libvirt本身  不是一种工具,                 它是一种可以建立工具来管理来宾操作系统的 API,官方描述为:  
       libvirt is:   
        * A toolkit to interact with  the virtualization capabilities of recent versions of Linux (and other  OSes).(提供给最新linux(其他操作系     统)的虚拟化功能的工具包)   
        * Free software available under the GNU Lesser General Public License.  (遵循GUN公共许可的免费软件)  
          * A long term stable C API  (一个长期稳定的C语言API)   
            * A set of bindings for common languages  (一组通用语言的绑定)  
          * A CIM provider for the DMTF virtualization schema(CIM提供  的  虚拟化 架构 的DMTF(    分布式管理工作组))  
 二、libvirt的主要目标时什么?    
 答:为包括Xen  在内的各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式和hypervisor(管理工具),避免学习、使用不同hypervisor的特定工具。  
 三、libvirt的架构及工作方式怎样的?  
 答:没有使用libvirt的虚拟机管理方式如下图左  图: 
  
    
    
    
  
    
  
    libvirt的控制方式有两种: 
          1)管理应用程序和域位于同一节点上。管理应用程序通过 libvirt 工作,以控制本地域。(如上图右图) 
         2)管理应用程序和域位于不同节点上。该模式使用一种运行于远程节点上、名为 libvirtd   的特殊守护进程。当在新节点上安装 libvirt 时该程序会自动启动,且可自动确定本地虚拟机监控程序并为其安装驱动程序。该管理应用程序通过一种通用协议从本地 libvirt 连接到远程 libvirtd。(如下图) 
  
 
  
 
    
  
   
  
  
 
  
 
  
 libvirt的基本架构是: libvirt 实施一种基于驱动程序的架构,该架构允许一种通用的 API 以通用方式为大量潜在的虚拟机监控程序提供服务。(如下图所示) 
  
 
  
  
 
  
 
  
 四、libvirt现在支持哪些虚拟机?    
 答:支持以下虚拟机  
    | Xen | 面向 IA-32,IA-64 和 PowerPC 970 架构的虚拟机监控程序 | 
  | QEMU | 面向各种架构的平台仿真器 | 
  | Kernel-based Virtual Machine (KVM) | Linux 平台仿真器 | 
  | Linux Containers(LXC) | 用于操作系统虚拟化的 Linux(轻量级)容器 | 
  | OpenVZ | 基于 Linux 内核的操作系统级虚拟化 | 
  | VirtualBox | x86 虚拟化虚拟机监控程序 | 
  | User Mode Linux | 面向各种架构的 Linux 平台仿真器 | 
  | Test | 面向伪虚拟机监控程序的测试驱动器 | 
  | Storage | 存储池驱动器(本地磁盘,网络磁盘,iSCSI 卷) | 
  
 五、libvirt的主要功能有哪些?    
 答:  
 - 虚拟机管理:包括不同的领域生命周期操作,比如:启动、停止、暂停、保存、恢复和迁移。支持多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU。  
- 远程机器支持:只要机器上运行了libvirt  daemon,包括远程机器,所有的libvirt功能就都可以访问和使用。支持多种网络远程传输,使用最简单的SSH,不需要额外配置工作。比 如:example.com运行了libvirt,而且允许SSH访问,下面的命令行就可以在远程的主机上使用virsh命令行。 (可参考 http://libvirt.org/remote.html  )   
          virsh --connect qemu+ssh://root@example.com/system  
 - 存储管理:任何运行了libvirt  daemon的主机都可以用来管理不同类型的存储:创建不同格式的文件映像(qcow2、vmdk、raw等)、挂接NFS共享、列出现有的LVM卷组、 创建新的LVM卷组和逻辑卷、对未处理过的磁盘设备分区、挂接iSCSI共享,等等等等。因为libvirt可以远程工作,所有这些都可以通过远程主机使 用。(可参考http://libvirt.org/storage.html  )  
- 网络接口管理:任何运行了libvirt daemon的主机都可以用来管理物理和逻辑的网络接口。可以列出现有的接口卡,配置、创建接口,以及桥接、vlan和关联设备等,通过netcf都可以支持。  
- 虚拟NAT和基于路由的网络:任何运行了libvirt daemon的主机都可以用来管理和创建虚拟网络。Libvirt虚拟网络使用防火墙规则作为路由器,让虚拟机可以透明访问主机的网络。  
六、libvirt可以和和哪些语言绑定?    
  答:       libvirt 库用 C                 (支持 C++  )实现,且包含对 Python 的直接支持。不过它还支持大量语言绑定。目前已经对 Ruby、Java™ 语言,Perl 和 OCaml 实施了绑定。在从 C#   调用 libvirt 方面我们已做了大量工作。  
 七、基于libvirt有哪些应用程序?    
 答:    virsh                     它是一种虚拟 shell。  
          virt-install              应用程序,它可用于从多个操作系统发行版供应新域。  
          virt-clone               可用于从另一个 VM 复制  VM(既包括操作系统复制也包括磁盘复制)。  
          virt-manager         一些高级应用程序包括多用途桌面管理工具   
          virt-viewer             安全连接到 VM  图形控制台的轻量级工具 。  
 八、怎样安装libvirt?    
   1、在linux上安装:  
       1)编译源码包:  
   
 九、libvirt API简介:    
 答:高级 libvirt API 可划分为 5 个 API 部分:虚拟机监控程序连接 API、域 API、网络 API、存储卷 API 以及存储池 API。  
        为给定虚拟机监控程序创建连接后会产生所有 libvirt 通信。该连接为所有其他要使用的 API 提供路径。在 C   API 中,该行为通过 virConnectOpen   调用(以及其他进行认证的调用)提供。这些函数的返回值是一个 virConnectPtr   对象,它代表到虚拟机监控程序的一个连接。该对象作为所有其他管理功能的基础,是对给定虚拟机监控程序进行并发 API 调用所必需的语句。重要的并发调用是 virConnectGetCapabilities   和 virNodeGetInfo  ,前者返回虚拟机监控程序和驱动程序的功能,后者获取有关节点的信息。该信息以 XML 文档的形式返回,这样通过解析便可了解可能发生的行为。  
        进入虚拟机监控程序后,便可以使用一组 API 调用函数重复使用该虚拟机监控程序上的各种资源。virConnectListDomains   API 调用函数返回一列域标识符,它们代表该虚拟机监控程序上的活动域。  
        API 实现大量针对域的函数。要探究或管理域,首先需要一个 virDomainPtr   对象。您可通过多种方式获得该句柄(使用 ID、UUID 或域名)。继续来看重复域的例子,您可以使用该函数返回的索引表并调用 virDomainLookupByID   来获取域句柄。有了该域句柄,就可以执行很多操作,从探究域(virDomainGetUUID  、virDomainGetInfo  、virDomainGetXMLDesc  、virDomainMemoryPeek  )到控制域(virDomainCreate  、virDomainSuspend  、virDomainResume  、virDomainDestroy   和 virDomainMigrate  )。   
        您还可使用 API 管理并检查虚拟网络和存储资源。建立了 API 模型之后,需要一个virNetworkPtr   对象来管理并检查虚拟网络,且需要一个 virStoragePoolPtr  (存储池)或 virStorageVolPtr  (卷)对象来管理这些资源。  
        API 还支持一种事件机制,您可使用该机制注册为在特定事件(比如域的启动、中止、恢复或停止)发生时获得通知。  
参考资源:
 http://www.ibm.com/developerworks/cn/linux/l-libvirt/
 http://libvirt.org/
 http://baike.baidu.com/view/1592349.htm
 http://blog.csdn.net/MagBryan/archive/2010/03/22/5403907.aspx
转自: 
http://blog.csdn.net/mushubingfeng/article/details/6307914