kvm虚拟化进阶

前面学习了kvm虚拟化的一些基础操作,本节整理一下kvm快照、扩容等等相关的内容。

克隆虚拟机

  • 克隆之前需要先关闭虚拟机:

    $ virsh shutdown vm01
    
  • 克隆

    $ virt-clone --original vm01 --name vm02 --file /kvm_data/vm02.img
    
    # 参数解读:
    --original:指定被克隆的源虚拟机名称
    --name:指定克隆后的虚拟机名字
    --file:指定目标虚拟机的虚拟磁盘文件
    
    # 更多参数,详见:
    $ virt-clone --help
    
  • 查看:

    $ virsh list --all
     Id    名称                         状态
    ----------------------------------------------------
     -     vm01                           关闭
     -     vm02                           关闭
    

快照管理

快照管理相关命令:

$ virsh  snapshot-
snapshot-create     snapshot-current    snapshot-dumpxml    snapshot-info       snapshot-parent     
snapshot-create-as  snapshot-delete     snapshot-edit       snapshot-list       snapshot-revert

创建快照

$ virsh snapshot-create vm01
已生成域快照 1552808803   (速度很快) 

创建完快照后可以通过以下命令查看虚拟硬盘的信息:

$ qemu-img info /kvm_data/vm01.img 
image: /kvm_data/vm01.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.3G
cluster_size: 65536
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         1552808803                0 2019-03-17 15:46:43   00:00:00.000
Format specific information:
    compat: 1.1
    lazy refcounts: true

注意,此处可以查看到快照的相关信息。

查看快照

  • 列出某虚拟机的所有快照

    $ virsh snapshot-list vm01
    
  • 查看当前快照版本信息

    $ virsh snapshot-current vm01
    
  • 查看所有快照配置文件

    $ ls /var/lib/libvirt/qemu/snapshot/vm01/
    

恢复及删除快照

  • 恢复某虚拟机的快照

    $ virsh snapshot-revert vm01 1552808803
    
  • 删除某虚拟机的某个快照

    $ virsh snapshot-delete vm01 1552808803
    

虚拟磁盘格式

虚拟磁盘常用格式:raw、qcow2

虚拟机默认磁盘格式为qcow2——支持创建快照;还有一种格式——raw,不支持创建快照。

  • 创建raw格式的磁盘,大小为2G

    $ qemu-img create -f raw /kvm_data/vm01_2.img 2G 
    Formatting '/kvm_data/vm01_2.img', fmt=raw size=2147483648 
    
  • 查看磁盘

    $ qemu-img info /kvm_data/vm01_2.img 
    image: /kvm_data/vm01_2.img
    file format: raw
    virtual size: 2.0G (2147483648 bytes)
    disk size: 0
    
  • 把raw格式的磁盘转换为qcow2格式

    $ qemu-img convert -O qcow2 /kvm_data/vm01_2.img  /kvm_data/vm01_2.qcow2
    
    $ ls -lh vm01_*
    -rw-r--r-- 1 root root 2.0G 3月  17 16:12 vm01_2.img
    -rw-r--r-- 1 root root 193K 3月  17 16:16 vm01_2.qcow2
    
    $ du -sh *
    0	vm01_2.img
    196K	vm01_2.qcow2
    
    $ qemu-img info /kvm_data/vm01_2.qcow2 
    image: /kvm_data/vm01_2.qcow2
    file format: qcow2
    virtual size: 2.0G (2147483648 bytes)
    disk size: 196K
    cluster_size: 65536
    Format specific information:
        compat: 1.1
        lazy refcounts: false
    

更改某虚拟机的磁盘格式

$ virsh list --all
 Id    名称                         状态
----------------------------------------------------
 -     vm01                           关闭
 -     vm02                           关闭

