libvirtd: initialization failed解决(附libvirt其它错误解决办法) ...

今天帮别人清空日志,结果清完后平台起不起来了

查看日志,是检查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 


资料原文地址:http://www.cnblogs.com/zhangzhang/archive/2013/03/04/2943263.html


版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/heybob/p/4718983.html

你可能感兴趣的:(运维,操作系统,shell)