qcow2格式的虚拟磁盘初始容量设置过大,虽然并不会实际占用主机这么大的磁盘空间,只占用客户机实际使用的空间大小,但有时候还是有些不太方便,所以需要将其收缩(shrink)以下。
qemu-img命令有一个选项resize可以改变磁盘镜像的大小,其格式如下
#qemu-img resize filename [+|-]size
+就是增加磁盘镜像的大小,-就是缩小磁盘镜像的大小,此处的磁盘镜像的大小并不是磁盘镜像文件在KVM主机中实际占用的存储空间大小,而是KVM客户机看到的磁盘的大小。
但是扩大或收缩磁盘镜像大小远没有这么简单。
man qemu-img如是说:
当使用此命令收缩磁盘镜像之前,必须使用客户机的文件系统和分区工具来收缩文件系统和分区,然后再执行resize操作,不然会可能丢失数据。当使用此命令扩大了磁盘镜像之后,必须使用客户机的文件系统和分区工具来使用新增加的磁盘容量。这很好理解,KVM支持的客户机操作系统多种多样,而且都有成熟的文件系统和分区操作工具,resize操作只是简单的扩大或缩小磁盘镜像大小,而不能也无需来了解客户机怎么应对这个改变,这是客户机的事情。面对这么多种类型的客户机,resize也只能做这么多工作了。
不幸的是resize尚不支持qcow2格式的磁盘镜像收缩,会有提示
qemu-img: This image format does not support resize
但是扩大qcow2磁盘镜像没有问题。磁盘镜像扩大另文再叙,先说下缩小,针对不同的客户机会有不同的操作方式。
linux客户机
这里收缩的是一个debian客户机磁盘镜像,其他linux客户机应无不同。
主要的思路就是通过分配一个新的小容量的磁盘镜像,挂载为虚拟机的新的磁盘,然后使用gparted live
cd启动虚拟机,将分区拷贝到新的磁盘,然后用新的磁盘启动客户机。
主要步骤如下:
1.创建新的小