有没有什么办法可以缩小 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
,因为它只需一个命令即可处理整个过程,并且在此过程中还会提供有用的反馈。