本章内容包括:
KVM操作虚拟机
克隆虚拟机
快照管理
磁盘格式
磁盘扩容
调整cpu、内存和网卡
迁移虚拟机

一.KVM操作虚拟机

给虚拟机配置好网络,可以远程连接虚拟机。

查看当前系统有哪些虚拟机:

#启动状态
virsh list
#全部
virsh list --all

启动虚拟机:

virsh start ligenlinux01

进入虚拟机:

virsh console ligenlinux02

退出:

ctrl+]

给虚拟机配置网络:

#dhcp
dhclient eth0

#或者static
vi /etc/sysconfig/network-scripts/ifcfg-eth0
#根据自己的网络添加
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
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=eth0
IPADDR=192.168.247.100
NETMASK=255.255.255.0
GATEWAY=192.168.247.2
DNS1=8.8.8.8
UUID=596cc90e-bd86-492c-a240-c4a47d7652ad
DEVICE=eth0
ONBOOT=yes

在宿主机上查看kvm进程:

ps aux |grep kvm

关闭虚拟机:

virsh shutdown ligenlinux01

强制关闭虚拟机:

virsh destroy ligenlinux02

彻底销毁虚拟机,会删除虚拟机的配置文件:

virsh undefine ligenlinux02

虚拟机的配置文件路径:

ls /etc/libvirt/qemu/

虚拟机的更改都存在了虚拟磁盘里面:

/kvm_data/   //这个目录是自己定义的

设置宿主机开机虚拟机也开机:

virsh autostart ligenlinux01

接触开机启动:

virsh autostart --disable ligenlinux01

挂起:

virsh suspend ligenlinux01

恢复:

virsh resume ligenlinux01

二.克隆虚拟机

先关闭:

virsh shutdown ligenlinux02

克隆:

virt-clone --original ligenlinux02 --name ligenlinux01 --file /kvm_data/ligenlinux02.img

三.快照管理

创建快照:

virsh snapshot-create ligenlinux01

注意:raw格式的虚拟磁盘不支持快照,qcow2支持
查看ligenlinux01.img信息,同时会查看到快照列表

qemu-img info /kvm_data/ligenlinux01.img

列出所有快照:

virsh snapshot-list ligenlinux01

查看当前快照版本:

virsh snapshot-current ligenlinux01

查看所有快照配置文件:

ls /var/lib/libvirt/qemu/snapshot/

恢复指定快照:

virsh snapshot-revert ligenlinux01 1581503220

删除指定快照:

virsh snapshot-delete ligenlinux01 1581503220

四.磁盘格式

磁盘格式分为raw和qcow2两种。
创建raw磁盘:

qemu-img create -f raw /kvm_data/ligenlinux01_2.img 2G

查看该磁盘信息,可以看到raw:

qemu-img info /kvm_data/ligenlinux01_2.img

将raw磁盘转换为qcow2:

qemu-img convert -O qcow2 /kvm_data/ligenlinux01_2.img /kvm_data/ligenlinux01_2.qcow2
-O:指定转换的磁盘格式
后面两个:前面是源文件,后面是目标文件
等于将磁盘复制了一份,原来的不变,但是生成了一个qcow2格式磁盘

注意:
qcow2格式不管用什么看,显示的都是用了的实际空间
raw用ls看会是分配的空间,du看会比较小。

举例子,给某一个虚拟机转换磁盘
先关闭该虚拟机:

virsh shutdown ligenlinux02

转换磁盘:

qemu-img convert -O raw /kvm_data/ligenlinux02.img /kvm_data/ligenlinux02_1.raw

编辑配置文件:

virsh edit ligenlinux02
#等价于vim /etc/libvirt/qemu/ligenlinux02.xml
#官方推荐virsh,因为编辑出错会有提示

#编辑这两个地方
<disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>  //这里type改为raw
      <source file='/kvm_data/ligenlinux02_1.raw'/>  //这里的源文件要改成目标文件
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>

启动ligenlinux02:

virsh start ligenlinux02

注意:虚拟机启动后用哪个磁盘,它的属主和属组就会变成qemu。
可以把原来的磁盘格式删除,节约磁盘空间。raw磁盘不可以做快照。

五.磁盘扩容

raw格式:

cd /kvm_data/
qemu-img resize ligenlinux02_1.raw +2G

#查看磁盘:
qemu-img info /kvm_data/ligenlinux02_1.raw 

#但是我们到虚拟机里面去查看,它里面显示的还是原来的空间
#在宿主机里面重启虚拟机
virsh destroy ligenlinux02
virsh start ligenlinux02

