KVM虚拟机导出最小化体积的qcow2镜像文件

KVM虚拟机的模版导出,通常都是直接用qemu-img命令可以将默认的raw格式或者qcow2格式的磁盘文件压缩后导出,指令如下:

//将默认raw格式的磁盘,简单压缩转换成qcow2格式
#qemu-img convert -c -f raw -O qcow2 archlinux.raw /path/archlinuxz.qcow2

//将默认qcow2格式的磁盘,导出为简单压缩后的qcow2格式
#qemu-img convert -c -O qcow2 archlinux.qcow2 archlinuxz.qcow2

//将默认qcow2格式的磁盘,导出为raw格式
#qemu-img convert -f qcow2 -O raw archlinux.qcow2 archlinux.raw

以上两种方法都能在一定程度上压缩减小导出后的镜像文件体积;但仅限于在虚拟机刚安装部署好,还没有进行过大量数据读写处理的情况下;

假如虚拟机磁盘大小分配40G,刚装好的操作系统加入占用了5G,那么通过以上的方式压缩导出的镜像文件可能也就只占4~5G左右;这是因为该磁盘镜像的大量的剩余空间都还没有被虚拟机的操作系统使用到(大量剩余block块都是空白的,未写入过数据)所以在导出的过程中,这些空白的block就会被压缩甚至忽略掉;所以这样压缩出来的缩效果还是很不错的;

但是,假如该虚拟机在装好后之后,有在磁盘上产生并存储过一个2G的大文件,尽管当前已经从虚拟机中彻底删除了这个大文件,虚拟机内的磁盘空间也显示剩余空间已经释放出来了,系统占用空间会变成跟系统刚装完时一样只有5GB;但此时再使用上面的指令对磁盘镜像文件进行压缩导出,你就会发现导出的文件体积比之前至少会多出2GB的体积;

这是因为虚拟机内删除文件,实际只是在分区表中把文件的索引给删除了,其2G文件的物理数据还是依然占用着磁盘上对应的block块的;此时在kvm下用qemu-img info指令就可以清楚看到该虚拟磁盘镜像的物理占用空间(disk size)比之前也变大了2GB;

关于Zeno Chen

本人涉及的领域较多,杂而不精 程序设计语言: Perl, Java, PHP, Python; 数据库系统: MySQL,Oracle; 偶尔做做电路板的开发,主攻STM32单片机
此条目发表在Linux分类目录。将固定链接加入收藏夹。