Linux云计算虚拟化-KVM虚拟机克隆和快照
1. 克隆
虚拟机处于关机状态才可以克隆。
克隆语法:virt-clone -o 原虚拟机 -n 新虚拟机 -f 新虚拟机存放路径
# qcow2是centos7默认的虚拟机镜像格式
[root@server images]# ll -h
总用量 11G
-rw-------. 1 root root 11G 12月 8 20:44 centos7.0.qcow2
-rw-r--r--. 1 qemu qemu 973M 12月 8 13:41 CentOS-7-x86_64-Minimal-2009.iso
# 创建克隆
[root@server images]# virt-clone -o centos7.0 -n centos7_clone -f /var/lib/libvirt/images/centos7_clone.img
正在分配 'centos7_clone.img' | 10 GB 00:04
成功克隆 'centos7_clone'。
# 可以看到,克隆的虚拟机分配了10G,但实际仅占1.6G。
[root@server images]# ll -h
总用量 13G
-rw-------. 1 root root 11G 12月 8 20:44 centos7.0.qcow2
-rw-------. 1 root root 1.6G 12月 8 20:53 centos7_clone.img
-rw-r--r--. 1 qemu qemu 973M 12月 8 13:41 CentOS-7-x86_64-Minimal-2009.iso
[root@server images]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 8.0G 4.4G 3.7G 55% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 13M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sdb 50G 13G 38G 26% /var/lib/libvirt/images
/dev/sda1 1014M 180M 835M 18% /boot
tmpfs 378M 4.0K 378M 1% /run/user/42
tmpfs 378M 32K 378M 1% /run/user/0
kvm虚拟机由虚拟机配置文件
和镜像img
组成。
# 每一台虚拟机都会有一个xml文件,该文件为虚拟机配置文件。
[root@server ~]# cd /etc/libvirt/qemu/
[root@server qemu]# ll
总用量 16
-rw-------. 1 root root 4584 12月 8 20:22 centos7.0.xml
-rw-------. 1 root root 4594 12月 8 20:53 centos7_clone.xml
drwx------. 3 root root 42 11月 17 00:30 networks
对比下原虚拟机配置文件和克隆后的虚拟机配置文件,看有什么是不一样的:
①虚拟机名称
②虚拟机uuid
③使用的源镜像文件
④mac地址
克隆后的虚拟机的UUID会与源虚拟机相同,需要删除重启后生成新的UUID。
2. 快照
2.1 虚拟机快照介绍
虚拟机快照格式介绍:
快照格式 | 备注 |
---|---|
cow | 未成熟就被放弃 |
qcow | 取代cow |
qcow2 | 取代qcow,目前centos7默认镜像格式,支持snapshot快照 |
raw | 老牌镜像格式,centos6上的kvm和xen的默认格式,不支持snapshot快照 |
vmdk | vmware的镜像格式 |
kvm快照方法:
①使用lvm快照
②使用qcow2格式的镜像创建快照
2.2 创建kvm快照
①查看kvm磁盘格式:
# 查看kvm磁盘格式
[root@server images]# qemu-img info centos7_clone.img
image: centos7_clone.img
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 1.6G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
[root@server images]# qemu-img info centos7.0.qcow2
image: centos7.0.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 10G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
②创建kvm快照:
虚拟机处于开机状态和关机状态都可以创建快照,关机创建快照相对快些。
快照名支持中文
格式:
virsh snapshot-create 虚拟机名
virsh snapshot-create-as 虚拟机名 快照名
③查看某个虚拟机有哪些快照:
virsh snapshot-list 虚拟机名
[root@server images]# virsh snapshot-create centos7.0
已生成域快照 1607601603
[root@server images]# virsh snapshot-create-as centos7.0 httpd
已生成域快照 httpd
[root@server images]# virsh snapshot-list centos7.0
名称 生成时间 状态
------------------------------------------------------------
1607601603 2020-12-10 20:00:03 +0800 running
httpd 2020-12-10 20:00:38 +0800 running
④查看当前最新的快照版本:
virsh snapshot-current 虚拟机名
⑤查看快照配置文件:
ll /var/lib/libvirt/qemu/snapshot/虚拟机名/
[root@server ~]# ll /var/lib/libvirt/qemu/snapshot/centos7.0/
总用量 16
-rw-------. 1 root root 5838 12月 10 20:00 1607601603.xml
-rw-------. 1 root root 5884 12月 10 20:00 httpd.xml
⑥查看快照占用大小:
qemu-img info 虚拟机名
⑦查看虚拟机的状态:
virsh domstate 虚拟机名
[root@server images]# virsh domstate centos7.0
running
⑧恢复虚拟机快照:
virsh snapshot-revert 虚拟机名 快照名
⑨删除快照:
virsh snapshot-delete 虚拟机名 快照名
3. virsh命令扩展介绍
①查看virsh版本
virsh version
[root@server images]# virsh version
根据库编译:libvirt 4.5.0
使用库:libvirt 4.5.0
使用的 API: QEMU 4.5.0
运行管理程序: QEMU 1.5.3
②导出虚拟机的配置文件【在创建一台kvm虚拟机后,最后都导出其配置文件,这样若取消了虚拟机的定义,也可以添加回来。】
virsh dumpxml 虚拟机名 > xml配置文件名
[root@server images]# virsh dumpxml centos7.0 > /root/a.xml
[root@server images]# ll /root/a.xml
-rw-r--r--. 1 root root 6004 12月 10 20:38 /root/a.xml
③取消虚拟机的定义。 会删除/etc/libvirt/qemu/
目录下对应虚拟机的配置文件,并在图形界面管理器中移除该虚拟机。【如果在未备份虚拟机配置文件的情况下,取消了虚拟机的定义,这时将无法找回该虚拟机。】
virsh undefine 虚拟机名
[root@server ~]# virsh undefine centos7_clone
域 centos7_clone 已经被取消定义
④添加虚拟机的定义。 会在/etc/libvirt/qemu/
目录下添加虚拟机配置文件,并在图形界面管理器中添加该虚拟机。
virsh define 配置文件绝对路径
[root@server ~]# virsh define centos7.0.xml
定义域 centos7.0(从 centos7.0.xml)
⑤强制关闭虚拟机
virsh destroy 虚拟机名
⑥挂机虚拟机
virsh suspend 虚拟机名
⑦恢复虚拟机
virsh resume 虚拟机名
⑧控制台管理虚拟机
virsh console 虚拟机名
⑨取消虚拟机开机自启
virsh autostart --disable 虚拟机名
[root@server ~]# virsh start centos7.0
域 centos7.0 已开始
[root@server ~]# virsh suspend centos7.0
域 centos7.0 被挂起
[root@server ~]# virsh resume centos7.0
域 centos7.0 被重新恢复
[root@server ~]# virsh autostart --disable centos7.0
域 centos7.0取消标记为自动开始
[root@server ~]# virsh autostart centos7.0
域 centos7.0标记为自动开始
[root@server ~]# virsh list
Id 名称 状态
----------------------------------------------------
2 centos7.0 running
[root@server ~]# virsh destroy centos7.0
域 centos7.0 被删除
[root@server ~]# virsh list
Id 名称 状态
----------------------------------------------------
[root@server ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7.0 关闭
4. 镜像格式转换
格式:qemu-img convert -f 原镜像格式 -O 转换后镜像格式 原镜像路径 转换后镜像路径
①关闭虚拟机
virsh shutdown 虚拟机名
[root@server ~]# virsh shutdown centos7.0
②镜像转换
[root@server ~]# qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/centos7.0.qcow2 /var/lib/libvirt/images/centos7.0.raw
③查看镜像格式
# 可以看到镜像格式转换后,是不会覆盖原来的镜像格式的。
[root@server ~]# qemu-img info /var/lib/libvirt/images/centos7.0.raw
image: /var/lib/libvirt/images/centos7.0.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.5G
[root@server ~]# ll /var/lib/libvirt/images/centos7.0.*
-rw-------. 1 root root 11588600320 12月 10 21:06 /var/lib/libvirt/images/centos7.0.qcow2
-rw-r--r--. 1 root root 10737418240 12月 10 21:10 /var/lib/libvirt/images/centos7.0.raw
其他镜像格式转换:
①将 vmdk 转换为 qcow2
qemu-img convert -f vmdk -O qcow2 /var/lib/libvirt/images/centos7.0.vmdk /var/lib/libvirt/images/centos7.0.qcow2
②将 qcow2 转换为 vmdk
qemu-img convert -f qcow2 -O vmdk /var/lib/libvirt/images/centos7.0.qcow2 /var/lib/libvirt/images/centos7.0.vmdk
③将 qcow2 转换为 raw
qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/centos7.0.qcow2 /var/lib/libvirt/images/centos7.0.raw
④将 raw 转换为 qcow2
qemu-img convert -f raw -O qcow2 /var/lib/libvirt/images/centos7.0.raw /var/lib/libvirt/images/centos7.0.qcow2
修改虚拟机配置文件,使用raw格式镜像文件来启动虚拟机:
法一:virsh edit 虚拟机名
[root@server ~]# virsh edit centos7.0
编辑了域 centos7.0 XML 配置。
36 <driver name='qemu' type='raw'/>
37 <source file='/var/lib/libvirt/images/centos7.0.raw'/>
法二:vim 虚拟机配置文件,重启libvirtd服务
[root@server ~]# vim /etc/libvirt/qemu/centos7.0.xml
43 <driver name='qemu' type='raw'/>
44 <source file='/var/lib/libvirt/images/centos7.0.raw'/>
[root@server ~]# systemctl restart libvirtd