更换vm02的磁盘格式,首先在执行操作之前需要先关闭虚拟机。

  • 在vm02的基础上创建一个raw格式的磁盘

    $ qemu-img convert -O raw /kvm_data/vm02.img /kvm_data/vm02_1.raw
    
  • 编辑vm02虚拟机的配置文件

    $ virsh edit vm02 
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>  # 更改磁盘镜像类型为 raw
          <source file='/kvm_data/vm02_1.raw'/> # 指定磁盘镜像的位置
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </disk>
    

    说明:使用该命令编辑配置文件等同于 vim /etc/libvirt/qemu/vm02.xml ,好处是该命令本身可以对更改后的文件进行语法检测,类似于 visudo

  • 启动 vm02 虚拟机

    $ virsh start vm02 
    域 vm02 已开始
    
    $ virsh list
     Id    名称                         状态
    ----------------------------------------------------
     5     vm02                           running
    
    $ ls -lh
    总用量 4.0G
    -rw------- 1 root root  11G 3月  17 15:46 vm01.img
    -rw-r--r-- 1 qemu qemu  10G 3月  17 16:38 vm02_1.raw  # 被使用的磁盘属主属组为 qemu
    -rw------- 1 root root 1.4G 3月  17 16:24 vm02.img
    
  • 创建快照

    $ virsh snapshot-create vm02 
    错误:不支持的配置:存储类型 vda 不支持磁盘 raw 的内部快照
    

    即,raw格式磁盘不支持创建快照!

磁盘扩容

扩容raw格式磁盘

$ qemu-img resize /kvm_data/vm02_1.raw +2G 

$  ls -lh
总用量 4.0G
-rw------- 1 root root  11G 3月  23 08:22 vm01.img
-rw-r--r-- 1 root root  12G 3月  23 08:24 vm02_1.raw
-rw------- 1 root root 1.4G 3月  17 16:24 vm02.img

$ qemu-img info vm02_1.raw 
image: vm02_1.raw
file format: raw
virtual size: 12G (12884901888 bytes)
disk size: 1.3G

磁盘扩容后只有在宿主机重启该虚拟机后才可以生效。

注意: 此时新增加的2G并没有被利用,需要对新加的2G重新分区才可以(新增一个分区,分配2G空间,不损坏之前已有分区)。

额外增加磁盘

由上可知,该办法并不是很友好,于是,采用另外一个办法——额外增加磁盘,也可以达到扩容的目的,如下:

  • 创建一块虚拟磁盘

    $  qemu-img create -f raw /kvm_data/vm02_2.raw 5G
    
  • 修改对应虚拟机的配置文件(为虚拟机添加一块虚拟磁盘)

    $ virsh edit vm02
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>
          <source file='/kvm_data/vm02_1.raw'/>
          <target dev='vda' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
        </disk>
        <disk type='file' device='disk'>
          <driver name='qemu' type='raw'/>
          <source file='/kvm_data/vm02_2.raw'/>
          <target dev='vdb' bus='virtio'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
        </disk>
    # 说明:
    ## 复制配置文件中第一块 <disk...>...</disk>
    ## 更改 source 为新创建的虚拟磁盘
    ## 保证 target<dev=>、address<slot=> 中磁盘名称和磁盘槽位(slot)与原有磁盘不同且没被占用
    
  • 重启vm02虚拟机

    $ virsh shutdown vm02
    $ virsh start vm02
    $ virsh console vm02
    
  • 查看虚拟机信息:此时多了一块磁盘vdb(5G)

    $ fdisk -l
    磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x000c9c55
    
       设备 Boot      Start         End      Blocks   Id  System
    /dev/vda1   *        2048     2099199     1048576   83  Linux
    /dev/vda2         2099200     4196351     1048576   82  Linux swap / Solaris
    /dev/vda3         4196352    20971519     8387584   83  Linux
    
    磁盘 /dev/vdb:5368 MB, 5368709120 字节,10485760 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    

    然后对新加磁盘进行格式化、分区、挂载即可完成扩容!!!

扩容qcow2格式磁盘

  • 查看虚拟机磁盘信息

    $ qemu-img info vm01.img 
    image: vm01.img
    file format: qcow2
    virtual size: 10G (10737418240 bytes)
    disk size: 1.4G
    cluster_size: 65536
    Snapshot list:
    ID        TAG                 VM SIZE                DATE       VM CLOCK
    1         1552808803                0 2019-03-17 15:46:43   00:00:00.000
    Format specific information:
        compat: 1.1
        lazy refcounts: true
    
  • 扩容:报错

    $ qemu-img resize /kvm_data/vm01.img +2G
    qemu-img: Can't resize an image which has snapshots  # 存在快照,不能resize,需要删除快照
    qemu-img: This image does not support resize  
    
  • 删除快照再扩容

    $ virsh snapshot-delete vm01 1552808803
    $ qemu-img resize /kvm_data/vm01.img +2G
    
  • 重启vm01

    $ virsh shutdown vm01
    $ virsh start vm01
    $ virsh console vm01 
    
  • 查看vm01磁盘信息

    $ df -h
    文件系统        容量  已用  可用 已用% 挂载点
    /dev/vda3       8.0G  1.1G  7.0G   13% /
    devtmpfs        486M     0  486M    0% /dev
    tmpfs           496M     0  496M    0% /dev/shm
    tmpfs           496M  6.7M  489M    2% /run
    tmpfs           496M     0  496M    0% /sys/fs/cgroup
    /dev/vda1      1014M  126M  889M   13% /boot
    tmpfs            48M     0   48M    0% /run/user/0
    
    $  fdisk -l
    磁盘 /dev/vda:12.9 GB, 12884901888 字节,25165824 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x000c9c55
    
       设备 Boot      Start         End      Blocks   Id  System
    /dev/vda1   *        2048     2099199     1048576   83  Linux
    /dev/vda2         2099200     4196351     1048576   82  Linux swap / Solaris
    /dev/vda3         4196352    20971519     8387584   83  Linux
    

    此时新增加的2G磁盘并没有被使用,需要对这2G增加分区并挂载。

