如何在不影响应用程序的情况下调整 qcow2 图像的大小

Shi*_*Yan 5 resize virtual-machine

我的问题是要调整 qcow2 VM 映像的大小。我有一个内置包和应用程序的映像。例如,在创建映像时,大小为 40G,但现在它实际上使用了大约 5G 的磁盘空间。所以我想缩小它。

我的方法如下:

qemu-img convert -O raw VM1.qcow2 VM1.raw
qemu-img resize VM1.raw -20G
qemu-img convert -c -O qcow2 VM1.raw VM1.qcow2
Run Code Online (Sandbox Code Playgroud)

但是在我这样做之后,虽然大小缩小了很多,但虚拟机无法正常启动。我正在使用带有 KVM/libvirt 的 linux。

ric*_*usa 2

要收缩磁盘,您必须在来宾 VM 上执行一些操作。

一个很好的描述:http://www.jamescoyle.net/how-to/323-reclaim-disk-space-from-a-sparse-image-file-qcow2-vmdk。我添加了碎片整理并扩展了磁盘。

来自 Windows 访客:

用 0 填充所有可用空间。

c:\sdelete.exe -z c:
Run Code Online (Sandbox Code Playgroud)

在 Linux 客户机上,用 0 填充所有可用空间:

dd if=/dev/zero of=~/mytempfile
rm -f ~/mytempfile
Run Code Online (Sandbox Code Playgroud)

在 libvirt 主机上:

mv original_image.qcow2 original_image.qcow2_backup
qemu-img convert -O qcow2 original_image.qcow2_backup original_image.qcow2
Run Code Online (Sandbox Code Playgroud)

要扩容磁盘,都可以在libvirt主机上完成。

mv original_image.qcow2 original_image.qcow2_backup
truncate -s <desired number of Gigabytes>G original_image.qcow2
qemu-img convert -O qcow2 original_image.qcow2_backup original_image.qcow2
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,请检查您的工作。

qemu-img info original_image.qcow2
Run Code Online (Sandbox Code Playgroud)