了解 libvirt 快照的存储方式

了解 libvirt 快照的存储方式

起初我以为它会存储在其中,/var/lib/libvirt/images/但当我为域创建快照时centos7,此目录中没有任何变化:

drwx--x--x 2 root         root       4096 Feb 29 21:28 .
drwxr-xr-x 7 root         root       4096 Feb 28 23:47 ..
-rw------- 1 libvirt-qemu kvm  5370216574 Feb 29 22:09 centos7-1.qcow2
-rw------- 2 libvirt-qemu kvm  5931597824 Feb 29 22:12 centos7.qcow2
-rw------- 1 root         root 1499267135 Feb 28 21:07 centos7-server.qcow2

接下来我检查了/var/lib/libvirt/qemu/snapshot/centos7显示这些 xml 文件的内容:

client2.xml client.xml disks.xml

这是我给快照起的名字。

有人可以告诉我为什么快照是 xml 文件而不是磁盘映像吗?这些 xml 文件存储什么,我猜它们需要我images目录中的原始 qcow2 图像才能工作,并且不能与任何图像一起工作 - 这是正确的吗?

答案1

xml 文件代表快照元数据,如果打开它,您将看到类似以下内容(为简洁起见,缩短了域定义):

你的快照.xml

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh snapshot-edit
or other application using the libvirt API.
-->

<domainsnapshot>
  <name>your-snapshot</name>
  <state>shutoff</state>
  <creationTime>1567455358</creationTime>
  <memory snapshot='no'/>
  <disks>
    <disk name='hda' snapshot='internal'/>
  </disks>
  <domain type='kvm'>
    <name>centos76-client</name>
    [...]
  </domain>
  <active>1</active>
</domainsnapshot>

该文件记录快照的名称、创建时域的状态、创建时间、如果内存也是快照,以及磁盘,还有该点的域定义。

此域定义与您将获得的信息相同virsh dumpxml your-domain。它是快照时您的设备、CPU、内存等的配置。例如,如果在快照之后您更改了某些设备、内存大小等,这允许您返回到拍摄快照时的确切设置。

现在,在该disks部分中,您可以看到哪些磁盘设备实际进行了快照。您期望创建一个磁盘映像,但对于qcow2文件来说,它的工作方式有点不同。

qcow2实现写入时复制图像。在其他写时复制文件系统上,btrfs这意味着文件不会就地更改,而是在修改时,更改后的文件副本将存储在磁盘上的其他位置。

对于qcow2快照,映像始终会就地修改,但如果已创建快照,则qcow2每当在快照之后修改文件时,都会在该文件中为快照保存应用修改之前的副本。这意味着图像和快照都在qcow2文件内。 (关于文件格式和快照如何工作的更深入的解释qcow2可以找到这里

您可以使用命令列出这些磁盘快照并与之交互(列出、恢复、创建、删除)qemu-img。例如,您可以这样列出快照:

# qemu-img snapshot -l /var/lib/libvirt/qemu/centos7-server.qcow2
Snapshot list:
ID        TAG                 VM SIZE                DATE       VM CLOCK
1         your-snapshot             0 2019-09-02 22:15:58   00:00:00.000

此处的 TAG 应与快照 XML 文件的名称以及nameXML 本身内的条目相匹配,这样才能知道应恢复到图像libvirt中的哪个快照。qcow2

答案2

我写了一篇博文https://www.lorenzobettini.it/2023/04/kvm-virtual-machine-manager-and-virtual-machines-on-external-drives/关于 virt-manager 使用的目录,以及如果您希望将计算机、配置和快照存储在其他目录或外部驱动器中时如何处理它们。

重要的目录是/etc/libvirt/qemu/var/lib/libvirt/qemu/

相关内容