额外增加磁盘

同样该方法比较不友好,可以通过重新添加虚拟磁盘的方法(同raw格式)达到扩容的目的!

$  qemu-img create -f qcow2 /kvm_data/vm01_1.qcow 5G
$ virsh edit vm01
	<disk...>
	...
	<source ...file=..>
	<target ...dev=..>
	<address ...slot=..>
	</disk>

重启vm01,并对新磁盘进行格式化、分区、挂载。

调整CPU、内存和网卡

通过配置文件更改CPU、内存

  • 查看一个虚拟机的配置信息、

    $ virsh dominfo vm01
    Id:             -
    名称:       vm01
    UUID:           5d9d873f-0286-4ada-8e83-f2881b6ad1da
    OS 类型:    hvm
    状态:       关闭
    CPU:          1
    最大内存: 1048576 KiB
    使用的内存: 524288 KiB
    持久:       是
    自动启动: 启用
    管理的保存: 否
    安全性模式: none
    安全性 DOI: 0
    

    如果想看到更详细的信息,可以查看其配置文件。

  • 更改内存、CPU配置

    $ virsh edit vm01
      <currentMemory unit='KiB'>624288</currentMemory>  # 由524288改为624288
      <vcpu placement='static' current='2'>2</vcpu>  # 由current='1'改为current='2'
    
  • 重启虚拟机vm01生效

    $ virsh start vm01
    $ virsh dominfo vm01
    Id:             5
    名称:       vm01
    UUID:           5d9d873f-0286-4ada-8e83-f2881b6ad1da
    OS 类型:    hvm
    状态:       running
    CPU:          2
    CPU 时间:   21.6s
    最大内存: 1048576 KiB
    使用的内存: 624288 KiB
    持久:       是
    自动启动: 启用
    管理的保存: 否
    安全性模式: none
    安全性 DOI: 0
    
    $ virsh console vm01
    
  • 查看虚拟机内置信息

    $ free -h
                  total        used        free      shared  buff/cache   available
    Mem:           576M         84M        377M        6.6M        114M        349M
    Swap:          1.0G          0B        1.0G
    
    $ cat /proc/cpuinfo  |grep processor
    processor	: 0
    processor	: 1
    

    即,内存由512变为576;CPU为2核。

