KVM 是一种开源的虚拟化技术,提供了快照管理的功能。快照是虚拟机当前状态的一个副本,可以记录虚拟机在某个时间点的状态,允许管理员回滚虚拟机到之前的状态。
KVM 快照管理的原理主要包含以下三个步骤:
1.创建快照
管理员可以在 KVM 中使用 virsh
命令或者其他管理工具创建快照。当管理员创建快照时,当前虚拟机的状态将被冻结,包括内存的数据和虚拟机的 CPU 状态。此时,KVM 会将当前虚拟机的状态保存到一个镜像文件中。
2.修改虚拟机
在创建快照之后,管理员可以在虚拟机中进行修改,包括安装软件、配置网络和修改文件等操作。这些修改将不会影响到快照中的虚拟机状态。
3.恢复虚拟机
如果管理员需要恢复虚拟机到之前的状态,可以使用 virsh
命令或者其他管理工具操作。此时,KVM 会使用之前创建的快照镜像文件中的数据恢复虚拟机的状态,包括内存和 CPU 的状态,使之前的状态得以恢复。
需要注意的是,恢复快照会覆盖当前虚拟机的状态,包括修改后的数据。因此,在恢复快照之前需要先备份当前虚拟机的数据,以便在恢复快照后再次操作。此外,快照会占用存储空间,因此需要根据实际情况定期清理无用的快照数据。
KVM 中的快照管理使用的是 COW(Copy-On-Write)技术。
在 COW 中,当管理员创建快照时,KVM 不会在磁盘上创建一个新的虚拟机镜像,而是复制一份指向原始虚拟机镜像的元数据(metadata),并创建一个快照树(snapshot tree)。新的快照将只记录修改过的部分,在新的快照上进行的写入操作将被复制到新的块设备中,而不改变旧的数据,因此可以避免复制整个块设备的开销。
当管理员恢复快照时,KVM 会将所有快照和基础镜像进行合并,以便恢复原始的虚拟机镜像。在合并快照时,KVM 会将修改的数据块复制到新的虚拟机镜像中,并释放旧的数据块。由于只有修改过的部分被复制,因此合并的时间通常会比较短,占用的磁盘空间也相对较小。
第一部分
[root@localhost ~]# virsh list --all
Id Name State
centos7.0 shut off
VM-1 shut off
VM-2 shut off
VM-3 shut off
[root@localhost ~]# virsh start VM-3
Domain VM-3 started
[root@localhost ~]# virsh snapshot-create VM-3 创建快照
Domain snapshot 1714999488 created
[root@localhost ~]# virsh snapshot-info VM-3 --current 查看快照
Name: 1714999488
Domain: VM-3
Current: yes
State: running
Location: internal
Parent: 1714999215
Children: 0
Descendants: 0
Metadata: yes
[root@localhost ~]# virsh snapshot-info VM-3 --snapshotname 1714999488
Name: 1714999488
Domain: VM-3
Current: yes
State: running
Location: internal
Parent: 1714999215
Children: 0
Descendants: 0
Metadata: ye
$ rm -rf /* 模拟删库跑路
[root@localhost ~]# virsh snapshot-list VM-3
Name Creation Time State
1714999215 2024-05-06 20:40:15 +0800 shutoff
1714999488 2024-05-06 20:44:48 +0800 running
[root@localhost ~]# virsh snapshot-revert VM-3 --snapshotname 1714999488 恢复快照
[root@localhost ~]# virsh reboot VM-3 重启虚拟机
Domain VM-3 is being rebooted
[root@localhost ~]# virsh list --all
Id Name State
VM-3 running
centos7.0 shut off
VM-1 shut off
VM-2 shut off
[root@localhost ~]# virsh snapshot-delete VM-3 --snapshotname 1714999488
Domain snapshot 1714999488 deleted
[root@localhost ~]# virsh snapshot-list VM-3
Name Creation Time State
1714999215 2024-05-06 20:40:15 +0800 shutoff