起初我以为它会存储在其中,/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 文件的名称以及name
XML 本身内的条目相匹配,这样才能知道应恢复到图像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/
。