一、什么是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