全部博文(370)
分类: 虚拟化
2011-04-11 13:57:07
答: 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,不需要额外配置工作。比 如:运行了libvirt,而且允许SSH访问,下面的命令行就可以在远程的主机上使用virsh命令行。 (可参考 )
virsh --connect qemu+ssh://
•存储管理:任何运行了libvirt daemon的主机都可以用来管理不同类型的存储:创建不同格式的文件映像(qcow2、vmdk、raw等)、挂接NFS共享、列出现有的LVM卷组、 创建新的LVM卷组和逻辑卷、对未处理过的磁盘设备分区、挂接iSCSI共享,等等等等。因为libvirt可以远程工作,所有这些都可以通过远程主机使 用。(可参考)
•网络接口管理:任何运行了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)编译源码包:
•下载源码包
• 解压源码包:
$ gunzip -c libvirt-x.x.x.tar.gz | tar xvf -
$ cd libvirt-x.x.x
$ ./configure
• 编译安装:
$ ./configure [possible options]
$ make
$ sudomake install
2、git安装
$ git clone git://
$ ./autogen.sh --prefix=$HOME/usr --enable-compile-warnings=error
$ make
$ sudo make install
2、在windows上安装:直接下载安装可执行程序,地址
九、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 还支持一种事件机制,您可使用该机制注册为在特定事件(比如域的启动、中止、恢复或停止)发生时获得通知