注意点写在前面
[root@localhost ~]# virsh snapshot-create vm2
错误:不支持的配置:存储类型 vda 不支持磁盘 raw 的内部快照
[root@localhost ~]# virsh domblklist vm2
目标 源
------------------------------------------------
vda /disk3/vm2.raw
hda /disk3/vm2.iso
最好是用.qcow2的磁盘格式创建虚拟机
查看所有虚拟机
[root@localhost ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
2 vm1 running
一、内置快照
1、创建
虚拟机关机状态
virsh snapshot-create-as vm1 centos1_sn1
虚拟机开机状态
virsh snapshot-create-as vm1 centos1_sn2
显示vm1的所有快照
[root@localhost ~]# virsh snapshot-list vm1
名称 生成时间 状态
------------------------------------------------------------
centos1_sn1 2019-02-28 10:15:47 +0800 running
centos1_sn2 2019-02-28 10:15:23 +0800 shutoff
其中running代表是开机状态创建的,shutoff是关机状态创建的
2、回滚
virsh snapshot-revert --domain vm1 centos1_sn1
3、快照删除
virsh snapshot-delete vm1 centos1_sn1
或者
virsh snapshot-delete --domain vm1 --snapshotname centos1_sn1
二、外置磁盘快照
准备工作
virsh destroy vm1 关闭虚拟机
[root@localhost ~]# virsh domblklist vm1
目标 源
------------------------------------------------
vda /disk3/vm1.qcow2
hda -
可以看到,当前所使用磁盘为vm1.qcow2,之前说过,外置磁盘快照创建时,会保存正在使用磁盘作为backing file(此磁盘不再接受新数据,只保存快照前的数据),并创建一个新的磁盘作为overlays以等待写入新数据
1、创建
[root@localhost ~]# virsh snapshot-create-as --domain vm1 vm1_sn1 --disk-only --diskspec vda,snapshot=external,file=/disk3/vm1_sn.qcow2 --atomic
已生成域快照 vm1_sn1
其中/disk3/vm1_sn.qcow2是新生成的磁盘快照
[root@localhost ~]# virsh domblklist vm1
目标 源
------------------------------------------------
vda /disk3/vm1_sn.qcow2
hda -
且正在使用的磁盘也已经更新到新创建的磁盘中去了
2、删除
-》查看磁盘快照
[root@localhost ~]# virsh snapshot-list vm1
名称 生成时间 状态
------------------------------------------------------------
vm1_sn1 2019-02-28 10:28:04 +0800 shutoff
vm1_sn2 2019-02-28 10:42:21 +0800 shutoff
vm1_sn3 2019-02-28 10:42:31 +0800 shutoff
-》外置磁盘快照是不能随便删除的,因为每个快照都有保存相应的数据
[root@localhost ~]# virsh snapshot-delete vm1 vm1_sn1
错误:删除快照失败:vm1_sn1
错误:不支持的配置:尚不支持 1 外部磁盘快照删除
-》查看虚拟机的完整快照链
[root@localhost ~]# virsh domblklist vm1
目标 源
------------------------------------------------
vda /disk3/vm1_sn3.qcow2
hda -
[root@localhost ~]# qemu-img info --backing-chain /disk3/vm1_sn
vm1_sn2.qcow2 vm1_sn3.qcow2 vm1_sn.qcow2
一定要选择当前使用的磁盘也就是 vm1_sn3.qcow2
[root@localhost ~]# qemu-img info --backing-chain /disk3/vm1_sn3.qcow2
image: /disk3/vm1_sn3.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: /disk3/vm1_sn2.qcow2
backing file format: qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
image: /disk3/vm1_sn2.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: /disk3/vm1_sn.qcow2
backing file format: qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
image: /disk3/vm1_sn.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes)
disk size: 196K
cluster_size: 65536
backing file: /disk3/vm1.qcow2
backing file format: qcow2
Format specific information:
compat: 1.1
lazy refcounts: false
通过每个磁盘快照的信息中的backing file可以很容易画出快照链
vm1.qcow2 <- vm1_sn.qcow2 <- vm1_sn2.qcow2 <- vm1_sn3.qcow2
下面介绍如何进行外置快照的合并以缩短链长
两种合并方式:
1)blockcommit向下合并(合并overlay到backing file)
现在:[vm1.qcow2] <- vm1_sn.qcow2 <- vm1_sn2.qcow2 <- vm1_sn3.qcow2
目标:[vm1.qcow2] <- vm1_sn.qcow2 <-------------------- - vm1_sn3.qcow2
[root@localhost ~]# virsh blockcommit --domain vm1 vda --base /disk3/vm1.qcow2 --top /disk3/vm1_sn3.qcow2 --wait --verbose
错误:不支持的配置:这个 QEMU 二进制文件不支持在线指派
原因:
A qemu1.3以下版本不支持live blockcommit,
B qemu2.0以下版本不支持合并'Active'层(最顶部的overlay,即当前使用磁盘)至backing_files
2)blockpull向上合并与blockcommit正好相反
目标还是一样
[root@localhost ~]# virsh blockpull --domain vm1 --path /disk3/vm1_sn3.qcow2 --base /disk3/vm1.qcow2 --wait --verbose
错误:不支持的配置:这个 QEMU 二进制中不支持块任务
现在有的快照
[base] <- vm1_sn <- vm1_sn1 <-vm1_sn2 <-vm1_sn3
现在要删除sn2这个快照
步骤:(1)复制sn2数据到后端sn1,
commit是向后端合并
(2)复制sn2数据到前端sn3
rebase是向前端合并
[root@localhost ~]# qemu-img commit /disk3/vm1_sn2.qcow2
Image committed.
[root@localhost ~]# qemu-img rebase -u -b /disk3/vm1_sn.qcow2 /disk3/vm1_sn3.qcow2
###########-u此模式下仅仅修改指向到backing file名字,不复制数据
[root@localhost ~]# qemu-img rebase -b /disk3/vm1_sn.qcow2 /disk3/vm1_sn3.qcow2
###########去掉-u将把数据也一并复制过去
[root@localhost ~]# virsh snapshot-list vm1
名称 生成时间 状态
------------------------------------------------------------
vm1_sn1 2019-02-28 10:28:04 +0800 shutoff
vm1_sn2 2019-02-28 10:42:21 +0800 shutoff
vm1_sn3 2019-02-28 10:42:31 +0800 shutoff
#清理掉不用的快照
[root@localhost ~]# virsh snapshot-delete --domain vm1 vm1_sn2 --metadata
已删除域快照 vm1_sn2
[root@localhost ~]# virsh snapshot-list vm1
名称 生成时间 状态
------------------------------------------------------------
vm1_sn1 2019-02-28 10:28:04 +0800 shutoff
vm1_sn3 2019-02-28 10:42:31 +0800 shutoff
3、回滚(外置磁盘快照的回滚是暂不支持的)
[root@localhost ~]# virsh snapshot-revert --domain vm1 vm1_sn3
错误:不支持的配置:revert to external snapshot not supported yet