zoukankan      html  css  js  c++  java
  • kvm系列之二:kvm日常管理

    日常管理概述

    接着上一篇,这篇博客主要描述kvm日常管理中使用的一些方法和命令。

    kvm的管理主要有以下几个方面:

    • kvm状态和配置管理:包括kvm虚拟机的开启、关闭、挂起、恢复,配置文件的导出导入和编辑,还有虚拟机重命名等
    • 磁盘管理:包括虚拟机磁盘的创建、信息查看、格式转换、容量更改以及格式化、挂载使用
    • kvm的console连接
    • kvm开机自启动
    • kvm快照和克隆
    • 另外,网络模式更改和热添加技术在下一篇描述

    kvm状态管理

    开启、关闭和查看

    • 状态查看
    [root@kvm1 opt]# virsh list 
     Id    Name                           State
    ----------------------------------------------------
     2     Centos7                        running
    
    [root@kvm1 opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     2     Centos7                        running

    参数说明:加上--all参数可以显示所有虚拟机,如果不加,就不能显示处于关闭状态的虚拟机了。这个在下面关闭虚拟机的例子中演示

    • 关闭
    [root@kvm1 opt]# virsh shutdown Centos7 
    Domain Centos7 is being shutdown
    
    [root@kvm1 opt]# virsh list
     Id    Name                           State
    ----------------------------------------------------
    
    [root@kvm1 opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     -     Centos7                        shut off

    ##还有一种方法,是强制关闭,效果如同拔电源
    [root@timmy ~]# virsh destroy Centos7 
    • 开启
    [root@kvm1 opt]# virsh start Centos7 
    Domain Centos7 started
    
    [root@kvm1 opt]# virsh list
     Id    Name                           State
    ----------------------------------------------------
     3     Centos7                        running
    • 挂起
    [root@kvm1 opt]# virsh suspend Centos7 
    Domain Centos7 suspended
    
    [root@kvm1 opt]# virsh list
     Id    Name                           State
    ----------------------------------------------------
     3     Centos7                        paused
    • 恢复
    [root@kvm1 opt]# virsh resume Centos7 
    Domain Centos7 resumed
    
    [root@kvm1 opt]# virsh list
     Id    Name                           State
    ----------------------------------------------------
     3     Centos7                        running
    • 重启

    [root@kvm1 opt]# virsh reboot Centos7 

    kvm配置导出、导入

    首先,一个kvm虚拟机其实只包含了两个文件,一个是磁盘文件,另一个就是配置文件,只要有这两个文件,就可以把虚拟机迁移到别的宿主机上。

    在本文所用环境中,磁盘文件是构建kvm时生成的,路径也是那时指定的,就在/opt目录下,那么磁盘文件的路径呢?

    [root@kvm1 opt]# ll /opt/*.raw
    -rw------- 1 qemu qemu 10737418240 Feb  3 10:43 /opt/centos2.raw
    [root@kvm1 opt]# ll /etc/libvirt/qemu/*.xml
    -rw------- 1 root root 4075 Feb  3 09:50 /etc/libvirt/qemu/Centos7.xml

    如上就是磁盘文件和配置文件存放的路径。需要说明的是,配置的导入导出不是简单copy文件,而必须使用相应命令。

    • 配置文件导出
    [root@kvm1 opt]# virsh dumpxml Centos7 >Centos7.xml
    ##当前目录会生成导出的xml配置文件 [root@kvm1 opt]#
    ls centos2.raw CentOS-7-x86_64-Minimal-1804.iso Centos7.xml rh
    • 配置文件导入
    ###首先要关闭、删除虚拟机
    [root@kvm1 opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     3     Centos7                        running
    
    [root@kvm1 opt]# virsh destroy Centos7 
    Domain Centos7 destroyed
    
    ##删除虚拟机
    [root@kvm1 opt]# virsh undefine Centos7 
    Domain Centos7 has been undefined
    
    ##查看虚拟机状态,确认配置文件和虚拟机都已经被删除
    [root@kvm1 opt]# ls /etc/libvirt/qemu/
    networks
    [root@kvm1 opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
    
    ##导入配置文件,开启虚拟机
    [root@kvm1 opt]# virsh define Centos7.xml 
    Domain Centos7 defined from Centos7.xml
    ##查看虚拟机状态,确认虚拟机和配置文件都存在
    [root@kvm1 opt]# virsh define Centos7.xml 
    Domain Centos7 defined from Centos7.xml
    
    [root@kvm1 opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     -     Centos7                        shut off
    
    [root@kvm1 opt]# ls /etc/libvirt/qemu/    
    Centos7.xml  networks
    kvm虚拟机配置导入

    当然,最好开启虚拟机并确认运行状态,这里就不贴了

    • 编辑配置文件

    这个我们通过一种模拟场景来说明:

    如果我们修改了磁盘文件的名称,这时启动虚拟机就会发生错误。这时当然可以通过把磁盘名字改回去,但这就是要吵架的节奏了,能这么干我还要拿这个场景来做什么啊?

    那既然问题是因为磁盘真实名称和配置文件名称不一样造成的,那就修改配置文件呗。

    配置文件可以使用vim直接修改,也可以使用专业的修改命令,后者包含了语法检查,所以我们使用后者。

    这个场景的整体模拟如下:

    ###修改磁盘名称,然后启动kvm报错(找不到磁盘文件)
    [root@kvm1 opt]# mv centos2.raw centos.raw  
    [root@kvm1 opt]# virsh start Centos7 
    error: Failed to start domain Centos7
    error: Cannot access storage file '/opt/centos2.raw': No such file or directory
    
    ###修改配置文件,可以和vim一样使用/disk或者/device定位到下面区域
    [root@kvm1 opt]# virsh edit Centos7 
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>
          <source file='/opt/centos.raw'/>   ###这里修改磁盘名字
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </disk>
    
    ###修改后就可以正常启动kvm了
    [root@kvm1 opt]# virsh start Centos7 
    Domain Centos7 started
    [root@kvm1 opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     5     Centos7                        running
    View Code
    • 虚拟机重命名

    这里有两点要说明:一、需要关闭虚拟机后操作;二、早期版本可能不支持重命名,但可以通过修改配置文件来实现

    ##开机状态下修改会报错(无法重命名开机状态的虚拟机)
    [root@kvm1 opt]# virsh domrename Centos7 web01
    error: Requested operation is not valid: cannot rename active domain
    
    ##关机后可以正常重命名
    [root@kvm1 opt]# virsh destroy Centos7 
    Domain Centos7 destroyed
    
    [root@kvm1 opt]# virsh domrename Centos7 web01
    Domain successfully renamed
    
    ##确认状态,虚拟机和配置文件都被重命名了
    [root@kvm1 opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     -     web01                          shut off
    [root@kvm1 opt]# ls /etc/libvirt/qemu
    networks  web01.xml
    View Code
    • 查询vnc端口
    ##显示的是简明方式,在上一篇中有过描述
    [root@kvm1 opt]# virsh vncdisplay web01 
    :0
    View Code

    kvm虚拟机的开机自启动

    实现目标:宿主机开机的时候,目标虚拟机自启动。

    虚拟机的自启动过程描述:一、设置libvirtd自启动,宿主机开机后自动启用libvirtd服务;二、libvirtd服务自动启用模板kvm虚拟机

    实现方式:一、设置libvirtd自启动;二、设置目标kvm虚拟机自启动

    过程如下(其中描述了实现libvirtd自动启用kvm虚拟机的原理):

    ##libvirtd服务自启动
    [root@kvm1 opt]# systemctl is-enabled libvirtd.service 
    enabled
    
    ##设置kvm虚拟机自启动
    [root@kvm1 opt]# virsh autostart web01 
    Domain web01 marked as autostarted
    
    ##虚拟机自启动的原理是创建了如下目录(autostart)和软连接文件
    [root@kvm1 opt]# ls /etc/libvirt/qemu
    autostart  networks  web01.xml
    
    [root@kvm1 opt]# ll /etc/libvirt/qemu/autostart/
    total 0
    lrwxrwxrwx 1 root root 27 Feb  3 11:24 web01.xml -> /etc/libvirt/qemu/web01.xml
    View Code

    重启宿主机,,观察kvm虚拟机自启动效果

    这里有个点要注意:

    经过验证,关闭libvirtd服务,不会影响已经开启的kvm虚拟机
    验证方式:vnc连接虚拟机,关闭libvirtd服务后,vnc还可以正常连接并进行操作

    配置console连接

    这个需要到kvm虚拟机中去配置内核参数,我们目前有两种方式连接到web01(就是正在使用的kvm虚拟机,之前重命名的章节为web01了):一、vnc;二、到vnc找到ip,然后从宿主机ssh过去。

    因为第二种方法可以复制粘贴,我选择第二种,由vnc查找ip的过程就不描述了,直接ssh然后修改,这个过程中顺便把kvm虚拟机的hostname改为web01,方便管理

    ##ssh然后修改,顺便修改虚拟机的hostname
    [root@kvm1 ~]# ssh 192.168.122.67
    ###...输入密码后就可以登入,登入后修改hostname
    [root@localhost ~]# hostnamectl set-hostname web01
    [root@localhost ~]# hostname
    web01
    
    ###首先备份配置文件
    [root@localhost ~]#  cp /boot/grub2/grub.cfg /tmp/
    
    ##修改内核参数,使支持console连接
    [root@localhost ~]# grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
    
    ###有兴趣的话可以对比修改前后的文件,看看都改了些什么
    [root@localhost ~]# diff /boot/grub2/grub.cfg /tmp/grub.cfg 
    100c100
    <       linux16 /vmlinuz-3.10.0-862.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rhgb quiet LANG=en_US.UTF-8 console=ttyS0,115200n8
    ---
    >       linux16 /vmlinuz-3.10.0-862.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rhgb quiet LANG=en_US.UTF-8
    114c114
    <       linux16 /vmlinuz-0-rescue-8b69bd3010d14697b7c01af64f5842f0 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rhgb quiet console=ttyS0,115200n8
    ---
    >       linux16 /vmlinuz-0-rescue-8b69bd3010d14697b7c01af64f5842f0 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rhgb quiet
    
    ###回到宿主机,重启虚拟机
    [root@kvm1 ~]# virsh reboot web01 
    Domain web01 is being rebooted
    
    
    ###重启后验证效果
    [root@kvm1 ~]# virsh console web01 
    Connected to domain web01
    Escape character is ^]
    
    CentOS Linux 7 (Core)
    Kernel 3.10.0-862.el7.x86_64 on an x86_64
    
    web01 login: root
    Password: 
    Last login: Sun Feb  3 11:41:18 from gateway
    [root@web01 ~]# 
    [root@web01 ~]# 
    ##如上,连接成功,按ctrl+]组合键就可以回到宿主机的命令行界面
    View Code

    磁盘管理

    磁盘管理其实就是qemu-img命令的一系列使用,下面描述比较重要的一些选项。

    创建磁盘并使用

    • 创建磁盘
    [root@kvm1 opt]# qemu-img create /opt/timmy.raw 10G   ##默认的格式是raw,如果要创建qcow2格式的磁盘,需要-f参数指定,后面会有描述;10G指定磁盘容量
    Formatting '/opt/timmy.raw', fmt=raw size=10737418240 

    • 查看磁盘信息
    [root@kvm1 opt]# ll *.raw
    -rw------- 1 qemu qemu 10737418240 Feb 3 12:03 centos.raw
    -rw-r--r-- 1 root root 10737418240 Feb 3 11:59 timmy.raw
    
    
    [root@kvm1 opt]# qemu-img info timmy.raw 
    image: timmy.raw
    file format: raw
    virtual size: 10G (10737418240 bytes)
    disk size: 0
    
    ###可以看到,磁盘的容量是10G,但目前size是0
    • 格式化磁盘
    [root@kvm1 opt]# mkfs.xfs /opt/timmy.raw 
    • 挂载
    [root@kvm1 opt]# mkdir /timmy
    [root@kvm1 opt]# df -h|grep timmy
    /dev/loop0       10G   33M   10G   1% /timmy
    • 验证磁盘可用性
    [root@kvm1 ~]# cd /timmy/
    [root@kvm1 timmy]# echo "my name is tim duncan">name.txt
    [root@kvm1 timmy]# cat name.txt
    my name is tim duncan

    创建qcow2格式的磁盘

    大体过程和raw磁盘一样,只是需要指定格式

    [root@kvm1 opt]# qemu-img create -f qcow2 /opt/timmy.qcow2 10G
    
    [root@kvm1 opt]# ll -h *.qcow2           
           
    -rw-r--r-- 1 root root 193K Feb  3 12:11 timmy.qcow2
    [root@kvm1 opt]# qemu-img info /opt/timmy.qcow2 
    image: /opt/timmy.qcow2
    file format: qcow2
    virtual size: 10G (10737418240 bytes)
    disk size: 196K
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    View Code

    改变磁盘容量

    有两种方式:一、直接给定容量值;二、在当前容量基础上增加或减少

    对于第二种方式,qcow2格式的磁盘只支持扩容,不支持缩容,原因可能与其存储原理有关(非连续性)

    要注意的是:生产环境中,就算用的是raw格式,也不要做缩容

    这里我修改的是上面创建的timmy.qcow2文件

    [root@kvm1 opt]# qemu-img resize /opt/timmy.qcow2 +5G
    Image resized.
    
    [root@kvm1 opt]# qemu-img info /opt/timmy.qcow2      
    image: /opt/timmy.qcow2
    file format: qcow2
    virtual size: 15G (16106127360 bytes)
    disk size: 260K
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false

    磁盘格式转换

    首先需要说明:这里的转换是生成了一个新文件,源文件依然存在,并保持原来的格式。操作过程如下

    [root@kvm1 opt]# ll -h *.raw *.qcow2
    -rw------- 1 qemu qemu  10G Feb  3 12:26 centos.raw
    -rw-r--r-- 1 root root 257K Feb  3 12:25 timmy.qcow2
    -rw-r--r-- 1 root root  10G Feb  3 12:09 timmy.raw
    
    ##格式转换命令
    [root@kvm1 opt]# qemu-img convert -f raw -O qcow2 timmy.raw timmy.raw.qcow2
    
    ##查看新生成的磁盘文件
    [root@kvm1 opt]# ll -h *.raw *.qcow2
    -rw------- 1 qemu qemu  10G Feb  3 12:26 centos.raw
    -rw-r--r-- 1 root root 257K Feb  3 12:25 timmy.qcow2
    -rw-r--r-- 1 root root  10G Feb  3 12:09 timmy.raw
    -rw-r--r-- 1 root root 2.9M Feb  3 12:29 timmy.raw.qcow2
    
    [root@kvm1 opt]# qemu-img info timmy.raw.qcow2 
    image: timmy.raw.qcow2
    file format: qcow2
    virtual size: 10G (10737418240 bytes)
    disk size: 3.0M
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    View Code

    修改虚拟机web01的磁盘格式为qcow2

    注意:修改磁盘格式后,磁盘文件的名字和格式都改变了,就如同之前磁盘重命名一样,需要修改配置文件,否则启动时会报错。

    • 修改磁盘格式
    [root@kvm1 opt]# qemu-img convert -f raw -O qcow2 centos.raw centos.qcow2
    [root@kvm1 opt]# ll -h *.raw *.qcow2                                     
    -rw-r--r-- 1 root root 1.3G Feb  3 12:34 centos.qcow2
    -rw------- 1 qemu qemu  10G Feb  3 12:34 centos.raw
    -rw-r--r-- 1 root root 257K Feb  3 12:25 timmy.qcow2
    -rw-r--r-- 1 root root  10G Feb  3 12:09 timmy.raw
    -rw-r--r-- 1 root root 2.9M Feb  3 12:29 timmy.raw.qcow2
    
    [root@kvm1 opt]# qemu-img info centos.qcow2 
    image: centos.qcow2
    file format: qcow2
    virtual size: 10G (10737418240 bytes)
    disk size: 2.0G
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    View Code
    • 修改虚拟机配置文件
     [root@kvm1 opt]# virsh edit web01 
       <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>  ###这里修改磁盘格式
          <source file='/opt/centos.qcow2'/>      ###这里修改磁盘文件路径
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </disk>
    View Code
    • 重启生效

    这里有个问题,是后来做快照的时候发现的:我初次重启使用的是virsh reboot,做快找报错显示不能为raw格式的存储设备做快照;随后用destroy关机再重启就可以了

    • 这里补充一下,也可以在初始构建虚拟机的时候指定磁盘格式
    virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name Centos7 --memory 1024 --vcpus 1 --disk /opt/timmy.qcow2,format=qcow2,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1804.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

    kvm快照

    创建快照

    几点需要说明:

    raw格式的磁盘不支持快照

    kvm虚拟机开启和关闭的时候都可以创建快照

    创建快照后,ll -h查看,磁盘占用空间变大了;但删除快照后查看,磁盘占用空间不会变小,这个就不再单独贴上来了

    [root@kvm1 opt]# virsh snapshot-create web01
    error: unsupported configuration: internal snapshot for disk vda unsupported for storage type raw
    
    ##以上报错,这是web01的磁盘还是raw格式,destroy并重新启动后就可以了
    [root@kvm1 opt]# virsh destroy web01 
    Domain web01 destroyed
    
    [root@kvm1 opt]# virsh start web01 
    Domain web01 started
    
    ##进入virsh交互操作界面
    [root@kvm1 opt]# virsh 
    Welcome to virsh, the virtualization interactive terminal.
    
    Type:  'help' for help with commands
           'quit' to quit
    
    ##创建快照
    virsh # snapshot-create web01
    Domain snapshot 1549169536 created
    ##查看快照
    virsh # snapshot-list web01
     Name                 Creation Time             State
    ------------------------------------------------------------
     1549169536           2019-02-03 12:52:16 +0800 running
    View Code

    删除快照

    virsh # snapshot-create web01
    Domain snapshot 1549169814 created
    virsh # snapshot-list web01  
     Name                 Creation Time             State
    ------------------------------------------------------------
     1549169536           2019-02-03 12:52:16 +0800 running
     1549169814           2019-02-03 12:56:54 +0800 running
    
    ##删除快照
    virsh # snapshot-delete web01 --snapshotname  1549169814
    Domain snapshot 1549169814 deleted
    
    
    ##删除后查看快照列表
    virsh # snapshot-list web01
     Name                 Creation Time             State
    ------------------------------------------------------------
     1549169536           2019-02-03 12:52:16 +0800 running
    View Code

    恢复快照

    进行这个操作前可以进入web01,对其做一些修改,作为恢复快照后的比照。我就是在家目录创建了一个文件,恢复快照后这个文件没有了。这个过程就不贴了。

    恢复快照的命令如下:

    virsh # snapshot-revert web01 --snapshotname  1549169536

    kvm克隆

    kvm的克隆和VMware虚拟机一样,分完整克隆和链接克隆,这里不再详细描述。

    有几点说明:

    克隆操作要求虚拟机处于挂起或者关闭状态

    克隆不包含快照,所以克隆后的磁盘文件可能比源磁盘文件小

    完整克隆

    ##提示必须在关机或者挂起的状态下克隆
    [root@kvm1 opt]# virt-clone --auto-clone -o web01 -n web02
    ERROR    Domain with devices to clone must be paused or shutoff.
    
    ##挂起虚拟机
    [root@kvm1 opt]# virsh suspend web01 
    Domain web01 suspended
    
    ##完整克隆
    [root@kvm1 opt]# virt-clone --auto-clone -o web01 -n web02
    WARNING  Setting the graphics device port to autoport, in order to avoid conflicting.
    Allocating 'centos-clone.qcow2'                                                                                                             |  10 GB  00:00:14     
    
    
    ##查看可伶后的状态,发现虚拟机web02和配置文件都存在
    Clone 'web02' created successfully.
    [root@kvm1 opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     2     web01                          paused
     -     web02                          shut off
    
    [root@kvm1 opt]# ls /etc/libvirt/qemu
    autostart  networks  web01.xml  web02.xml
    View Code

    克隆完毕后可以打开虚拟机查看运行状态,这里不再粘贴。

    链接克隆

    链接克隆有两种方式,其中一种比较麻烦,现在也不多使用,可以参考https://www.qstack.com.cn/archives/230.html

    我们使用另外一种,简单说就是在源虚拟机的磁盘基础上,创建一个新的磁盘,然后用这个新的磁盘来构建虚拟机,过程如下

    [root@kvm1 opt]# qemu-img create -f qcow2 -b centos.qcow2 web03.qcow2                  
    Formatting 'web03.qcow2', fmt=qcow2 size=10737418240 backing_file='centos.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
    
    ##构建虚拟机,与之前的构建命令做区别,可以理解就是pc机安装完系统后,不再设置从光驱启动,而是直接从硬盘启动了
    [root@kvm1 opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web03 --memory 1024 --vcpus 1 --disk /opt/web03.qcow2 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
    
    ##连接克隆后查看状态,确认web03虚拟机运行状态,也可以看看配置文件,当然最好进入系统去看看虚拟机是否可以正常使用
    [root@kvm1 opt]# virsh list --all
     Id    Name                           State
    ----------------------------------------------------
     2     web01                          paused
     3     web02                          running
     4     web03                          running
    
    [root@kvm1 opt]# ls /etc/libvirt/qemu
    autostart  networks  web01.xml  web02.xml  web03.xml
    View Code

    这篇就到这里,剩下的网卡模式和kvm的热添加技术在下一篇中描述。

  • 相关阅读:
    AMH4.2 Ftp账号路径修改设置
    过狗一句话
    破解tumblr背景音乐
    lnmp下安装ffmpeg和ffmpeg-php教程
    How To install FFMPEG, FLVTOOL2, MP4Box on CentOS server 2015 easy method
    自己的路删除
    弹出CPA
    JSON的相关知识
    JavaScript函数的相关知识
    JavaScript对象的相关知识
  • 原文地址:https://www.cnblogs.com/Go-Spurs-Go/p/10350244.html
Copyright © 2011-2022 走看看