动态调整

  • 调整内存

    $ virsh setmem vm01 800m
    $ virsh dominfo vm01
    Id:             5
    名称:       vm01
    UUID:           5d9d873f-0286-4ada-8e83-f2881b6ad1da
    OS 类型:    hvm
    状态:       running
    CPU:          2
    CPU 时间:   23.9s
    最大内存: 1048576 KiB
    使用的内存: 819200 KiB
    持久:       是
    自动启动: 启用
    管理的保存: 否
    安全性模式: none
    安全性 DOI: 0
    
    # 登陆虚拟机查看
    $ virsh console vm01
    $ free -h
                  total        used        free      shared  buff/cache   available
    Mem:           767M         84M        567M        6.6M        115M        540M
    Swap:          1.0G          0B        1.0G
    
    # 减少内存——生产环境不用
    $ virsh setmem vm01 512m
    $ virsh dominfo vm01
    Id:             5
    名称:       vm01
    UUID:           5d9d873f-0286-4ada-8e83-f2881b6ad1da
    OS 类型:    hvm
    状态:       running
    CPU:          2
    CPU 时间:   25.9s
    最大内存: 1048576 KiB
    使用的内存: 524288 KiB
    持久:       是
    自动启动: 启用
    管理的保存: 否
    安全性模式: none
    安全性 DOI: 0
    
  • 调整CPU

    virsh setvcpus vm01 1
    错误:不支持的配置:failed to find appropriate hotpluggable vcpus to reach the desired target vcpu count  # 即,不支持减小CPU核数
    
    $ virsh setvcpus vm01 2
    
  • 调整网卡

    # 查看网卡信息
    $ virsh domiflist vm01
    接口     类型     源        型号      MAC
    -------------------------------------------------------
    vnet0      bridge     br0        virtio      52:54:00:3c:9d:4b
    
    # 添加网卡
    $ virsh attach-interface vm01 --type bridge --source virbr0
    $ virsh domiflist vm01
    接口     类型     源        型号      MAC
    -------------------------------------------------------
    vnet0      bridge     br0        virtio      52:54:00:3c:9d:4b
    vnet1      bridge     virbr0     rtl8139     52:54:00:77:2e:c2
    
    $ virsh attach-interface vm01 --type bridge --source br0
    成功附加接口
    
    $ virsh domiflist vm01
    接口     类型     源        型号      MAC
    -------------------------------------------------------
    vnet0      bridge     br0        virtio      52:54:00:3c:9d:4b
    vnet1      bridge     virbr0     rtl8139     52:54:00:77:2e:c2
    vnet2      bridge     br0        rtl8139     52:54:00:e1:6d:cd
    
    
    $ virsh console vm01
    # 查看网卡信息
    $ ifconfig
    ens9: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.122.47  netmask 255.255.255.0  broadcast 192.168.122.255
            inet6 fe80::e039:1f3f:dc88:f52  prefixlen 64  scopeid 0x20<link>
            ether 52:54:00:77:2e:c2  txqueuelen 1000  (Ethernet)
            RX packets 42  bytes 3843 (3.7 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 51  bytes 5234 (5.1 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    ens10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.16.180.132  netmask 255.255.255.0  broadcast 172.16.180.255
            inet6 fe80::c4ce:485a:752a:f410  prefixlen 64  scopeid 0x20<link>
            ether 52:54:00:e1:6d:cd  txqueuelen 1000  (Ethernet)
            RX packets 10  bytes 1030 (1.0 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 16  bytes 1984 (1.9 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            ether 52:54:00:3c:9d:4b  txqueuelen 1000  (Ethernet)
            RX packets 28  bytes 2882 (2.8 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

以上动态调整如果要永久生效,最好保存到配置文件中:

$ virsh dumpxml vm01 > /etc/libvirt/qemu/vm01.xml 

Note: 只有在创建虚拟机的时候指定了虚拟机最大内存、最大CPU数量才能对其进行动态调整,且不能超出最大值。

迁移虚拟机

迁移,即将虚拟机的配置文件(.xml)和数据文件(.img)从A机器拷贝到B机器。

迁移之前需要先停止虚拟机!

本次试验在同一台机器进行!

  • 迁移配置文件(如果是远程机器,需要将该配置文件scp到远程机器上)

    $ virsh dumpxml vm01 > /etc/libvirt/qemu/vm03.xml
    
  • 查看源虚拟机磁盘位置

    virsh domblklist vm01
    目标     源
    ------------------------------------------------
    vda        /kvm_data/vm01.img
    hda        -
    
  • 迁移数据文件(如果是远程机器,需要将该文件同步到远程机器上)

    $ rsync -av /kvm_data/vm01.img /kvm_data/vm03.img
    
  • 修改配置文件 (远程机器迁移忽略这一步)

    $ vim /etc/libvirt/qemu/vm03.xml  # 因为是本地拷贝,vm03使用的是vm01的配置,所以会有冲突
      <name>vm03</name>
      <uuid>5d9d375f-0286-4ada-8e83-f2881b6ad1da</uuid> # 随便改数字,位数不要变
      ...
      <source file='/kvm_data/vm03.img'/>
    
  • 定义新虚拟主机

    $  virsh list --all
     Id    名称                         状态
    ----------------------------------------------------
     -     vm01                           关闭
     -     vm02                           关闭
    
    $ virsh define /etc/libvirt/qemu/vm03.xml 
    定义域 vm03(从 /etc/libvirt/qemu/vm03.xml
    
    $ virsh list --all
     Id    名称                         状态
    ----------------------------------------------------
     -     vm01                           关闭
     -     vm02                           关闭
     -     vm03                           关闭
    

迁移完成!

转载于:https://my.oschina.net/adailinux/blog/3026588

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值