发布一段C代码,用于连接指定的KVM宿主机器,获得该宿主机器的配置信息,以及该主机上所有的虚拟主机列表、状态及配置信息:
#include <stdio.h>
#include <stdlib.h>
#include <libvirt/libvirt.h>
void ListDom(virConnectPtr conn)
{
char **inactiveDom;
virDomainPtr *allDom;
int nInActiveDoms = virConnectNumOfDefinedDomains(conn);
allDom = malloc(sizeof(virDomainPtr)* nInActiveDoms);
int i = 0;
char str[200];
virDomainInfo t;
if(nInActiveDoms != 0)
{
printf("inactive num: %d\n",nInActiveDoms);
inactiveDom = malloc(sizeof(char*) * (nInActiveDoms));
nInActiveDoms = virConnectListDefinedDomains(conn , inactiveDom , nInActiveDoms);
printf("numOfInactiveDom*************:%d\n", nInActiveDoms);
for(i=0 ; i<nInActiveDoms; i++)
{
printf("name:%s\n",inactiveDom[i]);
allDom[i] = virDomainLookupByName(conn , inactiveDom[i]);
virDomainGetUUIDString(allDom[i],str);
printf("uuid:%s | os:%s\n",str,virDomainGetOSType(allDom[i]));
virDomainGetInfo(allDom[i],&t);
printf("HostName:%s\n",virDomainGetName(allDom[i]));
printf("state:%d|maxmem:%d|memused:%d|cpunum:%d|cputime:%ld\n",t.state,t.maxMem,t.memory,t.nrVirtCpu,t.cpuTime);
}
}
}
void ListActiveDom(virConnectPtr conn)
{
int numOfActiveDom = virConnectNumOfDomains(conn);
int activeDom[numOfActiveDom];
virDomainPtr *allDomains;
virDomainInfo t;
int i ;
char str[200];
allDomains = malloc(sizeof(virDomainPtr)* numOfActiveDom);
numOfActiveDom = virConnectListDomains(conn , activeDom , numOfActiveDom);
printf("Active Dom: \n");
for(i=0 ; i<numOfActiveDom ; i++){
printf("id:%d\n",activeDom[i]);
allDomains[i] = virDomainLookupByID(conn ,activeDom[i]); //ͨ¹ýidÈ¡Domain
virDomainGetUUIDString(allDomains[i],str);
printf("uuid:%s | os:%s\n",str,virDomainGetOSType(allDomains[i]));
printf("HostName:%s\n",virDomainGetName(allDomains[i]));
virDomainGetInfo(allDomains[i],&t);
printf("state:%d|maxmem:%d|memused:%d|cpunum:%d|cputime:%ld\n",t.state,t.maxMem,t.memory,t.nrVirtCpu,t.cpuTime);
}
}
int main(int argc, char *argv[])
{
virConnectPtr conn;
char* caps;
virNodeInfo nodeinfo;
char str[200];
char *struuid[200];
int max = 0;
int i = 0;
virNodeMemoryStats *pMem;
int pN[100];
while(1)
{
printf("Input KVM Host:>");
gets(str);
printf("\n");
if(strcmp(str,"quit") == 0)
{
printf("Bye-Bye\n");
exit(0);
}
conn = virConnectOpen(str);
if (conn == NULL) {
fprintf(stderr, "Failed to open connection to qemu:///system\n");
continue;
}
caps = virConnectGetCapabilities(conn);
fprintf(stdout, "Capabilities:\n%s\n", caps);
free(caps);
printf("HostName: %s\n",virConnectGetHostname(conn));
fprintf(stdout, "Virtualization type: %s\n", virConnectGetType(conn));
virNodeGetInfo(conn, &nodeinfo);
fprintf(stdout, "Model: %s\n", nodeinfo.model);
fprintf(stdout, "Memory size: %lukb\n", nodeinfo.memory);
fprintf(stdout, "Number of CPUs: %u\n", nodeinfo.cpus);
fprintf(stdout, "MHz of CPUs: %u\n", nodeinfo.mhz);
fprintf(stdout, "Number of NUMA nodes: %u\n", nodeinfo.nodes);
fprintf(stdout, "Number of CPU sockets: %u\n", nodeinfo.sockets);
fprintf(stdout, "Number of CPU cores per socket: %u\n", nodeinfo.cores);
fprintf(stdout, "Number of CPU threads per core: %u\n", nodeinfo.threads);
/* printf("Sysinfor :[%s]\n",virConnectGetSysinfo(conn,0));
pMem = malloc(sizeof(virNodeMemoryStats)* 100);
virNodeGetMemoryStats(conn,VIR_NODE_MEMORY_STATS_ALL_CELLS,pMem,pN,0);
for(i = 0; i < 10; i++)
{
printf("MEM STAT\n%s - %ld\n",pMem[i].field,pMem[i].value);
}*/
ListDom(conn);
ListActiveDom(conn);
virConnectClose(conn);
}
return 0;
}
执行效果如下:
[root@kvm T]# ./t
Input KVM Host:>qemu+ssh:///system
分享到:
相关推荐
本文档介绍了虚拟化的基础知识、不同类型的虚拟化技术以及 KVM、Qemu 和 Libvirt 之间的关系。通过了解这些核心概念和技术细节,您可以更好地理解如何在实际环境中部署和管理虚拟化环境。接下来的章节将深入探讨 ...
Linux 下 KVM 虚拟化环境部署和使用 KVM(Kernel-based Virtual Machine)是 Linux 内核虚拟化解决方案,提供了一个基于硬件的虚拟化环境。下面是 KVM 虚拟化环境的安装、搭建和使用方法: 一、环境要求 * 操作...
1. **KVM虚拟化技术**:KVM 是 Linux 内核中的一个模块,允许Linux操作系统成为一个类型一(Hypervisor)的虚拟化平台。它利用硬件辅助虚拟化功能,如Intel的VT-x或AMD的V技术,提供高效的虚拟化支持。 2. **QEMU...
KVM虚拟化技术 KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,允许用户在物理机器上运行多个虚拟机。KVM虚拟化技术可以在满足一定条件的硬件上运行,包括支持虚拟化的CPU、内存和磁盘空间等。 1. ...
基于KVM_QEMU与Libvirt的虚拟化资源池构建,
《KVM虚拟化平台详解与VNC Viewer的运用》 KVM(Kernel-based Virtual Machine)是一种基于Linux内核的全虚拟化解决方案,它允许Linux操作系统作为宿主机运行多个虚拟机,每个虚拟机都可以运行自己的操作系统,包括...
KVM虚拟化技术因其开源、免费、性能优异、安全可靠等特点,被广泛应用于服务器虚拟化、云计算、虚拟桌面基础设施等领域。对于那些希望利用Linux平台实现虚拟化环境的IT专业人员来说,掌握KVM技术是一项非常有价值的...
### KVM虚拟化技术及其自动部署脚本 随着IT行业的快速发展与技术创新,虚拟化与云计算技术已成为当前IT领域的热点之一。虚拟化技术的核心是通过在虚拟而非物理的基础上运行计算组件来简化管理和优化资源分配。虚拟...
Linux KVM 虚拟化架构 ...Linux KVM 虚拟化架构是基于 CPU 硬件支持的虚拟化技术,依赖 KVM 模块和 QEMU 工具,使用 libvirt 来屏蔽掉不同类型的虚拟化工具的差异,提供了 virsh 命令和 VMM 图形界面来管理虚拟机。
而libvirt作为一个强大的管理工具,不仅支持KVM,还支持多种其他的虚拟化技术,如Xen和QEMU等。本文将详细介绍如何使用libvirt及其命令行工具virsh来管理KVM虚拟机。 #### 二、Libvirt简介 Libvirt是用于管理机器...
KVM 虚拟化技术详解 KVM(Kernel-Based Virtual Machine)是一种开源的虚拟化技术,基于 Linux 内核实现。它可以将物理机虚拟化成多个虚拟机,每个虚拟机可以运行不同的操作系统。KVM 的出现解决了服务器资源浪费的...
kvm虚拟化环境安装配置是指在服务器上安装和配置kvm虚拟化环境的过程,包括安装kvm和libvirt、配置网络和桥接模式等步骤。kvm是一种开源的虚拟化解决方案,可以在物理服务器上运行多个虚拟机,而libvirt是kvm的管理...
#### 三、KVM虚拟化应用案例 ##### 3.1 安装KVM组件 为了安装KVM组件,首先需要确保物理服务器满足以下条件: - **BIOS设置**:确保BIOS中开启了CPU的虚拟化功能。 - **系统资源**:至少6GB的磁盘剩余空间以及2GB...
3. **libvirt**:这是一个API库,提供了管理和控制虚拟化平台的工具,如virsh命令行工具和libvirt编程接口。通过libvirt,管理员可以方便地创建、启动、停止和迁移虚拟机。 4. **网络虚拟化**:KVM支持多种网络虚拟...
KVM虚拟化技术的实战应用广泛,包括: 1. **服务器整合**:通过KVM,多台物理服务器可以合并到一台物理机上,减少硬件成本和能源消耗。 2. **开发测试环境**:开发者可以在同一台机器上创建多个独立的虚拟环境,用于...
### KVM虚拟化技术概述及关键技术点 #### 一、KVM虚拟化技术简介 KVM(Kernel-based Virtual Machine)是一种构建在Linux操作系统上的开源虚拟化技术,它为用户提供了一个强大的虚拟化解决方案,尤其适用于服务器...
### KVM虚拟化系统安装知识点解析 #### 一、前期准备 - **硬件支持**: 安装KVM虚拟化系统前需确保服务器硬件支持虚拟化技术。这通常意味着CPU需要支持Intel VT-x或AMD-V这样的虚拟化扩展指令集。 - **安装KVM虚拟化...
KVM Qemu Libvirt之间的关系
Libvirt支持多种虚拟化方案,既支持包括KVM、QEMU、Xen、VMware、VirtualBox等在内的平台虚拟化方案,又支持OpenVZ、LXC等Linux容器虚拟化系统,还支持用户态Linux(UML)的虚拟化。 Libvirt的架构是一个基于驱动...
《KVM虚拟化技术实战与原理解析》这本书是由任永杰和单海涛两位作者共同编著,针对Linux环境下的虚拟化技术——KVM(Kernel-based Virtual Machine)进行了深入的探讨和实践指导。该书面向的是对Linux虚拟机或云计算...