我的理解是,当我运行此命令来创建正在运行的域的快照时:
virsh snapshot-create-as myvm snapshot1
这不仅是在每个磁盘映像文件中创建的内部快照,而且 RAM 状态也保存在某处。因此,如果我稍后恢复到该快照,RAM 中的所有内容都将恢复到创建快照时。
我看到了 qcow2 磁盘映像中列出的快照,并且看到了为描述快照和域配置而创建的 XML 文件,但是RAM 的实际内容存储在哪里? 它是“永久的”吗?例如,如果我重新启动主机,如果我选择恢复到该快照,则域的已保存 RAM 状态仍然可用?
qcow2 格式确实为虚拟机内存提供了永久的内部存储。在对运行中的 qcow2 支持的虚拟机进行快照时,其 RAM 状态被转储到用于存储的相同 qcow2 文件中。
从官方 qcow2 页面:
这进一步解释了:
另一方面,在拍摄原始图像文件的快照时会发生什么(即:不使用 qcow2)?Libvirt 将这种快照称为外部快照(将其与 qcow2 文件的内部快照进行比较),因为会生成一个新的 qcow2 文件并将其链接到原始(现在是只读的)原始文件。然后,Libvirt 将虚拟机状态(即:其 RAM 内容)保存在特定文件中,通常位于
/var/lib/libvirt/
. 最终创建元数据 XML 文件以将转储文件“粘合”到覆盖文件中保存的磁盘状态。Libvirt 对外部快照的支持不是很强大;例如(如果事情最近没有改变)你可以用一个命令创建一个外部快照,但你需要多个复杂的命令来删除/恢复它。同时,对于生产工作负载,RedHat 官方推荐使用外部快照,因为它们比内部快照的长链更健壮和更快(并且他们出售的 RHEV 将外部快照的复杂性隐藏在用户之外)。