• Linux系统下KVM虚拟机的基本管理和操作


    一、检查本地环境

    1.检查系统版本

    [root@serer1 ~]# cat /etc/os-release 
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.检查防火墙状态

    [root@serer1 ~]# systemctl status firewalld
    ● firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
       Active: inactive (dead) since Wed 2022-10-19 00:09:43 CST; 7s ago
         Docs: man:firewalld(1)
     Main PID: 642 (code=exited, status=0/SUCCESS)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.检查selinux

    [root@serer01 ~]# getenforce 
    Disabled
    
    • 1
    • 2

    3.检查libvirtd服务状态

    [root@server ~]# systemctl status libvirtd
    ● libvirtd.service - Virtualization daemon
       Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
       Active: active (running) since Sun 2022-10-16 17:53:24 CST; 2 days ago
         Docs: man:libvirtd(8)
               https://libvirt.org
     Main PID: 29472 (libvirtd)
        Tasks: 18 (limit: 32768)
       Memory: 34.8M
       CGroup: /system.slice/libvirtd.service
               └─29472 /usr/sbin/libvirtd --listen
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4.检查kvm安装结果

    [root@server ~]# lsmod|grep kvm
    kvm_intel             183621  4 
    kvm                   586948  1 kvm_intel
    irqbypass              13503  3 kvm
    
    • 1
    • 2
    • 3
    • 4

    5.检查kvm虚拟机状态

    [root@server ~]# virsh -c qemu:///system list
     Id    Name                           State
    ----------------------------------------------------
     9     kvm01                          running
    
    • 1
    • 2
    • 3
    • 4

    6.检查virsh版本

    [root@server ~]# virsh --version
    4.5.0
    [root@server ~]# virt-install --version
    1.5.0
    
    • 1
    • 2
    • 3
    • 4

    二、virsh常用命令

    1.列出虚拟机

    [root@server ~]# virsh list
     Id    Name                           State
    ----------------------------------------------------
     9     kvm01                          running
    
    [root@server ~]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     9     kvm01                          running
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.虚拟机开关机操作

    virsh start kvm01    #虚拟机开机
    virsh shutdown kvm01  #关闭虚拟机
    virsh destroy kvm01  # 强制停止虚拟机
    
    • 1
    • 2
    • 3

    3.删除虚拟机

    virsh undefine kvm01  #彻底销毁虚拟机,会删除虚拟机配置文件,但不会删除虚拟磁盘
    
    • 1

    4.设置虚拟机在宿主机开机时自启

    virsh autostart kvm01    # 宿主机开启时自启
    virsh autostart --disable  kvm01   #  取开机自启
    
    • 1
    • 2

    5.挂起虚拟机

    virsh suspend  kvm01    # 挂起虚拟机
    virsh resume  kvm01       #   恢复挂起的虚拟机
    
    • 1
    • 2

    6.查看虚拟机的配置文件

    [root@server ~]# virsh dumpxml kvm01 
    <domain type='kvm' id='9'>
      <name>kvm01</name>
      <uuid>65438c9d-81cd-cd83-01de-77a5ed5af051</uuid>
      <description>None</description>
      <memory unit='KiB'>1048576</memory>
      <currentMemory unit='KiB'>1048576</currentMemory>
      <vcpu placement='static'>2</vcpu>
      <resource>
        <partition>/machine</partition>
      </resource>
      <os>
        <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
        <boot dev='hd'/>
        <boot dev='cdrom'/>
        <bootmenu enable='yes'/>
      </os>
      <features>
        <acpi/>
        <apic/>
        <pae/>
      </features>
      <cpu mode='custom' match='exact' check='full'>
        <model fallback='forbid'>IvyBridge-IBRS</model>
        <vendor>Intel</vendor>
        <feature policy='disable' name='ds'/>
        <feature policy='disable' name='acpi'/>
        <feature policy='require' name='ss'/>
        <feature policy='disable' name='ht'/>
        <feature policy='disable' name='tm'/>
        <feature policy='disable' name='pbe'/>
        <feature policy='disable' name='dtes64'/>
        <feature policy='disable' name='monitor'/>
        <feature policy='disable' name='ds_cpl'/>
        <feature policy='disable' name='vmx'/>
        <feature policy='disable' name='est'/>
        <feature policy='disable' name='tm2'/>
        <feature policy='disable' name='xtpr'/>
        <feature policy='disable' name='pdcm'/>
        <feature policy='require' name='movbe'/>
        <feature policy='disable' name='osxsave'/>
        <feature policy='disable' name='arat'/>
        <feature policy='disable' name='tsc_adjust'/>
        <feature policy='require' name='rdseed'/>
        <feature policy='require' name='smap'/>
        <feature policy='require' name='clflushopt'/>
        <feature policy='require' name='clwb'/>
        <feature policy='disable' name='intel-pt'/>
        <feature policy='require' name='sha-ni'/>
        <feature policy='require' name='umip'/>
        <feature policy='require' name='gfni'/>
        <feature policy='disable' name='md-clear'/>
        <feature policy='require' name='stibp'/>
        <feature policy='require' name='ssbd'/>
        <feature policy='require' name='xsaveopt'/>
        <feature policy='require' name='xsavec'/>
        <feature policy='require' name='xgetbv1'/>
        <feature policy='require' name='3dnowprefetch'/>
        <feature policy='disable' name='avx'/>
        <feature policy='disable' name='f16c'/>
        <feature policy='require' name='hypervisor'/>
      </cpu>
      <clock offset='utc'/>
      <on_poweroff>destroy</on_poweroff>
      <on_reboot>restart</on_reboot>
      <on_crash>restart</on_crash>
      <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/nas/kvm/centos_kvm.img'/>
          <backingStore/>
          <target dev='vda' bus='virtio'/>
          <alias name='virtio-disk0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
        </disk>
        <disk type='file' device='cdrom'>
          <driver name='qemu' type='raw'/>
          <source file='/storage/kvm/CentOS-7-x86_64-Minimal-1511.iso'/>
          <backingStore/>
          <target dev='hda' bus='ide'/>
          <readonly/>
          <alias name='ide0-1-1'/>
          <address type='drive' controller='0' bus='1' target='0' unit='1'/>
        </disk>
        <controller type='usb' index='0' model='piix3-uhci'>
          <alias name='usb'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
        </controller>
        <controller type='pci' index='0' model='pci-root'>
          <alias name='pci.0'/>
        </controller>
        <controller type='ide' index='0'>
          <alias name='ide'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
        </controller>
        <interface type='bridge'>
          <mac address='52:54:00:6c:cb:10'/>
          <source network='br0' bridge='br0'/>
          <target dev='vnet0'/>
          <model type='virtio'/>
          <alias name='net0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
        <serial type='pty'>
          <source path='/dev/pts/0'/>
          <target type='isa-serial' port='0'>
            <model name='isa-serial'/>
          </target>
          <alias name='serial0'/>
        </serial>
        <console type='pty' tty='/dev/pts/0'>
          <source path='/dev/pts/0'/>
          <target type='serial' port='0'/>
          <alias name='serial0'/>
        </console>
        <input type='mouse' bus='ps2'>
          <alias name='input0'/>
        </input>
        <input type='tablet' bus='usb'>
          <alias name='input1'/>
          <address type='usb' bus='0' port='1'/>
        </input>
        <input type='keyboard' bus='ps2'>
          <alias name='input2'/>
        </input>
        <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0'>
          <listen type='address' address='0.0.0.0'/>
        </graphics>
        <video>
          <model type='cirrus' vram='16384' heads='1' primary='yes'/>
          <alias name='video0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
        </video>
        <memballoon model='virtio'>
          <alias name='balloon0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
        </memballoon>
      </devices>
      <seclabel type='dynamic' model='dac' relabel='yes'>
        <label>+107:+107</label>
        <imagelabel>+107:+107</imagelabel>
      </seclabel>
    </domain>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144

    7.对虚拟机配置文件操作

    virsh edit vm-name  #修改虚拟机的配置文件
    virsh define file-name.xml  #根据配置文件定义虚拟机
    
    • 1
    • 2

    8.查看KVM虚拟机相关配置文件

    [root@server ~]# ls /etc/libvirt/qemu/
    autostart  kvm01.xml  networks
    [root@server ~]# ls /etc/libvirt/qemu/networks/
    autostart  br0.xml
    [root@server ~]# ls /etc/libvirt/qemu/networks/autostart/
    br0.xml
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    三、KVM虚拟机的磁盘管理

    1.查看磁盘格式

    [root@server ~]# qemu-img info /nas/kvm/centos_kvm.img 
    image: /nas/kvm/centos_kvm.img
    file format: qcow2
    virtual size: 40G (42949672960 bytes)
    disk size: 2.2G
    cluster_size: 65536
    Format specific information:
        compat: 0.10
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.将raw格式磁盘文件转化为qcow2

    
    $ qemu-img convert -f raw -O qcow2  /data/centos7.raw  /data/centos7.qcow
    # qemu-img covert -f 源格式 -O 目标格式   源磁盘文件   目标磁盘文件
    
    • 1
    • 2
    • 3

    3.创建空的qcow2格式的磁盘文件

    [root@server kvm]# qemu-img create -f qcow2 /nas/kvm/test.qcow2 5G
    Formatting '/nas/kvm/test.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off 
    [root@server kvm]# qemu-img info /nas/kvm/test.qcow2 
    image: /nas/kvm/test.qcow2
    file format: qcow2
    virtual size: 5.0G (5368709120 bytes)
    disk size: 196K
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4.修改镜像文件大小

    
    [root@server kvm]# qemu-img resize ./test.qcow2 +7G
    Image resized.
    [root@server kvm]# qemu-img info /nas/kvm/test.qcow2 
    image: /nas/kvm/test.qcow2
    file format: qcow2
    virtual size: 12G (12884901888 bytes)
    disk size: 200K
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5.给虚拟机新增硬盘——临时生效

    virsh attach-disk kvm01 /nas/kvm/test.qcow2 vdb --subdriver=qcow2
    # virsh  attach-disk  <虚拟机名称>  <新增磁盘路径>  <设备名>  <磁盘格式类型>
    
    
    • 1
    • 2
    • 3

    6.给虚拟机新增硬盘——永久生效

    virsh attach-disk kvm01 /nas/kvm/test.qcow2 vdb --subdriver=qcow2  --config
    
    • 1

    7.卸载硬盘

    virsh detach-disk kvm01 /nas/kvm/test.qcow2    #卸载临时生效
    virsh detach-disk kvm01  /nas/kvm/test.qcow2  --config      # 卸载永久生效
    
    • 1
    • 2

    8.查看虚拟机硬件情况

    [root@server kvm]# virsh dumpxml kvm01 |grep  dev
        <boot dev='hd'/>
        <boot dev='cdrom'/>
      <devices>
        <disk type='file' device='disk'>
          <target dev='vda' bus='virtio'/>
        <disk type='file' device='disk'>
          <target dev='vdb' bus='virtio'/>
        <disk type='file' device='cdrom'>
          <target dev='hda' bus='ide'/>
          <target dev='vnet0'/>
          <source path='/dev/pts/0'/>
        <console type='pty' tty='/dev/pts/0'>
          <source path='/dev/pts/0'/>
      </devices>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    9.在WebVirtMgr上查看虚拟机硬盘新增情况

    image.png

    四、KVM虚拟机的网卡管理

    1.查看网卡

    [root@server kvm]# virsh domiflist kvm01
    Interface  Type       Source     Model       MAC
    -------------------------------------------------------
    vnet0      bridge     br0        virtio      52:54:00:6c:cb:10
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.新增网卡

    [root@server kvm]# virsh attach-interface kvm01 --type bridge --source br0 
    Interface attached successfully
    
    
    • 1
    • 2
    • 3

    3.使新增网卡生效

    [root@server kvm]# virsh dumpxml kvm01 > /etc/libvirt/qemu/kvm01.xml 
    [root@server kvm]# virsh define /etc/libvirt/qemu/kvm01.xml 
    Domain kvm01 defined from /etc/libvirt/qemu/kvm01.xml
    
    
    • 1
    • 2
    • 3
    • 4

    4.虚拟机查看新增网卡

    [root@server kvm]# ssh root@192.168.3.169
    The authenticity of host '192.168.3.169 (192.168.3.169)' can't be established.
    ECDSA key fingerprint is SHA256:SMUWtN77SI+zUIX2bBR7/hY176zJLiWvY7KpIUlK0dw.
    ECDSA key fingerprint is MD5:df:58:7e:61:73:82:b5:56:03:25:60:f1:80:a6:b1:0b.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.3.169' (ECDSA) to the list of known hosts.
    root@192.168.3.169's password: 
    Last login: Tue Oct 18 23:19:15 2022 from 192.168.3.11
    [root@serer01 ~]# ip add
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 52:54:00:6c:cb:10 brd ff:ff:ff:ff:ff:ff
        inet 192.168.3.169/24 brd 192.168.3.255 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::5054:ff:fe6c:cb10/64 scope link 
           valid_lft forever preferred_lft forever
    3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
        link/ether 02:42:5d:4a:c4:9f brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
        inet6 fe80::42:5dff:fe4a:c49f/64 scope link 
           valid_lft forever preferred_lft forever
    5: veth0604e80@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP 
        link/ether be:7f:bd:57:88:71 brd ff:ff:ff:ff:ff:ff link-netnsid 0
        inet6 fe80::bc7f:bdff:fe57:8871/64 scope link 
           valid_lft forever preferred_lft forever
    6: ens7: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
        link/ether 52:54:00:45:1b:53 brd ff:ff:ff:ff:ff:ff
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    5.删除网卡

    需要将虚拟机关机再进行删除网卡操作

    [root@server kvm]# virsh detach-interface kvm01 --type bridge --mac 52:54:00:45:1b:53 --config
    Interface detached successfully
    
    [root@server kvm]# virsh dumpxml kvm01 > /etc/libvirt/qemu/kvm01.xml
    [root@server kvm]# virsh define /etc/libvirt/qemu/kvm01.xml
    Domain kvm01 defined from /etc/libvirt/qemu/kvm01.xml
    
    [root@server kvm]# virsh domiflist kvm01
    Interface  Type       Source     Model       MAC
    -------------------------------------------------------
    -          bridge     br0        virtio      52:54:00:6c:cb:10
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    五、KVM虚拟机的快照管理

    1.创建快照

    [root@server kvm]# virsh snapshot-create kvm01
    Domain snapshot 1666155063 created
    
    
    • 1
    • 2
    • 3

    2.查看快照列表

    [root@server kvm]# virsh snapshot-list kvm01
     Name                 Creation Time             State
    ------------------------------------------------------------
     1666155063           2022-10-19 12:51:03 +0800 shutoff
    
    • 1
    • 2
    • 3
    • 4

    3.查看快照信息

    [root@server kvm]# virsh snapshot-info kvm01 --current 
    Name:           1666155063
    Domain:         kvm01
    Current:        yes
    State:          shutoff
    Location:       internal
    Parent:         -
    Children:       0
    Descendants:    0
    Metadata:       yes
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4.查看快照目录

    [root@server kvm]#  ll /var/lib/libvirt/qemu/snapshot/
    total 0
    drwxr-xr-x 2 root root 28 Oct 19 12:51 kvm01
    [root@server kvm]#  ll /var/lib/libvirt/qemu/snapshot/kvm01/
    total 8
    -rw------- 1 root root 5550 Oct 19 12:51 1666155063.xml
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5.删除快照

    [root@server kvm]#  virsh snapshot-delete kvm01 1666155063
    Domain snapshot 1666155063 deleted
    
    • 1
    • 2

    6.恢复快照

    virsh snapshot-revert kvm01  1666155063  --running
    
    
    • 1
    • 2

    7.snapshot-revert用法

    snapshot-revert用法:snapshot-revert [] [–current] [–running] [–paused] [–force]

    选项:
         [--domain] <string> :指定domain名称,id或者uuid
         [--snapshotname] <string> : 指定快照名称
         --current  :恢复到当前快照
         --running :在恢复快照后自动运行虚拟机
         --paused  :在恢复快照后自动暂停虚拟机
         --force  :强制执行快照,有风险的恢复选项
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    MILP(混合整数线性规划)
    压力测试有哪些评价指标
    Vision Transformer (ViT)的原理讲解与后续革新【附上pytorch的代码!】
    HarmonyOS Next开发学习手册——ExtensionAbility
    [python 刷题] 981 Time Based Key-Value Store
    亚马逊、ebay、沃尔玛卖家打造爆款如何利用测评提高转化率?
    【H5写雷达图】使用h5写雷达图等动态图表(两种方式实现)
    LayUI之增加和查询
    ASEMI代理艾赛斯二极管DSA300I100NA,肖特基DSA300I100NA
    是时候为Spring Boot 3.0做准备了
  • 原文地址:https://blog.csdn.net/jks212454/article/details/128113480