您的位置:首页 > 大数据 > 人工智能

libvirtd: initialization failed解决(附libvirt其它错误解决办法) 分类: ubuntu学习 2013-06-19 15:22 1497人阅读 评论(0) 收藏

2013-06-19 15:22 846 查看
今天帮别人清空日志,结果清完后平台起不起来了

查看日志,是检查libvirt版本那一步出问题,其中用了查看命令:libvirtd --version

自己检查,返回错误:libvirtd: initialization failed

上网找了一下,试了下,找到一个ok的,说是字符编码出错。解决步骤如下:

1,打开/etc/profile

export LC_ALL=POSIX #加入这一行保存,这里好像要root权限

保存退出

2,然后source /etc/profile

3,sudo /etc/init.d/libvirt-bin restart

完成,用“libvirtd --version”查看,返回:libvirtd (libvirt) 0.9.13

成功了。将平台重启,然后可以运行了

>>>>>20130624

今天又出现这个问题,然而上面的方法不适用。我连/etc/init.d/libvirt-bin都找不到。

通过百度,查到"libvirt-bin是一个符号链接/etc/init.d/libvirt-bin
-> /lib/init/upstart-job,后者是一个shell脚本。"

(地址:http://www.linuxidc.com/Linux/2012-07/65515.htm

我检查到我的/lib/init/upstart-job文件还是存在,所以直接建了个链接文件:

$cd /etc/init.d/

$sudo ln -s /lib/init/upstart-job libvirtd-bin

然后重启服务

$sudo /etc/init.d/libvirtd-bin restart

结果还是不行,依旧提示:libvirtd: initialization failed

看来不只是文件丢失问题

后来问的同事,他研究过一段时间,终于知道了原因。

原来我是在服务器上的各种测试,然而服务器是英文环境的ubuntu,我的本机是中文环境的。我一般测试都是用过本机ssh到服务器,然后进行的测试。

然而,从中文环境的本机ssh到英文环境的服务器,会导致服务器测试时的环境变量改变,因此运行命令libvirtd --version会提示错误。

果然我同事的电脑上ssh到服务器,命令无问题,正常返回信息。

因为要测试,所以找了暂时的解决办法:1,将本机修改为英文环境;2;找个英文环境的ubuntu镜像,由镜像创建的虚拟机中ssh到服务器。

两个其实原理一样的。我正好有个镜像,所以用了2方法。

**************************

由于测试需要开关机操作,以上两个方法都略显麻烦,因此,找了个适合开关机的办法:

将启动libvirt的命令,写入自启动中。

每次机器启动,因为是本身启动libvirt,所以没有问题。

**************************

#########################################################

查到资料以前碰到过,还有其它的libvirt出错总结,也在这里贴一下:


libvirt
错误FAQ

ibvirt 错误FAQ

【Q】: error: "Error: libcrypto required."

【A】: apt-get install libssl-dev

【Q】: error lxcControllerRun:686 : Cannot unshare mount namespace: Function not implemented

【A】:

【Q】: "start vm1" in virsh, error: Failed to add veth0 device to virbr0: No such device

【A】:

【Q】: "net-start" defualt in virsh error: Cannot find 'dnsmasq' in path: No such file or directory

【A】:

【Q】: "start suse" in virsh error : lxcSetupInterfaces:1108 : Failed to add veth0 device to virbr0: No such device

/usr/local/sbin/brctl addbr virbr0

【Q】:hack 的时候出现编译错误:../src/.libs/libvirt_driver_lxc.a(libvirt_driver_lxc_la-lxc_driver.o): In function `lxcSetSchedulerParameters':

lxc/lxc_driver.c:2326: undefined reference to `virCgroupSetCpuSet'

【A】: libvirt在这个地方的处理非常奇怪,需要去src/底下,在对应的*.syms添加相应的接口声明

【Q】: hack添加新接口会出现:libvirt.c:1648: warning: no previous prototype for 'virNodeGetStats' [-Wmissing-prototypes]

【A】: 在include/libvirt底下, libvirt.h是根据libvirt.h.in生成的,所以,扩展新的接口时,不要忘记往.in里面添加

【Q】: Result status 0, stdout: '' stderr: 'INFO in start_domain, domain suse existed

【A】: 配置文件中指定的模板文件存在问题

【Q】:在mount的时候可能会出现:

mount -o loop /data/domains/lxc5.img /data/domains/lxc5

mount: could not find any free loop device

【A】:这是因为max_loop默认只有8,太小

【Q】:umount: /data/domains/vm4: device is busy

【A】:手工杀死:/usr/libexec/libvirt_lxc --name lxc1 --console 13 --background --veth veth8

类似的文件会导致这个虚拟机引导的init进程和init引导出的其他进程还在系统中。所以,必须kill掉这些进程才行

【Q】: 启动vm或者停止vm的时候,会导致客户端的ssh卡死。

【A】: 虚拟机的init启动新的sshd出现的

【Q】: 虚拟机中的/dev/ptx/ptmx 无法删除



【A】:

mount |grep lxc5

fuser -mu suse1/

lsof -w suse1

【Q】: mount -o loop /** /** 提示失败

【A】: max_loop 默认最大值为8,需要增加这个默认值的大小

【Q】: 设置cgroup的内存参数的时候可能是失败,报错:

【A】:这是由于memory.memsw.limit_in_bytes, memory.limit_in_bytes大小有关联。memory.limit_in_bytes不能大于memory.memsw.limit_in_bytes, memory.memsw.limit_in_bytes不能小于memory.limit_in_bytes。所以,在设置新内存值的时候需要注意设置的顺序。比较新值跟老值之间的关系

【Q】:启动libvirtd报错: initialization failed

【A】:字符编码出错 export LC_ALL=POSIX

【Q】:启动虚拟机,日志不断报错:

13:24:10.986: 28595: error : lxcFdForward:309 : read of fd 7 failed: Input/output error

cpu占有100%, 而且,list 的状态是处于运行中。

【A】

【Q】:在虚拟机中创建设备出错

mknod loop0 b 7 0

mknod: `loop0': Operation not permitted

【A】:需要设置cgroup中设备的值: echo a *:* rw > devices.allow

资料原文地址:/article/5179568.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