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

时间:2015-03-18 14:02:10

标签: 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

但是在我这样做之后,虽然大小缩小了很多,但VM无法正常启动。我正在使用Linux和KVM / libvirt。

4 个答案:

答案 0 :(得分: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:

从Linux来宾中,用0填充所有可用空间:

dd if=/dev/zero of=~/mytempfile
rm -f ~/mytempfile

在libvirt主机上:

mv original_image.qcow2 original_image.qcow2_backup
qemu-img convert -O qcow2 original_image.qcow2_backup original_image.qcow2

要扩展磁盘,可以在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

在两种情况下,检查你的工作。

qemu-img info original_image.qcow2

答案 1 :(得分:1)

如果您的客户操作系统是Windows,则可以在启动时从guest虚拟机中扩展分区。首先复制原始图像(为安全起见)并使用qemu-img resize为磁盘映像添加空间:

&#13;
&#13;
cp small_image.qcow2 large_image.qcow2
qemu-img resize large_image.qcow2 +100G
&#13;
&#13;
&#13;

然后在large_image.qcow2中启动Windows VM。打开&#34;磁盘管理&#34;效用。右键单击C:,然后选择&#34; Extend Volume&#34;或&#34;收缩量&#34;

您的VM guest虚拟机现在可以访问qemu-img resize添加的空间。

答案 2 :(得分:1)

仅从主机端进行操作可能会导致访客文件系统损坏。 因此,在从主机进行任何更改之前,您需要使用gparted之类的分区工具从来宾内部更改VM的存储分区大小。这样虚拟磁盘的总大小将小于虚拟存储的所需大小。之后,您可以进行转换,调整大小以及从主机转换回虚拟存储文件。

答案 3 :(得分:0)

1)最简单的方法:安装libguestfs-tools 2)运行:virt-sparsify-就地virtualDisk.qcow2

它会存档,因此您不需要额外的空间。