KVM支持三种快照:内置快照、外置快照和内存快照。
内置快照
内置快照的创建会集成在镜像文件中,就像之前我们创建了三个虚机,虚机的镜像文件的qcow2格式的,这个文件会因为内置快照的创造而变大。
# 查询虚机
virsh list --all
# Id 名称 状态
# ----------------------------------------------------
# 4 centos7.0 running
# 5 centos7.0-2 running
# 6 centos7.0-3 running
# 我们选择centos7.0(vm_name)来创建内置快照
virsh snapshot-create-as <vm_name> <snapshot_name>
# 查询快照
virsh snapshot-list <vm_name>
# 恢复内置快照
# 虚机开关机都能恢复!开机下恢复快照,之前登录虚机的shell重新连接才能看到变化!!
virsh snapshot-revert --domain <vm_name> <snapshot_name>
# 恢复内置快照删除
virsh snapshot-delete <vm_name> <snapshot_name>
外置快照
外置快照的快照文件不会集成在镜像文件中,会独立出一个新的qcow2文件,它和旧的qcow2组成了一个版本链:
origin.qcow2 --> snapshot1.qcow2 -->snapshot2.qcow2…
旧的qcow2文件在外置快照创建后成为了只读,并只保留快照创建前的数据。
# 创建外置快照前必须先关闭虚机
virsh destroy <vm_name> # 断电!
virsh shutdown <vm_name> # 关机!
# 查看当前虚机使用的qcow2镜像文件
virsh domblklist <vm_name>
# 目标 源
# ------------------------------------------------
# vda /kvm/volume/vm_cm.qcow2
# hda -
# vm_cm.qcow2就是最初的镜像文件
# 创建快照
# --diskspec这里就是选择vda(编号a的虚拟磁盘)
# file是外部快照的存放位置,必须绝对路径
virsh snapshot-create-as --domain <vm_name> <snapshot_name> --disk-only --diskspec vda,snapshot=external,file=<snapshot_path> --atomic
# 创建外置快照后,查看当前虚机使用的qcow2镜像文件
virsh domblklist <vm_name>
# 目标 源
# ------------------------------------------------
# vda /kvm/volume/ext/vm1_ext1.qcow2
# hda -
# vm1_ext1.qcow2就是创建的外置快照文件
# 查看快照链
qemu-img info --backing-chain <snapshot_name>
# 外部快照按照上述的恢复和删除是不允许的!
# 因为外部快照文件储存的信息不全,会依赖旧的qcow2文件,即上述的版本链性质。
# 强行删除外置快照(执行完可以删qcow2文件了)
virsh snapshot-delete --domain <vm_name> <snapshot_name> --metadata
内存快照
不仅会备份磁盘,也会备份内存数据
# 创建内存快照,会关闭这个虚机
virsh save <vm_name> <mem_snapshot_name>
# 加载内存快照,要在这个虚机关机状态下,恢复很快!!
virsh restore <mem_snapshot_name>
快照的克隆
有时候快照只是一个 系统状态的备份,并不代表完整的镜像文件。当我们有一系列时间上相互承接的快照时(不局限外置快照链那种),如何在当前机器的状态下创建出新的镜像?
# 使用克隆,注意先关闭虚机
virsh destroy <originVmName>
# 开始克隆
# -o指定被克隆虚机的名称,所以这个虚机一定要回滚到需要的内置快照,以当前的状态进行克隆。
# 克隆过程中,要求被克隆虚机关闭或暂停
virt-clone --connect=qemu:///system -o <originVmName> -n <newVmName> -f <newVm_absolute_qcow2Path>
这个命令的好处是,不仅克隆出完全不依赖旧qcow2镜像的新镜像。命令执行完,会出现系的呢虚拟机<newVmName>
,执行virsh start <newVmName>
就行了。
而且,经测试,删除(virsh undefine
)了<originVmName>
对应的虚机,以及镜像文件,并不影响克隆出来的新虚机的使用!!
其他命令
删除与恢复
# 切勿进行删除,删除的恢复当且仅当有导出虚机的配置文件
virsh undefine <vm_name> # 删除
# 导出配置
virsh dumpxml <vm_name> > <vm_config_xml_absolutePath>
# 恢复删除
virsh define <vm_config_xml_absolutePath>
克隆虚机
# 先关闭originVm
virsh destroy <originVmName>
# 开始克隆
virt-clone --connect=qemu:///system -o <originVmName> -n <newVmName> -f <newVm_absolute_qcow2Path>
评论区