有没有什么办法可以缩小 qcow2 图像而不将其转换为原始图像?

有没有什么办法可以缩小 qcow2 图像而不将其转换为原始图像?

有没有什么办法可以缩小 qcow2 图像而不将其转换为原始图像?

我无法将其转换为原始图像,因为我没有足够的磁盘空间来存储原始图像。

答案1

Noop 转换(qcow2-to-qcow2)删除稀疏空间:

qemu-img convert -O qcow2 source.qcow2 shrunk.qcow2

您还可以尝试-c向输出图像添加压缩():

qemu-img convert -c -O qcow2 source.qcow2 shrunk.qcow2

在运行上述命令之前,请务必关闭虚拟机。对结果满意后,您可以将 shrunk.qcow2 重命名为虚拟机配置所需的原始名称。

答案2

尝试virt-sparsify- 它将用零填充图像中未使用的块,然后对零进行重复数据删除。

答案3

我用virt-sparsify

virt-sparsify /path/to/source.qcow2 --compress /path/to/output.qcow2

答案4

我已经成功使用此程序现在已经多次了。简而言之,首先在虚拟客户机中用零填充所有分区上的所有可用空间:

dd if=/dev/zero of=zerofile bs=1M

完成后,使用 清空磁盘缓存sync,删除零文件并关闭客户机。在主机端转换图像(本例中为 qcow2):

qemu-img convert -f raw -O qcow2 guest.img guest-copy.qcow2

这将自动稀疏化图像。如果图像文件后缀发生变化,还请记住更新 vm 定义文件。

这种方法的一个好处virt-sparsify是,在这种方法中,客户机可以在写入零时启动,因此停机时间较短。如果您可以承受较长的停机时间,则使用virt-sparsify,因为它只需一个命令即可处理整个过程,并且在此过程中还会提供有用的反馈。

相关内容