一、需求

我有一个kvm虚拟机镜像ubuntu.qco,格式位qcow2,大小为5G,使用一段时间后,镜像磁盘空间已基本占满,需要扩容。查看一下ubuntu.qco的基本信息,如下:

virt-filesystems --long --parts --blkdevs -h -a ubuntu.qco
Name       Type       MBR  Size   Parent
/dev/sda1  partition  83   4.0G   /dev/sda
/dev/sda2  partition  05   1.0K   /dev/sda
/dev/sda5  partition  82   1022M  /dev/sda
/dev/sda   device     -    5.0G

二、环境

OS:centos 6.3

内核:2.6.32-279.el6.x86_64

三、方法一qemu-img resize

根据博文http://openwares.net/linux/qcow2_img_resize_expand.html所述,可以使用qemu-img命令来扩容qemu镜像。使用命令qemu-img resize ubuntu.qco +1G进行扩容,查看镜像基本信息,如下:

virt-filesystems --long --parts --blkdevs -h -a ubuntu.qco
Name       Type       MBR  Size   Parent
/dev/sda1  partition  83   4.0G   /dev/sda
/dev/sda2  partition  05   1.0K   /dev/sda
/dev/sda5  partition  82   1022M  /dev/sda
/dev/sda   device     -    6.0G

结果显示,虚拟机镜像虽然增大了,但是其文件系统并没有扩展到新增的磁盘空间,即sda1、sda2、sda5并没有变化,还需要进一步扩展虚拟机的文件系统。由此看来,qemu-img resize并不能很好的满足我的需求。

四、方法二virt-resize

我继续找解决方法,发现redhat系操作系统具有virt-resize命令,可以解决这个问题。具体参考了博文http://blog.oneiroi.co.uk/linux/kvm/virt-resize/RHEL/LVM/kvm-linux-expanding-a-lvm-guest-file-system-using-virt-resize/

1、依赖包

命令virt-resize的依赖包包括libguestfs-tools和guestfish,使用前需要提前安装。

2、基本原理

virt-resize的基本原理是先创建一个足够大的镜像,然后把原镜像的文件系统拷贝到新的镜像中。由于virt-resize的本质是拷贝镜像,所以通常耗时较长。

3、具体操作

新建一个足够大的镜像

qemu-img create -f qcow2 ubuntu_new.qco 10G

使用virt-size扩容

virt-resize --expand /dev/sda1 ubuntu.qcow ubuntu_new.qco

执行成功后,我们删除ubuntu.qco,将ubuntu_new.qco改名位ubuntu.qco,即可。

最后查看新的镜像信息,如下。整体磁盘空间扩容为10G,sda1扩容为9G。

virt-filesystems --long --parts --blkdevs -h -a ubuntu.qco
Name       Type       MBR  Size   Parent
/dev/sda1  partition  83   9.0G   /dev/sda
/dev/sda2  partition  05   1.0K   /dev/sda
/dev/sda5  partition  82   1022M  /dev/sda
/dev/sda   device     -    10G    -