#有了磁盘之后,还需要再虚拟机里面增加一个新的分区
virsh console ligenlinux02
fdisk -l
fdisk /dev/vda

#除此之外,还可以增加一个新的硬盘的方式
#在宿主机上

#创建一个新的虚拟磁盘
qemu-img create -f raw /kvm_data/ligenlinux02_2.raw 3G

#编辑配置文件
virsh edit ligenlinux02
#复制这一部分,并修改
<disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/kvm_data/ligenlinux02_2.raw'/>  //这里改成新的磁盘名称
      <target dev='vdb' bus='virtio'/>  //这里修改成vdb
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>  //slot要修改,不可以和其他地方重复的
    </disk>

#重启虚拟机ligenlinux02
virsh shutdown ligenlinux02
virsh start ligenlinux02

#进入虚拟机里面对新的磁盘vdb,分区,格式化,挂载

实际上现在有很多公司用的是云服务器,磁盘不够了,需要再买一块磁盘,类似于增加了一块盘,自己分区,格式化,挂载。

qcow2格式

对qcow2增加分区,需要注意的是如果该虚拟机做了快照,对该虚拟机扩容,那么会出现报错。

#方法和raw差不多
#下面是第一中方法,增加分区
qemu-img resize /kvm_data/ligenlinux02.img +2G

#第二种方法
qemu-img create -f qcow2 /kvm_data/ligenlinux02_2.img 3G

六.调整cpu、内存和网卡

查看虚拟机的配置:

virsh dominfo ligenlinux02

#如果要看详细的,可以看配置文件
virsh edit ligenlinux02

更改cpu和内存:

virsh edit ligenlinux02
#修改
<memory unit='KiB'>1048576</memory> 
  <currentMemory unit='KiB'>624288</currentMemory>  //内存改成600M左右
  <vcpu placement='static' current='2'>2</vcpu>  //cpu改成2个
#重启虚拟机
virsh shutdown ligenlinux02
virsh start ligenlinux02

#查看
virsh dominfo ligenlinux02

动态调整内存,不需要重启:

#内存可以动态减小
virsh setmem ligenlinux02 800m

动态调整cpu:

#减小不可以,增加可以
virsh setvcpus ligenlinux02 2

让动态调整永久生效:

virsh dumpxml ligenlinux02 > /etc/libvirt/qemu/ligenlinux02.xml

增加网卡
查看网卡:

virsh domiflist ligenlinux02

增加一块新的网卡

#增加一块网卡,设置为nat模式(virbr0类似于vm的vmnet8)
virsh attach-interface ligenlinux02 --type bridge --source virbr0

#增加一块桥接网卡
virsh attach-interface ligenlinux02 --type bridge --source br0

#进入虚拟机查看网络
virsh console ligenlinux02
ip addr

#让配置生效,再宿主机上
virsh dumpxml ligenlinux02 > /etc/libvirt/qemu/ligenlinux02.xml

七.迁移虚拟机

迁移更多的是迁移到另一台机器上去,但是这里偷个懒就在同一台机器上迁移。

#首先关闭要迁移的虚拟机
virsh shutdown ligenlinux02

#拷贝配置文件
virsh dumpxml ligenlinux02 > /etc/libvirt/qemu/ligenlinux03.xml
#如果是远程的话,直接把ligenlinux02.xml同步到另一台机器上就行

#拷贝磁盘文件
#先查看该虚拟机有哪些磁盘,也可以在配置文件中查看
 virsh domblklist ligenlinux02
 vda        /kvm_data/ligenlinux02_1.raw
vdb        /kvm_data/ligenlinux02_2.raw

#拷贝磁盘文件
rsync -av /kvm_data/ligenlinux02_1.raw /kvm_data/ligenlinux03_1.raw
rsync -av /kvm_data/ligenlinux02_2.raw /kvm_data/ligenlinux03_2.raw
#注意,如果是另一台机器的话,需要拷贝到另一台机器上面


#因为是在本机,需要编辑一下ligenlinux03的配置文件,不改会有冲突,远程的话就不用
vim /etc/libvirt/qemu/ligenlinux03.xml
#修改domname
<name>ligenlinux03</name>
#修改uuid,随便改一个数字就行
<uuid>b94c0868-830e-4f70-a0cc-358f722ee9fd</uuid>
#修改磁盘路径,这一步可以看前面的
<source file='/kvm_data/ligenlinux03_1.raw'/>
<source file='/kvm_data/ligenlinux03_2.raw'/>
#保存退出

#定义新虚拟主机
virsh define /etc/libvirt/qemu/ligenlinux03.xml

#查看虚拟机列表,看是否存在ligenlinux03
virsh list --all