• kvm常见故障及解决


    一、启动虚拟机Connection reset by peer

    # virsh start vmhost1error: Failed to start domain vmhost1error: Unable to read from monitor: Connection reset by peer

    在虚拟机运行过程中关闭宿主服务器就有可能导致这种情况出现,由于宿主服务器中的kvm虚拟机控制器与安装在kvm中的虚拟机会话被异常重置,所以我们可以如下解决:

    # virsh managedsave-remove vmhost1# virsh start vmhost1

    如果启动查看/var/log/libvirt/qemu/vmhost1.log下log还报如下错误:

    Cannot set up guest memory 'pc.ram': Cannot allocate memory

    这个问题可能是分配给vmhost1分配的内存过大(甚至超过的物理主机的内存大小),或者可能是宿主机没有足够的内存分配给此虚拟机,导致无法启动!


    二、重Define虚拟机时无/usr/bin/kvm

    error: Failed to define domain from hostname.xmlerror: Cannot find QEMU binary /usr/bin/kvm: No such file or directory

    解决方法:

    # ln -s /usr/libexec/qemu-kvm /usr/bin/kvm


    三、error: internal error process exited while connecting to monitor

    # virsh start vmhost1  
    error: Failed to start domain vmhost1error: internal error process exited while connecting to monitor: kvm: -drive file=/dev/sp1368155439693/v1368544020461,if=none,id=drive-virtio-disk0,format=qcow2: could not open disk image /dev/sp1368155439693/v1368544020461: Invalid argument

    分析:镜像格式错误,用qemu-img info 检查镜像和xml配置文件中指定的type是否一致!


    四、Unable to load library 'virt': libvirt.so

    Unable to load library 'virt': libvirt.so: cannot open shared object file: No such file or directoryLinux下解决:      ln -s /usr/lib/libvirt.so.0   /usr/lib/libvirt.so
    
    windows下解决:
          将libvirt-0.dll改名为virt.dll


    五、error: Refusing to undefine while domain managed save image exists

    # virsh undefine vmhost1error: Refusing to undefine while domain managed save image existshttp://www.redhat.com/archives/libvir-list/2011-July/msg01219.html

    解决方法:virsh undefine $domain  --managed-save


    六、启动libvirtd进程出错

    # /usr/local/sbin/libvirtd -d -l --config /usr/local/etc/libvirt/libvirtd.conf (编译安装的启动方式)
    error:/usr/local/sbin/libvirtd: initialization failed
    try to install libpcap-devel RPM and rebuild libvirt  http://comments.gmane.org/gmane.comp.emulators.libvirt/58218apt-get install libpcap-dev
    上面的方法好像都没有效果,但是尝试了http://wiki.libvirt.org/page/The_daemon_cannot_be_started说的,把配置文件里的
    listen_tls = 0注释取消(更奇怪的问题,在我的客户端链接不对)


    七、启动虚拟机报错

    # virsh start vmhost1error: Failed to start domain vmhost1error: internal error process exited while connecting to monitor: Could not access KVM kernel module: No such file or directoryfailed to initialize KVM: No such file or directoryNo accelerator found!

    上面的提示信息就是因为QEMU在初始化阶段因为无法找到kvm内核模块。

    # modprobe kvm   #载入指定的模块

    重启电脑,进入bios界面,设置advance选项里面的virtualization标签为Enabled

    通过命令 lsmod | grep kvm    #显示已载入的模块


    八、虚拟机迁移

    # virsh migrate --live 1 qemu+tcp://192.168.0.121 --p2p --tunnelled --unsafe error: operation failed: Failed to connect to remote libvirt URI qemu+tcp://192.168.0.121(在URI后面加上/system,‘system’相当于root用户的访问权限)
    
    #virsh migrate --live 2 qemu+tcp://192.168.0.121/system --p2p --tunnelled
     error: Unsafe migration: Migration may lead to data corruption if disks use cache != none(加上--unsafe参数)#virsh migrate --live 2 qemu+tcp://192.168.0.121/system --p2p --tunnelled --unsafe error: Timed out during operation: cannot acquire state change lock (启动虚拟机有时也会遇此错误),需要重启libvirtd进程


    九、virsh

    error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Connection refused(libvirtd 进程没有启动,libvirtd是一个监听客户端请求的进程)# virsh -c qemu:///system listerror: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied
    error: failed to connect to the hypervisor
    (当前用户没有权限,修改/etc/libvirt/libvirtd.conf,unix_sock_rw_perms = 0777,使所有用户都有权限读写)


    注意:如果查询的结果中包含有vmx,那么就可以证明服务器是支持虚拟化的

    安装包

    yum -y groupinstall "Virtualization" "Virtualization Client" "Virtualization Platform"

    modprobe kvm

    lsmod |grep kvm

    ln -sv /usr/libexec/qemu-kvm /usr/bin/ 

    service libvirtd start 

    chkconfig --level 2345 libvirtd on 

    chkconfig libvirtd  --list

    配置网卡桥接

    virsh iface-bridge eth0 br0

    安装

    virt-install --connect  qemu:///system --virt-type kvm --name rhel6 --ram=1024  --disk path=/var/lib/libvirt/images/rhel6.img,size=8,sparse --os-type=linux --accelerate -c /sdb1/CentOS-6.6-x86_64-bin-DVD.iso --network bridge=br0,model=virtio --vnc  --vncport=5991 --vnclisten=0.0.0.0 --force

    --vncport 端口可以自己改,不指定的话自动获取

    --boot network,cdrom,menu=on  这个是启动顺序可以不用加

    当出现下面提示的时候用vnc客户端连接即可(端口:5991)

    netstat -tnlp |grep kvm

    tcp        0      0 0.0.0.0:5991                0.0.0.0:*                   LISTEN      3006/qemu-kvm

    开始安装......

    创建域......                                                                     |    0 B     00:00     

    无法打开显示:

    运行 'virt-viewer --help' 来查看可用命令行选项的完整列表

    域安装仍在进行。您可以重新连接

    到控制台以便完成安装进程。

    注意: 如果安装完成后,ifconfig只能看到本地回环网卡,到/etc/sysconfig/network-scripts/目录下将ifcfg-eth0的ONBOOT改为yes,然后启动网卡即可。

    virsh uri: 查看当前主机上hypervisor的连接路径;

    virsh connect:

    virsh define: 创建一个虚拟机,根据事先定义的xml格式的配置文件;创建以后不会自动启动;

    virsh create: 创建,创建完成后会自动启动;

    virsh undefine: 删除

    virsh list  --all 查看

    virsh destroy  rhel6  删除rhel6

    virt-install --os-variant list

    virsh start rhel66  开启rhel66 或 virsh create /etc/libvirt/qemu/rhel66.xml

    virsh shutdown rhel66

    virsh reboot rhel66  

    virsh console rhel66

    virsh suspend rhel66  挂起

    virsh resume  rhel66 恢复挂起

    /etc/libvirt/qemu/  虚拟机xml配置文件目录

    virsh edit rhel66   编辑xml配置文件,vi编辑的不会立即生效

    解决virsh shutdown无法关闭KVM虚拟机,以下操作都在客户机,不是宿主机

    yum -y install  acpid

    service acpid restart

    chkconfig --level 2345 acpid on 

    chkconfig acpid --list

    解决KVM中宿主机通过console无法连接客户机,以下操作都在客户机,不是宿主机

    1、添加ttyS0的安全许可,允许root登录:

      echo "ttyS0" >> /etc/securetty

    2、在/etc/grub.conf文件中为内核添加参数:

       console=ttyS0

      这步要注意:

      console=ttyS0一定要放在kernel这行中(大约在第16行),不能单独一行,即console=ttyS0是kernel的一个参数,不是单独的

    3、在/etc/inittab中添加agetty:

    S0:12345:respawn:/sbin/agetty ttyS0 115200

    4、重启客户机:

     reboot

    kvm虚拟机的重命名 

    1、查看所有的kvm虚拟机

    virsh list --all

     Id    名称                         状态

    ----------------------------------------------------

     -     rhel6                        关闭

    2、重命名kvm虚拟机最好是将虚拟机先关机,然后再导出其xml文件

    cd /etc/libvirt/qemu

    virsh dumpxml rhel6 > CentOS02.xml

    3、为了让重命名后的虚拟机名字与磁盘文件名一致、我们可以先将之前的磁盘文件命名成CentOS02.img

    cd /var/lib/libvirt/images

    mv rhel6.1.img CentOS02.img

    4、编辑CentOS02.xml文件,修改<name>标签对以及磁盘文件,这里我们将磁盘文件修改成CentOS02.img

    <domain type='kvm'>

      <name>CentOS02</name>

          ......  

       ...省略......

          ......

      <disk type='file' device='disk'>

          <driver name='qemu' type='raw' cache='none'/>

      <source file='/var/lib/libvirt/images/CentOS02.img'/>

    5、使用virsh undefine命令删除之前的虚拟机,根据新的xml文件定义新的kvm虚拟机

    virsh undefine  rhel6 ////删除rhel6虚拟机

    virsh define /etc/libvirt/qemu/CentOS02.xml    //重新定义新的kvm虚拟机

    6、最后我们可以再次使用virsh list --all命令查看,结果如下所示

    Id    名称                         状态

    ----------------------------------------------------

     -     CentOS02                       关闭

    经过如上方法重命名的kvm机直接启动使用即可,不会影响udev动态管理设备的文件。和之前的虚拟机相比、仅仅就是名字变了而已。

    设置步骤如下:

      1、以联想t420为例,开机后按F2进入bios设置;

      2、选择Security选项;

      3、选择Virtualization,回车进入;

      4、按+键修改俩个选项为enabled;

      5、按F10,输入y保存退出即可。

  • 相关阅读:
    Java学习-043-获取文件在目录中的路径
    Java学习-042-获取目录文件列表(当前,级联)
    Java学习-041-颜色工具类(RGB,HEX)
    JS-011-颜色进制转换(RGB转16进制;16进制转RGB)
    Maven-010-maven 编译报错:Failure to ... in ... was cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or updates are forced.
    Maven-009-Nexus 用户密码加密(安全必须)
    Maven-008-Nexus 私服部署发布报错 Failed to deploy artifacts: Failed to transfer file: ... Return code is: 4XX, ReasonPhrase: ... 解决方案
    Fiddler-009-AutoResponder 简单的 MOCK SERVER 应用实例
    Maven-007-Nexus 用户添加,用户角色分配,用户修改密码,管理员重置用户密码
    Maven-006-手动部署第三方构件至 nexus 私服
  • 原文地址:https://www.cnblogs.com/klb561/p/9005207.html
Copyright © 2020-2023  润新知