• CentOS7.4使用KVM


    参考地址

    [root@node1 ~]# cat /etc/centos-release

    CentOS Linux release 7.4.1708 (Core)
    [root@node1 ~]# uname -r
    3.10.0-693.el7.x86_64


    虚拟机IP:192.168.1.201

    查看CPU是否支持VT功能
    [root@node1 ~]# egrep '(vmx|svm)' /proc/cpuinfo
    注:如返回内容则说明已经开启,如未返回内容则需要在主板的BIOS中开启虚拟化
    [root@node1 ~]# lsmod |grep kvm         # 确定是否正确加载kvm模块


    在CentOS 7上安装KVM
    yum -y install qemu-kvm qemu-img virt-manager libvirt libvirt-python libvirt-client virt-install virt-viewer
    注:
    qemu-kvm = QEMU模拟器
    qemu-img = QEMU磁盘映像管理器
    virt-install = 用于创建虚拟机的命令行工具。
    libvirt = 提供管理虚拟机和控制虚拟机管理程序的libvirtd守护程序。
    libvirt-client = 提供用于访问服务器的客户端API,还提供virsh实用程序,该实用程序提供命令行工具来管理虚拟机。
    virt-viewer = 图形控制台


    systemctl enable libvirtd      # 将libvitd服务加入开机自启
    systemctl start libvirtd       # 启动libvitd服务
    systemctl status libvirtd       # 查看libvitd服务的状态

    #============================ 按需项,centos7.4已自带 ============================
    检查桥网模块:
    [root@node1 ~]# modprobe --first-time bridge
    modprobe: ERROR: could not insert 'bridge': Module already in kernel
    译:modprobe:错误:无法插入'bridge':模块已经在内核中
    安装桥网模块:
    [root@node1 ~]# yum -y install bridge-utils  && modinfo bridge
    #============================ 按需项 ==========================================


    创建网桥:
    [root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-virbr0
    DEVICE="virbr0"
    BOOTPROTO="static"
    IPADDR="192.168.1.201"     #改成这个IP才能使用类似xshell的工具连上去
    NETMASK="255.255.255.0"
    GATEWAY="192.168.1.1"
    DNS1=192.168.1.1
    NBOOT="yes"
    TYPE="Bridge"

    [root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
    DEVICE="ens33"
    ONBOOT="yes"
    BRIDGE=virbr0


    [root@node1 ~]# reboot

    开启转发功能并修改ulimit参数
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo "* soft nproc 65500" >>/etc/security/limits.conf
    echo "* hard nproc 65500" >>/etc/security/limits.conf
    echo "* soft nofile 65500" >>/etc/security/limits.conf
    echo "* hard nofile 65500" >>/etc/security/limits.conf

    #============================ 按需项 ==========================================
    拷贝镜像:
    [root@node1 ~]# dd if=/dev/sr0 of=/mnt/usb2/centos7.iso
    注1:/dev/sr0里面是centos7的iso镜像,of后面是输出到哪里并自定义一个以iso结尾的名字
    注2:也可以直接使用iso文件,该方法也可以制作win镜像
    #============================ 按需项 ==========================================

    创建虚拟机硬盘:
    mkdir /kvmdir      # 创建虚拟硬盘的存放位置
    qemu-img create -f qcow2 /kvmdir/opop.img 500G       # 创建一个500G的qcow2格式并且名为opop的镜像
    ls -al /kvmdir/     # 查看镜像
    -rw-r--r-- 1 root root 197632 5月 2 09:39 opop.img

    sed -i "s/#spice_tls = 1/spice_tls = 1/" /etc/libvirt/qemu.conf
    sed -i "s/#spice_listen/spice_listen/" /etc/libvirt/qemu.conf
    sed -i "s/#vnc_listen/vnc_listen/" /etc/libvirt/qemu.conf

    sed -i "s/#user = "root"/user = "root"/" /etc/libvirt/qemu.conf
    sed -i "s/#group = "root"/group = "root"/" /etc/libvirt/qemu.conf 

     sed -i "s/#dynamic_ownership = 1/dynamic_ownership = 1/" /etc/libvirt/qemu.conf

    创建虚拟机(以图片为准)
    virt-install用于使用命令行模式创建虚拟机,此命令需要我们的多个输入来创建虚拟机,如CPU,内存,磁盘,网络,安装介质位置,操作系统变体等。

    [root@node1 ~]# virt-install --name opop --memory 512 --vcpus=1
    --cdrom=/mnt/usb2/centos7.iso --os-variant=rhel7 --boot=hd,cdrom --disk path=/kvmdir/oppo.img,format=qcow2,bus=virtio,size=50
    --network default,model='e1000' --graphics vnc,password=123456,listen=0.0.0.0 --noautoconsole --os-type=linux

    注意:上述命令使用桥接网络“virbr0”允许虚拟机与外部网络通信,您可以找到有关使用Virt Manager创建桥接网络的教程。

    --name = 虚拟机的名称
    --memory = 以MB为单位的内存大小
    --vcpus = 虚拟CPU的数量
    --cdrom = ISO映像的位置
    --os-type = Linux,Windows等操作系统类型
    --os-variant = 操作系统变体,如RHEL 6,Solaris
    --boot = 客户机引导设置,这里需要注意,显示hd再是cdrom,和windows里面的引导同理
    --disk = 指定客户机的硬盘位置,没有缓存,大小为50G(图中创建的大小)
    --network = 网络,网卡的定义和速率
    --graphics = 访客显示设置,密码、端口等
    --os-type = 客户机的系统类型

    #=============================================================================================================
    报错1:
    ERROR internal error: process exited while connecting to monitor: Cannot set up guest memory 'pc.ram': Cannot allocate memory
    解决办法:
    # vim /etc/libvirt/qemu.conf
    user = “root”      # 该项去星号
    group = "root"    # 该项去星号
    # 这个问题是你的虚拟机的内存有点小,虚拟机的内存小的同时还再来带一台机器,肯定带不起来所以会报错。
    #刚开始我设置的内存是24G(出错),后来设置成16G(出错),后来设置成10G(也出错了),后来设置成2G能起来了
    #后来我把VMware的内存调到32G后就能正常的创建4G内存的虚机了
    报错2:
    错误:将插槽连接到 '/var/run/libvirt/libvirt-sock' 失败: 没有那个文件或目录
    解决办法:
    systemctl status libvirtd           查看该服务状态
    systemctl start libvirtd              启动该服务
    systemctl enable libvirtd          开机自启动

    #=====================================================================================================

    使用VNC连接:

    注:上面不用写Username

     安装完系统后会停止(如下):

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

    注:该图和上下文不匹配,仅供说明

    需要手动再次启动:

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

    最后的启动效果:

     其他说明:

     

     为虚拟机生成快照(以图片为准)

    在2g-1这台虚机上创建一个目录,来测试下恢复快照方面....

     

    恢复快照

     

    查看

     

     删除快照

    kvm文件默认路径:
        cd /etc/libvirt/qemu
    磁盘文件默认路径:
        cd /var/lib/libvirt/images/
    kvm虚拟机开机自启动目录:
        /etc/libvirt/qemu/autostart
        virsh autostart <虚机名>       # 这个是命令
    默认情况下virsh工具不能对linux虚拟机进行关机操作,linux操作系统需要开启与启动acpid服务:
        chkconfig acpid on
        service acpid restart
    关机:
        virsh shutdown <虚机名>
    强制关闭电源
        virsh destroy <虚机名>
    导出KVM虚拟机配置文件
        virsh dumpxml <虚机名> > /etc/libvirt/qemu/wintest02.xml   # 可以通过这种方式进行备份
    删除kvm虚拟机
        virsh undefine <虚机名>
    编辑KVM虚拟机配置文件:
        vim /etc/libvirt/qemu/<虚机名>.xml 或者 virsh edit <虚机名>
    挂起虚拟机:
        virsh suspend <虚机名>
    恢复服务器
        virsh resume <虚机名>

     显示所有虚机

        virsh list      --all

     虚机日志文件

        /var/log/libvirt/qemu/****.log

     虚机硬盘位置

        自定义

         

    欢迎加入QQ群一起讨论Linux、开源等技术

  • 相关阅读:
    jqueryautocomplete
    了解CSS的查找匹配原理 让CSS更简洁、高效
    html5网页编码
    刚开始学习 mvc碰到的郁闷问题
    datatable 批量插入方法 求解?
    28个经过重新设计的著名博客案例(1120)
    递归调用中的return
    C++新建一个模板
    C++ 中用 sizeof 判断数组长度
    为什么MySQL选择REPEATABLE READ作为默认隔离级别?
  • 原文地址:https://www.cnblogs.com/smlile-you-me/p/10689602.html
Copyright © 2020-2023  润新知