• 搜索
  • 夜间模式
    ©2015-2025  Ethan's Blog Theme by OneBlog
    搜索
    标签
    # Amule # Gargoyle # LUCI # VIM # Python # Nginx # 反代 # Ansible # Apache # LNMP
  • 首页>
  • Linux>
  • 正文
  • CentOS7 KVM备忘

    2020年03月25日 26 阅读 0 评论 6003 字

    之前看过KVM的相关文章,也用来搭起过一台装机服务器,时间过得久了,服务器没了,KVM怎么用的也忘了,是时候记录一下如何使用KVM了。

    安装KVM组件

    yum -y install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer

    修改VNC侦听地址

    vim /etc/libvirt/qemu.conf 

    默认只侦听127.0.0.1,需要将listen=0.0.0.0的注释去掉,否则无法在其他机器上使用VNC连接KVM虚拟机

    完成后将libvirtd服务设置成自启动

    systemctl enable libvirtd
    systemctl start libvirtd

    创建桥接网卡

    如果虚拟机要接入网络,则需要一个虚拟网卡与物理网卡进行通信,不管是NAT模式还是桥接模式,而我主要使用桥接模式,所以这里也是创建一个桥接网卡,并将其也物理网卡桥接关联,使得虚拟机可以直接连接到物理网络。

    vim /etc/sysconfig/network-scripts/ifcfg-br0 

    该文件内容如下

    DEVICE="br0"
    ONBOOT="yes"
    TYPE="Bridge"
    BOOTPROTO="dhcp"
    DEFROUTE=yes

    然后修改当前物理网卡配置,假设我的物理网卡名称为enp5s0

    vim /etc/sysconfig/network-scripts/ifcfg-enp5s0

    将其内容改为如下:

    TYPE="Ethernet"
    #PROXY_METHOD="none"
    BROWSER_ONLY="no"
    #BOOTPROTO="dhcp"
    #DEFROUTE="yes"
    #IPV4_FAILURE_FATAL="no"
    #IPV6INIT="yes"
    #IPV6_AUTOCONF="yes"
    #IPV6_DEFROUTE="yes"
    #IPV6_FAILURE_FATAL="no"
    #IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="enp5s0"
    UUID="5b4aad9b-5445-478d-9ba3-8202dc83d65b"
    DEVICE="enp5s0"
    ONBOOT="yes"
    BRIDGE="br0"

    注释掉的是之前的配置,只需要将其桥接到br0网卡就行,完成后使用systemctl restart network命令重启网络服务。

    使用brctl show命令可以看到当前KVM虚拟网卡

    bridge name     bridge id               STP enabled     interfaces
    br0             8000.5cf3fc4ae532       no              enp5s0
                                                            vnet0
    virbr0          8000.525400f27743       yes             virbr0-nic

    创建磁盘文件

    创建安装虚拟机所需的磁盘文件,这里默认使用qcow2格式,因为网络上说qcow2格式是kvm支持的标准格式,raw格式为虚拟磁盘文件通用格式。有测试数据表明raw格式的I/O性能略高于qcow2格式,但是在加密,容量,快照方面qcow2格式有优势,所以现在大多使用qcow2格式,至于其他格式请自行Google。

    qemu-img create -f qcow2 /opt/kvm/test.qcow2 10G 
    #创建一个qcow2格式磁盘文件
    
    qemu-img create -f raw test.raw 20G 
    #创建一个RAW格式磁盘文件
    
    qemu-img info test.qcow2  
    #查看创建的虚拟磁盘文件

    创建虚拟机

    使用上面的命令创建好磁盘后,使用以下命令创建对应的虚拟机

    virt-install -n meeting --memory 1024 --vcpus 2 --os-variant centos7.0 --cdrom /home/CentOS-7-x86_64-Minimal-1908.iso --disk /opt/kvm/test.qcow2,format=qcow2,bus=virtio,size=10 --graphics vnc  --network bridge=br0

    详细的参数可以使用virt-install --help进行查看,其中--os-variant参数跟的值需要对应你要安装的系统,具体可以使用osinfo-query os命令进行查询,我依稀还记得上一次用这个命令的时候输出是没有当前那么多的。

    回车后会提示让你等待完成安装,不要傻傻的等,拿出你的VNC Viewer工具连接到KVM宿主机即可开始进行安装,否则你等到天荒地老也不可能完成安装。

    Virsh语法参考(centos为KVM名字)

    virsh list --all             列出所有的虚拟机
    virsh start centos           启动centos虚拟机
    virsh shutdown centos        关闭centos虚拟机
    virsh destroy centos         强制关闭centos虚拟机
    virsh autostart centos       设置centos自动启动
    virsh undefine centos        删除centos虚拟机
    virsh suspend centos         暂停centos虚拟机
    vrish resume centos          恢复centos虚拟机
    virsh reboot centos          重启centos虚拟机
    virsh edit centos            编辑centos虚拟机
    virsh vncdisplay  centos     vnc显示

    销毁KVM虚拟机

    如果需要删除某台kvm虚拟机,可以使用一下命令完成

    virsh shutdown centos
    virsh destory centos
    virsh undefine centos

    磁盘扩容

    如果后期虚拟机磁盘容量不够用,那么久需要扩容了,首先安装以下包

    yum -y install libguestfs-tools

    将虚拟机关机后将磁盘文件备份防止数据丢失,并用以下命令查看分区大小

    virt-df -h test.qcow2
    W: kvm binary is deprecated, please use qemu-system-x86_64 instead
    Filesystem                                Size       Used  Available  Use%
    test.qcow2:/dev/sda1                       18G       1.1G        16G    6%

    创建新的磁盘文件并将旧的磁盘与新的磁盘文件合并

    qemu-img create -f qcow2 test-big.qcow2 40G
    virt-resize --expand /dev/sda1 test.qcow2 test-big.qcow2

    完成后用test-big.qcow2替换test.qcow2即可,然后重启虚拟机。

    若新磁盘文件过大,用以下命令转存缩小大小

    qemu-img convert -O qcow2 test-big.qcow2 test.qcow2 

    完成后同样替换文件重启虚拟机即可。

    小脚本:

    echo "Notice: if you want to use default value, press Enter directly, otherwise input your value."
    
    read -p "VM Name:" name
    
    read -p "RAM Size:" memory
    if [ $memory -gt 0 ] 2>/dev/null;then
            echo "pass"
    else echo "invalid value"
    exit
    fi
    
    read -p "CPU Croe:" vcpus
    if [ $vcpus -gt 0 ] 2>/dev/null;then
            echo "pass"
    else echo "invalid value"
    exit
    fi
    
    #while [[ $vcpus -lt 0 ]]; do
    #       echo "invalid data,input again"
    #       read -p "CPU Croe:" vcpus
    #done
    
    read -p "OS Type:" variant
    
    read -p "ISO with path:" path
    
    read -p "Disk name with path(e.g. /opt/kvm/win7.qcow2):" disk
    
    read -p "Disk format(qcow2 default):" format
    if [ -Z $formate ]; then
            formate="qcow2"
    fi
    
    read -p "Bus type(virtio defalut):" bus
    if [ -Z $bus ];then
            bus="virtio"
    fi
    
    read -p "Disk Size:" size
    if [ $size -gt 0 ] 2>/dev/null;then
            echo "pass"
    else echo "invalid value"
    exit
    fi
    
    read -p "Win vfd with path, null defalut( e.g. /home/virtio-win-0.1.141_amd64.vfd):" vfd
    
    read -p "graphics(vnc default):" graphics
    if [ -Z $graphics ];then
            graphics="vnc"
    fi
    
    read -p "Network type(bridge=br0 default):" network
    if [ -Z $network ];then
            network="bridge=br0"
    fi
    
    normal(){
    echo "virt-install -n ${name} --memory ${memory} --vcpus ${vcpus} --os-variant ${variant} --cdrom ${path} --disk ${disk},format=${format},bus=${bus},size=${size} --graphics ${graphics}  --network ${network}"
    virt-install -n ${name} \
    --memory ${memory} \
    --vcpus ${vcpus} \
    --os-variant ${variant} \
    --cdrom ${path} \
    --disk ${disk},format=${format},bus=${bus},size=${size} \
    --graphics ${graphics}  \
    --network ${network}
    }
    
    win(){
    echo "virt-install -n ${name} --memory ${memory} --vcpus ${vcpus} --os-variant ${variant} --cdrom ${path} --disk ${disk},format=${format},bus=${bus},size=${size} --disk path=${vfd},device=floppy --graphics ${graphics}  --network ${network}"
    virt-install -n ${name} \
    --memory ${memory} \
    --vcpus ${vcpus} \
    --os-variant ${variant} \
    --cdrom ${path} \
    --disk ${disk},format=${format},bus=${bus},size=${size} \
    --disk path=${vfd},device=floppy \
    --graphics ${graphics}  \
    --network ${network}
    }
    
    if [ -Z $vfd ];then
            normal
    else
            win
    fi
    本文著作权归作者 [ Ethan ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    — END —
    Copyright©2015-2025  All Rights Reserved.  Load:0.009 s
    Theme by OneBlog V3.6.3
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。