求解答一下计算机操作系统的电脑问题在线问答

查看virsh管理qemu虚拟机日志信息和libvirtd日志信息
在软件的开发和运行过程中,程序的运行日志log是不能少的。我们可以从log中发现程序的运行状态,以及可能出先的一些error.通常运行日志log上有时间、信息级别(level)、消息输出(message)。通过分析日志,我们可以从中获得程序的运行信息,方便我们的调试、恢复等.
在libvirt程序管理VM虚拟机时,也会有日志的记录.既有libvirtd的后台程序的日志,也有vm日志.接下来,我们设置一些日志的信息.
libvirtd的运行日志
在运行libvirtd的时候,我们需要获得lbivirtd的运行信息.所以我们需要找到他的日志文件.一般情况下,它是在/var/log/libvirt/libvirtd.log路径下.
可能在这个目录下没有发现这个的日志文件.那么就要配置一些libvitd的参数了.
编辑文件/etc/libvirt/libvirtd.conf
#将日志级别设置为 1(调试)
log_level = 1
#指定日志输出文件名称
log_outputs=&1:file:/var/log/libvirt/libvirtd.log&
注意 :libvirtd. 日志文件可能会飞速增长。
用户应配置logrotate ,否则您的 /var 文件系统最后会装满内容。
以上的日志的输出级别为debug级别.这个级别的日志是最多的,一般只在开发以及测试的时候使用.而在生产运行环境中,日志的级别为info,warn,error,fatal. 以下前面的数字为他们的level.
重启libvirtd 。虚拟机Guest操作系统正在运行时可重启 libvirtd。
# /etc/init.d/libvirtd restart
如果在目录下还是没发现日志文件,那么你可能需要使用一下命令来运行libvirtd.
libvirtd --daemon --listen --config
/etc/libvirt/libvirtd
查看virsh管理qemu虚拟机的信息
在使用virsh管理qemu的虚拟机时候,也是有日志的输出的.
具体的log在目录/var/log/livirt/qemu/&下面,具体的log文件名与虚拟机名字关联.
本分类共有文章24篇,更多信息详见
& 2012 - 2016 &
&All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";32840人阅读
OpenStack源码分析-NOVA(35)
感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!
如果转载,请保留作者信息。
博客地址:http://blog.csdn.net/gaoxingnengjisuan
邮箱地址:dong.liu@
&&& 这是本人之前在实验室做的一个LIBVIRT学习报告。
1.什么是libvirt
&&& 虚拟云实现的三部曲:虚拟化技术实现--&虚拟机管理--&集群资源管理(云管理)。各种不同的虚拟化技术都提供了基本的管理工具。比如,启动,停用,配置,连接控制台等。这样在构建云管理的时候就存在两个问题:
&&& 1) 如果采用混合虚拟技术,上层就需要对不同的虚拟化技术调用不同管理工具,很是麻烦。
&&& 2) 虚拟化技术发展很迅速,系统虚拟化和容器虚拟化均在发展和演化中。可能有新的虚拟化技术更加符合现在的应用场景,需要迁移过去。这样管理平台就需要大幅改动。
&&& 为了适应变化,我们惯用的手段是分层,使之相互透明,在虚拟机和云管理中设置一个抽象管理层。libvirt就是扮演的这个角色。有了它,上面两个问题就迎刃而解。libvirt提供各种API,供上层来管理不同的虚拟机。
&&& Libvirt是管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。它包括一个API库,一个守护程序(libvirtd)和一个命令行工具(virsh);libvirt本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的API。
&&& libvirt的主要目标是为各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式。
2.Libvirt主要支持的功能
&&& 虚拟机管理:包括不同的领域生命周期操作,比如:启动、停止、暂停、保存、恢复和迁移。支持多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU。
&&& 远程机器支持:只要机器上运行了libvirt daemon,包括远程机器,所有的libvirt功能就都可以访问和使用。支持多种网络远程传输,使用最简单的SSH,不需要额外配置工作。
&&& 存储管理:任何运行了libvirt daemon的主机都可以用来管理不同类型的存储:创建不同格式的文件镜像(qcow2、vmdk、raw等)、挂接NFS共享、列出现有的LVM卷组、创建新的LVM卷组和逻辑卷、对未处理过的磁盘设备分区、挂接iSCSI共享,等等等等。因为libvirt可以远程工作,所有这些都可以通过远程主机使用。
&&& 网络接口管理:任何运行了libvirt daemon的主机都可以用来管理物理和逻辑的网络接口。
&&& 虚拟NAT和基于路由的网络:任何运行了libvirt daemon的主机都可以用来管理和创建虚拟网络。
3.Libvirt语言绑定
&&& libvirt库用C(支持 C++)实现,且包含对Python的直接支持。不过它还支持大量语言绑定。目前已经对Ruby、Java语言,Perl和
OCaml实施了绑定。libvirt支持最流行的系统编程语言(C和C++)、多种脚本语言。因此,不管您侧重何种语言,都可以方便的应用Libvirt。
4.Libvirt支持的虚拟机
&&& 目前支持的虚拟化技术包括:
&&& 可以说是非常丰富,主流的虚拟化技术都包含了。
5.Libvirt体系结构
&&& 没有使用libvirt的虚拟机管理方式如下图所示:
&&& 为支持各种虚拟机监控程序的可扩展性,libvirt实施一种基于驱动程序的架构,该架构允许一种通用的API以通用方式为大量潜在的虚拟机监控程序提供服务。下图展示了libvirt API与相关驱动程序的层次结构。这里也需要注意,libvirtd提供从远程应用程序访问本地域的方式。
&&& libvirt的控制方式有两种:
&&& 1)管理应用程序和域位于同一节点上。管理应用程序通过libvirt工作,以控制本地域。
&&& 2)管理应用程序和域位于不同节点上。该模式使用一种运行于远程节点上、名为libvirtd的特殊守护进程。当在新节点上安装libvirt时该程序会自动启动,且可自动确定本地虚拟机监控程序并为其安装驱动程序。该管理应用程序通过一种通用协议从本地libvirt连接到远程libvirtd。
6.Libvirt相关工具介绍
&&& 接下来介绍一种名为virsh(虚拟 shell)的应用程序,基于命令行的管理工具,可以实现简单的资源管理。它构建于libvirt之上,允许以交互方式使用多个libvirt功能。
&&& 下面我们通过一个应用virsh来实现对域的管理的例子来了解virsh这个工具:
&&& 1).定义域配置文件。该代码指定了定义域所需的所有选项—从虚拟机监控程序(仿真器)到域使用的资源以及外围配置。这只是个简单的配置,libvirt真正支持的属性更加多样化。
&&& 2).完成了域配置文件之后,使用virsh工具启动域。启动新域时,使用create命令和域配置文件:
&&& ld@ld-Lenovo :~/libvtest$ virsh create react-qemu.xml
&&& Connecting to uri: qemu:///system
&&& Domain ReactOS-on-QEMU created from react-qemu.xml
&&& ld@ld-Lenovo :~/libvtest$
&&& 3).使用virsh内的list命令列出给定主机上的活动域、域ID以及状态:
&&& ld@ld-Lenovo :~/libvtest$ virsh list
&&& Connecting to uri: qemu:///system
&&& Id Name&&&&&&&&&&&&&&&& State
&&& ----------------------------------
&&& 1 ReactOS-on-QEMU&&&&& running
&&& ld@ld-Lenovo :~/libvtest$
&&& 4).也可以使用suspend命令中止域。该命令可停止处于调度中的域,不过该域仍存在于内存中,可快速恢复运行。
&&& ld@ld-Lenovo :~/libvtest$ virsh suspend 1
&&& Connecting to uri: qemu:///system
&&& Domain 1 suspended
&&& ld@ld-Lenovo :~/libvtest$ virsh list
&&& Connecting to uri: qemu:///system
&&& Id Name&&&&&&&&&&&&&&&& State
&&& ----------------------------------
&&& 1 ReactOS-on-QEMU&&&&& paused
&&& ld@ld-Lenovo :~/libvtest$ virsh resume 1
&&& Connecting to uri: qemu:///system
&&& Domain 1 resumed
&&& ld@ld-Lenovo :~/libvtest$
7.Libvirt和Pythonn
&&& Python是受libvirt支持的脚本语言,它向libvirt API提供完全面向对象的接口。现在我们看一个使用Python来控制域的例子。
&&& 在本例中,从导入libvirt模块开始。然后连接到本地虚拟机监控程序。对每个 ID 创建一个域对象,然后中止,继续,最后删除该域。
import libvirt
conn = libvirt.open('qemu:///system')# 连接
for id in conn.listDomainsID():
dom = conn.lookupByID(id)
print &Dom %s State %s&%(dom.name(), ()[0])
dom.suspend()# 停止
print &Dom %s State%s(after suspend)&%(dom.name(), ()[0])
dom.resume()# 继续
print &Dom %s State%s(after resume)&%(dom.name(), ()[0])
dom.destroy()# 删除 &&& 输出结果:
&&& ld@ld-Lenovo :~/libvtest$ python libvtest.py
&&& Dom ReactOS-on-QEMU& State 1
&&& Dom ReactOS-on-QEMU& State 3 (after suspend)
&&& Dom ReactOS-on-QEMU& State 1 (after resume)
&&& ld@ld-Lenovo :~/libvtest$
&&& 虽然这只是个简单示例,我们仍然可以看到 libvirt 通过 Python 提供的强大功能。通过一个简单的脚本就能够管理本地域,发行有关域的信息,然后控制域。
8.Libvirt API介绍
&&& 高级libvirt API可划分为5个API部分:虚拟机监控程序连接API、域API、网络API、存储卷API、存储池API。
1).连接API
&&& 在libvirt中,连接是系统中的每一个动作和对象的基础。每一个实体,要与libvirt互相作用,应用virsh, virt-manager或者使用libvirt库,都需要首先获得一个到主机上libvirt守护进程的连接。
&&& 链接是与特定的hypervisor相关联的,它可能与libvirt客户端程序同时运行在本地的一个节点上,也可能通过网络连接到远程的机器上。通常情况下,链接由virConnectPtr对象代表,并且由一个URI来定义。
&&& 一个libvirt代理程序要做的第一件事就是调用libvirt连接函数获得virConnectPtr句柄。在后续的操作中,该句柄作为所有其他管理功能的基础。
(1).连接函数
&&& libvirt库为连接到一个资源提供了三种不同的函数,三个函数之间的区别在于它们提供的验证方式以及由此产生的授权的方法。
&&& virConnectPtr virConnectOpen(const char *name)
&&& 以实现完全的读写访问,不包含任何认证机制,而仅仅提供一种连接。
&&& 示例:conn = virConnectOpen(&qemu:///system&);
&&& virConnectPtr virConnectOpenReadOnly(const char *name)
&&& virConnectOpenReadOnly API会打开一个只读访问的连接。
&&& 示例:conn = virConnectOpenReadOnly(&qemu:///system&);
&&& virConnectPtr virConnectOpenAuth(const char *name, virConnectAuthPtr auth, int flags)
&&& 提供了一种基于认证机制的连接;
&&& 示例:conn = virConnectOpenAuth(&qemu+tcp://localhost/system&, virConnectAuthPtrDefault, 0);
(2).关闭连接
&&& virConnectClose
&&& 当不再需要连接的时候,必须调用virConnectClose来断开连接。
&&& 示例:
&&& virConnectP
&&& conn = virConnectOpen(&qemu:///system&);
&&& virConnectClose(conn);
(3).URI格式
&&& Libvirt使用统一的资源标识符(URI)来识别管理连接。连接本地和远程的hypervisor都是libvirt使用URI来进行处理。
&&& 本地URI:
&&& Libvirt的本地URI具备下述格式之一:
&&& driver:///system
&&& driver:///session
&&& driver+unix:///system
&&& driver+unix:///session
&&& 远程URI:
&&& 远程URI具有通用的格式(&[...]&表示可选部分):
&&& driver[+transport]://[username@][hostname][:port]/[path][?extraparameters]
&&& 参数解释:
&&& driver:libvirt 所连接的driver的名字。如xen, qemu,lxc, openvz和test。
&&& transport:数据传输方式,可用的方式包括tls, tcp, unix, ssh和ext。
&&& hostname:远程机器的主机名。
&&& port:很少使用。
&&& 远程访问URI的例子:
&&& 应用SSH数据传输通道连接一个主机名为上的远程Xen hypervisor,SSH的用户名根目录为:xen+ssh://root@/
(4).获取虚拟机功能信息的API
&&& virConnectGetCapabilities的调用能够用于获取虚拟主机的功能信息。返回虚拟机监控程序和驱动程序的功能描述。它包含一个指针,如果调用成功,将返回一个字符串,其中包括了描述功能信息的XML文件。
&&& capabilities XML格式提供了有关主机虚拟化技术的信息。特别的,他描述了虚拟主机的功能、虚拟化驱动程序以及所采用的虚拟技术所能够启动的客户端的类型等等。
&&& 具体例子不再描述。
(5).获取主机信息的API
&&& 各种不同的API可以用来获得虚拟主机的信息,包括主机名、最大支持的CPU个数等。
&&& virConnectGetHostname的调用可以获得虚拟主机的主机名。
&&& virConnectGetMaxVcpus的调用可以获得每个域的虚拟CPU最大个数。
&&& virNodeGetFreeMemory调用能够获得虚拟主机中空闲内存的总量。
&&& virNodeGetInfo的调用可以用来获得虚拟主机的各种信息。它采用了一个连接指针和一个virNodeInfo指针(由调用者分配)作为输入,如果成功,则会返回0,并且将获取信息填写在virNodeInfo结构体中。
&&& virNodeInfo结构体包括以下成员:
&&& char model[32]&&&&&&&&&&&&&&& 表示CPU型号的字符串
&&& unsigned long memory&&&&&&&&& 以kb为单位的内存大小
&&& unsigned int cpus&&&&&&&&&&&&& 活跃的CPU数目
&&& unsigned int mhz&&&&&&&&&&&&&& 期望的CPU频率
&&& unsigned int nodes&&&&&&&&&&&& NUMA节点数目,1表示一致性内存访问
&&& unsigned int sockets&&&&&&&&&& 每一个节点的CPU socket的数目
&&& unsigned int cores&&&&&&&&&&&& 每一个socket的核数
&&& unsigned int threads&&&&&&&&&& 每一个核的线程数
&&& virConnectGetType的调用能够获得处于连接使用中的虚拟机的类型。
&&& virConnectGetVersion可以获取使用中的主机上虚拟机软件的版本。
&&& virConnectGetLibVersion可以获得正在使用中的主机上的libvirt软件的版本。
&&& virConnectGetURI能够用来获取当前连接中的URI。
&&& virConnectIsEncrypted的调用能够查询一个给定的连接是否加密。
&&& virConnectIsSecure的调用能够查询一个给定的连接是否安全。
(6).错误处理API
&&& libvirt error API将会在一个正常的libvirt API调用返回错误标志的时候。提供关于引发错误的非常详细的信息。如果多个错误发生在没有错误监测机制的连接上的时候,错误信息有可能会丢失。因为这个原因,强烈建议经常对错误进行监测,并在libvirt API调用失败以后,立即进行错误收集。
&&& 域API用于虚拟机管理,包括创建,启动,停用,迁移,动态修改配置等。
&&& 进入虚拟机监控程序后,便可以使用一组 API 调用函数重复使用该虚拟机监控程序上的各种资源。API实现大量针对域的函数。要探究或管理域,首先需要一个virDomainPtr对象。您可通过多种方式获得该句柄(使用ID、UUID或域名)。有了该域句柄,就可以执行很多操作,从探究域(virDomainGetUUID、virDomainGetInfo、virDomainGetXMLDesc)到控制域(virDomainCreate
、virDomainSuspend 、virDomainResume 、virDomainDestroy)。
&&& 域可以指任何正在运行的虚拟机或者是可以用来启动虚拟机的配置。链接对象提供了API用来枚举域、创建新域和管理现有域。域用virDomainPtr对象来表示,并有自己唯一的标示符。
&&& 域可以是临时的也可以是持久的。一个临时的域只由当它在主机上运行的时候才能够被管理,一旦关闭,所有运行的迹象都会消失。当一个持续的域被关闭时,仍然可能会管理这个域的无效的配置。当运行定义好的配置文件时,一个临时的域可以转变成一个持续的域。
(1).域的标识符
&&& 唯一标识符:
&&& ID:正整数类型,一个单节点上的若干域中,每个域都有唯一的ID。无效的域没有ID号。
&&& name:字符串类型,在一个主机上的所有域中是唯一的,包括运行的域和无效的域。
&&& UUID:16比特无符号类型,保证在任何主机上的所有域之间是唯一的。
(2).域的获取
&&& 有三个获取现有的域的API,即virDomainLookupByID, virDomainLookupByName 和virDomainLookupByUUID.这些对象中都用一个连接对象作为第一个输入参数,以及域标示符作为其它的输入参数。
&&& 从ID获取一个域对象
&&& int domainID = 6;
&&& virDomainP
&&& dom = virDomainLookupByID(conn, domainID);
&&& 从name获取一个域对象
&&& int domainName = &someguest&;
&&& virDomainP
&&& dom = virDomainLookupByName(conn, domainName);
&&& 从UUID获取一个域对象
&&& char *domainUUID = &7-71d2-e94a-26e7b8bad250&;
&&& virDomainP
&&& dom = virDomainLookupByUUIDString(conn, domainUUID);
(3).域表单的获取
&&& Libvirt API公开了两个域的列表,第一个包含运行域,第二个包含无效的持久的域。
&&& 活跃的域列表的API--virConnectListDomains,返回域ID的列表。为了确定ID数组的大小,应用程序可以调用virConnectNumOfDomains API来解决。把这两个API调用放在一起,打印运行域ID列表的代码将会是如下所示:
int *activeD
numDomains = virConnectNumOfDomains(conn);
activeDomains = malloc(sizeof(int) * numDomains);
numDomains = virConnectListDomains(conn, activeDomains, numDomains);
printf(&Active domain IDs:\n&);
for (i = 0 ; i & numD i++) {
printf(& %d\n&, activeDomains[i]);
free(activeDomains);
&&& 除了正在运行的域,可能还会有一些持久的无效域配置存储在主机上。如果一个无效的域不具备任何的ID标志,这个不活跃域的列表将会以name字符串列表的形式输出。
&&& virConnectListDefinedDomains将会返回所填充的name字符串到数组元素的总数量。也有一个virConnectNumOfDefinedDomains来确定name的数量。打印无效的持久域的name列表的代码将会是如下所示:
char **inactiveD
numDomains = virConnectNumOfDefinedDomains(conn);
inactiveDomains = malloc(sizeof(char *) * numDomains);
numDomains = virConnectListDomains(conn, inactiveDomains, numDomains);
printf(&Inactive domain names:\n&);
for (i = 0 ; i & numD i++) {
printf(& %s\n&, inactiveDomains[i]);
free(inactiveDomains[i]);
free(inactiveDomains);
(4).域生命周期的控制
&&& Libvirt能够控制域的整个生命周期。域可以在它的整个生命周期的几个状态之间进行转换:
&&& Undefined这是一个基本的状态。任何没有定义或者没有建立的域的状态。
&&& Defined这是一个域已定义但是没有运行的状态。这种状态也可以被描述为停止。
&&& Running这是一个已经定义并运行在一个hypervisor上面的域的状态。
&&& Paused这个状态是形容一个域系统从运行状态转换为暂停状态。它的内存镜像已经被暂时地存储,它可以恢复到运行状态。
&&& 三个重要的API:
&&& virDomainCreateXML将会建立并立即引导启动一个新的临时性的域。当这个域系统关闭的时候,所有的运行痕迹将会消失。
&&& virDomainDefineXML将会为一个持久性的域建立并存储配置文件。
&&& virDomainCreate将会从持久性配置中引导启动一个预先定义的域。
&&& 引导一个临时的域
&&& 如果想引导一个临时的域,只需要建立一个对libvirt的连接以及一个包含了描述了所需求的域的配置的XML文档的字符串。
virDomainP
const char *xmlconfig = &&domain&........&/domain&&;
dom = virConnectCreateXML(conn, xmlconfig, 0);
fprintf(stderr, &Domain creation failed&);
fprintf(stderr, &Guest %s has booted&,virDomainName(dom));
virDomainFree(dom);
&&& 如果创建域的尝试成功,那么将会返回virDomainPtr作为这个域的句柄。尽管域引导启动成功,但是这不能保证这个域的持续运行。
&&& 定义并引导一个持久的域
&&& 在一个持久域能够被引导之前,必须使它的配置文件已经定义完成。这也要求建立一个对libvirt的连接以及一个包含了描述了所需求的来宾域的配置文件的XML文档的字符串。下面的示例假定了conn是virConnectPtr对象的实例。
virDomainP
const char *xmlconfig = &&domain&........&/domain&&;
dom = virConnectDefineXML(conn, xmlconfig, 0);
if(virDomainCreate(dom) & 0){
virDomainFree(dom);
fprintf(stderr, &Cannot boot guest&);
fprintf(stderr,&Guest %s has booted&,virDomainName(dom));
virDomainFree(dom);
&&& 至于网络 API(监控虚拟网络)、存储卷 API(管理存储设备)和存储池 API(管理存储文件系统)这里先不做介绍了,如果有需要的话,可以直接看官方文档,介绍的很详细,还有很多简单明了的示例。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:463973次
积分:5500
积分:5500
排名:第4397名
原创:104篇
评论:119条
陈文茜是一个充满智慧和魅力的女性,让人着迷!她和李敖不一样,李敖对事物的观点里充满了狡黠和诡异的东西,而陈文茜的见解独到,但是听过她细腻而渊博的解析之后,又让人不得不从心底信服,甚至会马上推翻自己原有的观点!
利用业余时间,按照openstack子项目的架构,写了一个独立的项目,实现虚拟机层次的资源动态负载均衡,功能类似于Vmware的DRS,写这个项目的目的有两个,第一,为后续项目的开发写一个demo,第二,从看懂源码到实际开发,这是一个质变的过程!
文章:102篇
阅读:385659
(1)(6)(6)(25)(9)(6)(4)(4)(4)(4)(10)(6)(7)(6)(9)(1)5463人阅读
linux学习(14)
云计算(13)
今天在一台通过apt-get安装过老版本libvirt(0.9.8)的机器上安装OpenStack,由于老版本的libvirt有Bug,故通过源码编译安装1.2.0版本。编译安装一切正常,不过在启动nova-compute服务时出现错误:
Traceback (most recent call last):
File &/usr/local/lib/python2.7/dist-packages/eventlet/hubs/hub.py&, line 346, in fire_timers
File &/usr/local/lib/python2.7/dist-packages/eventlet/hubs/timer.py&, line 56, in __call__
cb(*args, **kw)
File &/usr/local/lib/python2.7/dist-packages/eventlet/event.py&, line 163, in _do_send
waiter.switch(result)
File &/usr/local/lib/python2.7/dist-packages/eventlet/greenthread.py&, line 194, in main
result = function(*args, **kwargs)
File &/opt/stack/nova/nova/service.py&, line 132, in run_server
server.start()
File &/opt/stack/nova/nova/service.py&, line 398, in start
self.manager.init_host()
File &/opt/stack/nova/nova/compute/manager.py&, line 294, in init_host
self.driver.init_host(host=self.host)
File &/opt/stack/nova/nova/virt/libvirt/driver.py&, line 344, in init_host
if not self.has_min_version(MIN_LIBVIRT_VERSION):
File &/opt/stack/nova/nova/virt/libvirt/driver.py&, line 332, in has_min_version
libvirt_version = self._conn.getLibVersion()
File &/opt/stack/nova/nova/virt/libvirt/driver.py&, line 361, in _get_connection
self._connect, self.uri, self.read_only)
File &/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py&, line 139, in proxy_call
rv = execute(f,*args,**kwargs)
File &/usr/local/lib/python2.7/dist-packages/eventlet/tpool.py&, line 77, in tworker
rv = meth(*args,**kwargs)
File &/opt/stack/nova/nova/virt/libvirt/driver.py&, line 415, in _connect
return libvirt.openAuth(uri, auth, 0)
File &/usr/lib/python2.7/dist-packages/libvirt.py&, line 102, in openAuth
if ret is None:raise libvirtError('virConnectOpenAuth() failed')
libvirtError: Failed to connect socket to '/usr/local/var/run/libvirt/libvirt-sock': No such file or directory
09:13:10 CRITICAL nova [-] Failed to connect socket to '/usr/local/var/run/libvirt/libvirt-sock': No such file or directory
由于之前也遇到过,是由于libvirtd没有正常启动导致的,于是尝试启动libvirtd服务:
/usr/local/sbin/libvirtd -l -f /etc/libvirtd.conf
这时候本该正常启动,却出现以下问题,/var/log/libvirt/下的日志中也完全找不到任何异常。
/usr/local/sbin/libvirtd: initialization failed
Google后说是字符编码的问题,需要修改:
#将以下语句添加到 /etc/profile 中
export export LC_ALL=POSIX
source /etc/profile
再次重启libvirtd,这次仍有错误:
# /usr/local/sbin/libvirtd -l -f /etc/libvirtd.conf
00:57:31.361+: info : libvirt version: 1.2.0
00:57:31.361+: error : virNetTLSContextCheckCertFile:117 : Cannot read CA certificate '/usr/local/etc/pki/CA/cacert.pem': No such file or directory
但发现正常运行的机器上也没有 /usr/local/etc/pki/CA/cacert.pem这个文件,再次检查/etc/libvirtd.conf文件,发现有这么一段:
# Flag listening for secure TLS connections on the public TCP/IP port.
# NB, must pass the --listen flag to the libvirtd process for this to
# have any effect.
# It is necessary to setup a CA and issue server certificates before
# using this capability.
# This is enabled by default, uncomment this to disable it
# listen_tls = 0
于是将最后一行解除注释,关闭验证,再次启动libvirtd,启动正常,问题得解。
补充,有时候创建不了快照,可能是qemu-common或是qemu-utils没有安装好,apt-get重装也可解决,主要还是从错误信息中找相关线索。
参考资料:
/zhangzhang/archive//2943263.html
/blog/1783698
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:180604次
积分:2326
积分:2326
排名:第14883名
原创:44篇
转载:21篇
评论:42条
(1)(4)(1)(5)(3)(1)(3)(3)(1)(1)(1)(1)(2)(1)(1)(2)(2)(1)(2)(1)(5)(1)(2)(2)(1)(9)(3)(2)(2)(2)

我要回帖

更多关于 在线解决电脑问题 的文章

 

随机推荐