本文是转载文章,来源于百度文库,链接为百度文库源文章,只做学习用途,此文章标题为本人所命。
答: 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( 分布式管理工作组))
答:为包括Xen在内的各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式和hypervisor(管理工具),避免学习、使用不同hypervisor的特定工具。
三、libvirt的架构及工作方式怎样的?
答:没有使用libvirt的虚拟机管理方式和使用libvirt虚拟机管理方式的比较,如下图:
libvirt的控制方式有两种:
1)管理应用程序和域位于同一节点上。管理应用程序通过 libvirt 工作,以控制本地域。(如上图右图)
2)管理应用程序和域位于不同节点上。该模式使用一种运行于远程节点上、名为 libvirtd 的特殊守护进程。当在新节点上安装 libvirt 时该程序会自动启动,且可自动确定本地虚拟机监控程序并为其安装驱动程序。该管理应用程序通过一种通用协议从本地 libvirt 连接到远程 libvirtd。(如下图)
libvirt的基本架构是: libvirt 实施一种基于驱动程序的架构,该架构允许一种通用的 API 以通用方式为大量潜在的虚拟机监控程序提供服务。(如下图所示)
答:支持以下虚拟机
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 卷)
The VMware ESX and GSX hypervisors
The VMware Workstation and Player hypervisors
答:
虚拟机管理:包括不同的领域生命周期操作,比如:启动、停止、暂停、保存、恢复和迁移。支持多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU。
远程机器支持:只要机器上运行了libvirt daemon,包括远程机器,所有的libvirt功能就都可以访问和使用。支持多种网络远程传输,使用最简单的SSH,不需要额外配置工作。比如:example.com运行了libvirt,而且允许SSH访问,下面的命令行就可以在远程的主机上使用virsh命令行。 (可参考 http://libvirt.org/remote.html )
virsh –connect qemu+ssh://[email protected]/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 库用 C (支持 C++ )实现,且包含对 Python 的直接支持。不过它还支持大量语言绑定。目前已经对 Ruby、Java™ 语言,Perl 和 OCaml 实施了绑定。在从 C# 调用 libvirt 方面我们已做了大量工作。
答: virsh 它是一种虚拟 shell。
virt-install 应用程序,它可用于从多个操作系统发行版供应新域。
virt-clone 可用于从另一个 VM 复制 VM(既包括操作系统复制也包括磁盘复制)。
virt-manager 一些高级应用程序包括多用途桌面管理工具
virt-viewer 安全连接到 VM 图形控制台的轻量级工具 。
答:高级 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 还支持一种事件机制,您可使用该机制注册为在特定事件(比如域的启动、中止、恢复或停止)发生时获得通知。