13.2. 使用命令行界面创建虚拟机快照
要将虚拟机(VM)的状态保存到快照中,您可以使用 virsh snapshot-create-as
命令。
先决条件
- 您的主机使用 RHEL 9.4 或更高版本。
虚拟机使用基于文件的存储。要检查是否是这种情况,请使用以下命令,并确保对于
disk
设备,其disk type
显示为file
:# virsh dumpxml <vm-name> | grep "disk type" <disk type='file' device='disk'> <disk type='file' device='cdrom'>
如果要创建一个包含正在运行的虚拟机内存的虚拟机快照,您必须有足够的磁盘空间来存储虚拟机的内存。
- 保存虚拟机的内存的最少推荐空间等于虚拟机分配的 RAM。例如,保存具有 32 GB RAM 的虚拟机内存需要最多 32 GB 的磁盘空间。
- 如果虚拟机 I/O 负载过重,则可能需要大量额外的磁盘空间。
- 如果虚拟机已分配了 VFIO passthrough 设备,则可能需要额外的磁盘空间。
如果快照是在不暂停虚拟机的情况下创建的,则可能需要额外的磁盘空间。
警告红帽建议不保存在非常高的工作负载下运行的或使用 VFIO passthrough 设备的虚拟机的内存。保存此类虚拟机的内存可能会填满主机磁盘,并降低系统性能。相反,请考虑为此类虚拟机创建没有内存的快照。
另外,请注意,并非所有 VFIO 设备都能够创建具有内存的快照。目前,只有在附加的 VFIO 设备是启用了迁移功能的 Mellanox VF 时,创建带有内存的快照才能正常工作。
流程
要使用所需参数创建虚拟机快照,请使用
virsh snapshot-create-as
命令。# virsh snapshot-create-as <vm-name> <snapshot-name> <optional-description> <additional-parameters>
要创建关闭的虚拟机的快照,请使用
--disk-only
参数。例如,以下命令从关闭的Testguest1
虚拟机的当前磁盘状态创建Snapshot1
:# virsh snapshot-create-as Testguest1 Snapshot1 --disk-only Domain snapshot Snapshot1 created.
要创建一个保存正在运行的虚拟机的磁盘状态而不是其内存的快照,请使用
--disk-only --quiesce
参数。例如,以下命令从正在运行的Testguest2
虚拟机的当前磁盘状态创建Snapshot2
,描述为clean system install
:# virsh snapshot-create-as Testguest2 Snapshot2 "clean system install" --disk-only --quiesce Domain snapshot Snapshot2 created.
要创建一个暂停正在运行的虚拟机并保存其磁盘状态和内存的快照,请使用
--memspec
参数。例如,以下命令暂停Testguest3
虚拟机,并从虚拟机的当前磁盘和内存状态创建Snapshot3
。VM 内存保存在/var/lib/libvirt/images/saved_memory.img
文件中。快照完成后,虚拟机自动恢复操作。# virsh snapshot-create-as Testguest3 Snapshot3 --memspec /var/lib/libvirt/images/saved_memory.img Domain snapshot Snapshot3 created.
在快照过程中暂停虚拟机会创建停机时间,但可能比创建正在运行的虚拟机的实时快照(使用
--live
选项)更可靠,特别是对于高负载下的虚拟机。要创建一个保存正在运行的虚拟机的磁盘状态及其实时内存的快照,请使用
--live --memspec
参数。例如,以下命令从正在运行的Testguest4
虚拟机的当前磁盘和内存状态创建Snapshot4
,并将内存状态保存在/var/lib/libvirt/images/saved_memory2.img
文件中。# virsh snapshot-create-as Testguest4 Snapshot4 --live --memspec /var/lib/libvirt/images/saved_memory2.img Domain snapshot Snapshot4 created.
将虚拟机的内存保存到快照中会将正在运行的进程的状态保存到虚拟机的客户机操作系统中。但是,当您恢复到此类快照时,进程可能会因为各种因素而失败,如丢失网络连接或未同步的系统时间。
验证
列出与指定虚拟机关联的快照:
# virsh snapshot-list <Testguest1> Name Creation Time State -------------------------------------------------------------- Snapshot1 2024-01-30 18:34:58 +0100 shutoff
验证快照是否已创建为 external :
# virsh snapshot-dumpxml <Testguest1> <Snapshot1> | grep external <disk name='vda' snapshot='external' type='file'>
如果这个命令的输出包含
snapshot='external'
,则快照是外部的,因此红帽完全支持。
其它资源
- 有关快照元数据的上游 libvirt 信息
-
您系统上的
virsh
手册页